eapol/eapol_framework/eapol_common/core/eap_process_tlv_message_data.cpp
author hgs
Thu, 16 Sep 2010 13:07:04 +0300
changeset 49 43351a4f2da3
parent 34 ad1f037f1ac2
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2001-2006 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  EAP and WLAN authentication protocols.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/*
49
hgs
parents: 34
diff changeset
    19
* %version: 45 %
26
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// This is enumeration of EAPOL source code.
hgs
parents:
diff changeset
    23
#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents:
diff changeset
    24
	#undef EAP_FILE_NUMBER_ENUM
hgs
parents:
diff changeset
    25
	#define EAP_FILE_NUMBER_ENUM 40
hgs
parents:
diff changeset
    26
	#undef EAP_FILE_NUMBER_DATE
hgs
parents:
diff changeset
    27
	#define EAP_FILE_NUMBER_DATE 1127594498
hgs
parents:
diff changeset
    28
#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
#include "eap_am_memory.h"
hgs
parents:
diff changeset
    32
#include "eap_automatic_variable.h"
hgs
parents:
diff changeset
    33
#include "eap_process_tlv_message_data.h"
hgs
parents:
diff changeset
    34
#include "eap_variable_data.h"
hgs
parents:
diff changeset
    35
#include "eap_am_network_id.h"
hgs
parents:
diff changeset
    36
#include "eap_buffer.h"
hgs
parents:
diff changeset
    37
#include "eapol_session_key.h"
hgs
parents:
diff changeset
    38
#include "abs_eap_state_notification.h"
hgs
parents:
diff changeset
    39
#include "eap_state_notification.h"
hgs
parents:
diff changeset
    40
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
/** @file */
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
hgs
parents:
diff changeset
    45
//--------------------------------------------------
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
EAP_FUNC_EXPORT eap_process_tlv_message_data_c::~eap_process_tlv_message_data_c()
hgs
parents:
diff changeset
    48
{
hgs
parents:
diff changeset
    49
}
hgs
parents:
diff changeset
    50
hgs
parents:
diff changeset
    51
//--------------------------------------------------
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
EAP_FUNC_EXPORT eap_process_tlv_message_data_c::eap_process_tlv_message_data_c(
hgs
parents:
diff changeset
    54
	abs_eap_am_tools_c * const tools)
hgs
parents:
diff changeset
    55
	: eap_tlv_message_data_c(tools)
hgs
parents:
diff changeset
    56
	, m_am_tools(tools)
hgs
parents:
diff changeset
    57
	, m_is_valid(true)
hgs
parents:
diff changeset
    58
{
hgs
parents:
diff changeset
    59
}
hgs
parents:
diff changeset
    60
hgs
parents:
diff changeset
    61
//-------------------------------------------------------------------
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
/**
hgs
parents:
diff changeset
    64
 * This function should increase reference count.
hgs
parents:
diff changeset
    65
 */
hgs
parents:
diff changeset
    66
EAP_FUNC_EXPORT void eap_process_tlv_message_data_c::object_increase_reference_count()
hgs
parents:
diff changeset
    67
{
hgs
parents:
diff changeset
    68
}
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
//-------------------------------------------------------------------
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
/**
hgs
parents:
diff changeset
    73
 * This function should first decrease reference count
hgs
parents:
diff changeset
    74
 * and second return the remaining reference count.
hgs
parents:
diff changeset
    75
 * Reference count must not be decreased when it is zero.
hgs
parents:
diff changeset
    76
 */
hgs
parents:
diff changeset
    77
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::object_decrease_reference_count()
hgs
parents:
diff changeset
    78
{
hgs
parents:
diff changeset
    79
	return 0;
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
//--------------------------------------------------
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
EAP_FUNC_EXPORT bool eap_process_tlv_message_data_c::get_is_valid()
hgs
parents:
diff changeset
    85
{
hgs
parents:
diff changeset
    86
	return m_is_valid && eap_tlv_message_data_c::get_is_valid();
hgs
parents:
diff changeset
    87
}
hgs
parents:
diff changeset
    88
hgs
parents:
diff changeset
    89
//--------------------------------------------------
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
    92
	const eap_variable_data_c * const data) const
hgs
parents:
diff changeset
    93
{
hgs
parents:
diff changeset
    94
	return
hgs
parents:
diff changeset
    95
		(eap_tlv_header_c::get_header_length() // Each attribute have their own header.
hgs
parents:
diff changeset
    96
		+ data->get_data_length());
hgs
parents:
diff changeset
    97
}
hgs
parents:
diff changeset
    98
hgs
parents:
diff changeset
    99
//--------------------------------------------------
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   102
	const eap_am_network_id_c * const network_id) const
hgs
parents:
diff changeset
   103
{
hgs
parents:
diff changeset
   104
	if (network_id == 0
hgs
parents:
diff changeset
   105
		|| network_id->get_is_valid_data() == false)
hgs
parents:
diff changeset
   106
	{
hgs
parents:
diff changeset
   107
		return 0ul;
hgs
parents:
diff changeset
   108
	}
hgs
parents:
diff changeset
   109
hgs
parents:
diff changeset
   110
	return
hgs
parents:
diff changeset
   111
		(3ul * eap_tlv_header_c::get_header_length() // Each attribute have their own header.
hgs
parents:
diff changeset
   112
		+ network_id->get_source_id()->get_data_length()
hgs
parents:
diff changeset
   113
		+ network_id->get_destination_id()->get_data_length()
hgs
parents:
diff changeset
   114
		+ sizeof(network_id->get_type()));
hgs
parents:
diff changeset
   115
}
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
//--------------------------------------------------
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   120
	const abs_eap_state_notification_c * const state) const
hgs
parents:
diff changeset
   121
{
hgs
parents:
diff changeset
   122
	return
hgs
parents:
diff changeset
   123
		(7ul * eap_tlv_header_c::get_header_length()) // Each attribute have their own header.
hgs
parents:
diff changeset
   124
		+ (get_payload_size(state->get_send_network_id())
hgs
parents:
diff changeset
   125
		+ sizeof(u32_t) // eap_protocol_layer_e
hgs
parents:
diff changeset
   126
		+ sizeof(state->get_protocol())
hgs
parents:
diff changeset
   127
		+ eap_expanded_type_c::get_eap_expanded_type_size()
hgs
parents:
diff changeset
   128
		+ sizeof(state->get_current_state())
hgs
parents:
diff changeset
   129
		+ sizeof(u32_t) // bool is_client
hgs
parents:
diff changeset
   130
		+ sizeof(u32_t) // eap_status_e authentication error
hgs
parents:
diff changeset
   131
		);
hgs
parents:
diff changeset
   132
}
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
//--------------------------------------------------
hgs
parents:
diff changeset
   135
hgs
parents:
diff changeset
   136
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   137
	const eapol_session_key_c * const session_key) const
hgs
parents:
diff changeset
   138
{
hgs
parents:
diff changeset
   139
	return
hgs
parents:
diff changeset
   140
		((5ul * eap_tlv_header_c::get_header_length()) // Each attribute have their own header.
hgs
parents:
diff changeset
   141
		+ session_key->get_key()->get_data_length()
hgs
parents:
diff changeset
   142
		+ session_key->get_sequence_number()->get_data_length()
hgs
parents:
diff changeset
   143
		+ sizeof(u32_t) // const eapol_key_type_e m_key_type
hgs
parents:
diff changeset
   144
		+ sizeof(session_key->get_key_index())
hgs
parents:
diff changeset
   145
		+ sizeof(u32_t) // const bool m_key_tx_bit
hgs
parents:
diff changeset
   146
		);
hgs
parents:
diff changeset
   147
}
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
//--------------------------------------------------
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   152
	EAP_TEMPLATE_CONST eap_array_c<u16_t> * const ushort_array) const
hgs
parents:
diff changeset
   153
{
hgs
parents:
diff changeset
   154
	u32_t size(0ul);
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
	for (u32_t ind = 0ul; ind < ushort_array->get_object_count(); ind++)
hgs
parents:
diff changeset
   157
	{
hgs
parents:
diff changeset
   158
		u16_t * const value = ushort_array->get_object(ind);
hgs
parents:
diff changeset
   159
		if (value != 0)
hgs
parents:
diff changeset
   160
		{
hgs
parents:
diff changeset
   161
			size += eap_tlv_header_c::get_header_length() // TLV-header of u16_t.
hgs
parents:
diff changeset
   162
				+ sizeof(u16_t); // Size of u16_t
hgs
parents:
diff changeset
   163
		}
hgs
parents:
diff changeset
   164
	} // for ()
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
	return (size);
hgs
parents:
diff changeset
   167
}
hgs
parents:
diff changeset
   168
hgs
parents:
diff changeset
   169
//--------------------------------------------------
hgs
parents:
diff changeset
   170
hgs
parents:
diff changeset
   171
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   172
	const eap_certificate_entry_c * const cert) const
hgs
parents:
diff changeset
   173
{
hgs
parents:
diff changeset
   174
	u32_t size =
hgs
parents:
diff changeset
   175
		(10ul * eap_tlv_header_c::get_header_length() // Each attribute have their own header.
hgs
parents:
diff changeset
   176
		+ sizeof(u32_t) // eap_certificate_type_e m_CertType
hgs
parents:
diff changeset
   177
		+ sizeof(u32_t) // bool m_SubjectNamePresent
hgs
parents:
diff changeset
   178
		+ sizeof(u32_t) // bool m_IssuerNamePresent
hgs
parents:
diff changeset
   179
		+ sizeof(u32_t) // bool m_SerialNumberPresent
hgs
parents:
diff changeset
   180
		+ sizeof(u32_t) // bool m_SubjectKeyIDPresent
hgs
parents:
diff changeset
   181
		+ sizeof(u32_t) // bool m_ThumbprintPresent
hgs
parents:
diff changeset
   182
		+ sizeof(u32_t) // bool m_LabelPresent
hgs
parents:
diff changeset
   183
		+ sizeof(u32_t) // bool m_PrimaryNamePresent
hgs
parents:
diff changeset
   184
		+ sizeof(u32_t) // bool m_SecondaryNamePresent
hgs
parents:
diff changeset
   185
		+ sizeof(u32_t) // bool m_iIsEnabledPresent
hgs
parents:
diff changeset
   186
		);
hgs
parents:
diff changeset
   187
hgs
parents:
diff changeset
   188
	if (cert->m_SubjectNamePresent == true)
hgs
parents:
diff changeset
   189
	{
hgs
parents:
diff changeset
   190
		size += get_payload_size(&(cert->m_SubjectName));
hgs
parents:
diff changeset
   191
	}
hgs
parents:
diff changeset
   192
hgs
parents:
diff changeset
   193
	if (cert->m_IssuerNamePresent == true)
hgs
parents:
diff changeset
   194
	{
hgs
parents:
diff changeset
   195
		size += get_payload_size(&(cert->m_IssuerName));
hgs
parents:
diff changeset
   196
	}
hgs
parents:
diff changeset
   197
hgs
parents:
diff changeset
   198
	if (cert->m_SerialNumberPresent == true)
hgs
parents:
diff changeset
   199
	{
hgs
parents:
diff changeset
   200
		size += get_payload_size(&(cert->m_SerialNumber));
hgs
parents:
diff changeset
   201
	}
hgs
parents:
diff changeset
   202
hgs
parents:
diff changeset
   203
	if (cert->m_SubjectKeyIDPresent == true)
hgs
parents:
diff changeset
   204
	{
hgs
parents:
diff changeset
   205
		size += get_payload_size(&(cert->m_SubjectKeyID));
hgs
parents:
diff changeset
   206
	}
hgs
parents:
diff changeset
   207
hgs
parents:
diff changeset
   208
	if (cert->m_ThumbprintPresent == true)
hgs
parents:
diff changeset
   209
	{
hgs
parents:
diff changeset
   210
		size += get_payload_size(&(cert->m_Thumbprint));
hgs
parents:
diff changeset
   211
	}
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
	if (cert->m_LabelPresent == true)
hgs
parents:
diff changeset
   214
	{
hgs
parents:
diff changeset
   215
		size += get_payload_size(&(cert->m_Label));
hgs
parents:
diff changeset
   216
	}
hgs
parents:
diff changeset
   217
hgs
parents:
diff changeset
   218
	if (cert->m_PrimaryNamePresent == true)
hgs
parents:
diff changeset
   219
	{
hgs
parents:
diff changeset
   220
		size += get_payload_size(&(cert->m_PrimaryName));
hgs
parents:
diff changeset
   221
	}
hgs
parents:
diff changeset
   222
hgs
parents:
diff changeset
   223
	if (cert->m_SecondaryNamePresent == true)
hgs
parents:
diff changeset
   224
	{
hgs
parents:
diff changeset
   225
		size += get_payload_size(&(cert->m_SecondaryName));
hgs
parents:
diff changeset
   226
	}
hgs
parents:
diff changeset
   227
hgs
parents:
diff changeset
   228
	if (cert->m_iIsEnabledPresent == true)
hgs
parents:
diff changeset
   229
	{
hgs
parents:
diff changeset
   230
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   231
		size += sizeof(u32_t); // bool m_iIsEnabled
hgs
parents:
diff changeset
   232
	}
hgs
parents:
diff changeset
   233
hgs
parents:
diff changeset
   234
	return size;
hgs
parents:
diff changeset
   235
}
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
//--------------------------------------------------
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   240
	const eap_method_settings_c * const internal_settings) const
hgs
parents:
diff changeset
   241
{
hgs
parents:
diff changeset
   242
	u32_t size =
hgs
parents:
diff changeset
   243
		(4ul * eap_tlv_header_c::get_header_length() // Each attribute have their own header.
hgs
parents:
diff changeset
   244
		+ sizeof(u32_t) // eap_status_e m_completion_status
hgs
parents:
diff changeset
   245
		+ eap_expanded_type_c::get_eap_expanded_type_size() // eap_type_value_e m_EAPType
hgs
parents:
diff changeset
   246
		+ sizeof(u32_t) // u32_t m_IndexType
hgs
parents:
diff changeset
   247
		+ sizeof(u32_t) // u32_t m_Index
hgs
parents:
diff changeset
   248
		);
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   251
	size += sizeof(u32_t); // bool m_UseAutomaticCACertificatePresent
hgs
parents:
diff changeset
   252
	if (internal_settings->m_UseAutomaticCACertificatePresent == true)
hgs
parents:
diff changeset
   253
	{
hgs
parents:
diff changeset
   254
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   255
		size += sizeof(u32_t); // bool m_UseAutomaticCACertificate
hgs
parents:
diff changeset
   256
	}
hgs
parents:
diff changeset
   257
hgs
parents:
diff changeset
   258
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   259
	size += sizeof(u32_t); // bool m_UseAutomaticUsernamePresent
hgs
parents:
diff changeset
   260
	if (internal_settings->m_UseAutomaticUsernamePresent == true)
hgs
parents:
diff changeset
   261
	{
hgs
parents:
diff changeset
   262
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   263
		size += sizeof(u32_t); // bool m_UseAutomaticUsername
hgs
parents:
diff changeset
   264
	}
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   267
	size += sizeof(u32_t); // bool m_UseAutomaticRealmPresent
hgs
parents:
diff changeset
   268
	if (internal_settings->m_UseAutomaticRealmPresent == true)
hgs
parents:
diff changeset
   269
	{
hgs
parents:
diff changeset
   270
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   271
		size += sizeof(u32_t); // bool m_UseAutomaticRealm
hgs
parents:
diff changeset
   272
	}
hgs
parents:
diff changeset
   273
hgs
parents:
diff changeset
   274
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   275
	size += sizeof(u32_t); // bool m_UsernamePresent
hgs
parents:
diff changeset
   276
	if (internal_settings->m_UsernamePresent == true)
hgs
parents:
diff changeset
   277
	{
hgs
parents:
diff changeset
   278
		size += get_payload_size(&(internal_settings->m_Username_fix));
hgs
parents:
diff changeset
   279
	}
hgs
parents:
diff changeset
   280
hgs
parents:
diff changeset
   281
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   282
	size += sizeof(u32_t); // bool m_PasswordExistPresent
hgs
parents:
diff changeset
   283
	if (internal_settings->m_PasswordExistPresent == true)
hgs
parents:
diff changeset
   284
	{
hgs
parents:
diff changeset
   285
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   286
		size += sizeof(u32_t); // bool m_PasswordExist
hgs
parents:
diff changeset
   287
	}
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   290
	size += sizeof(u32_t); // bool m_PasswordPresent
hgs
parents:
diff changeset
   291
	if (internal_settings->m_PasswordPresent == true)
hgs
parents:
diff changeset
   292
	{
hgs
parents:
diff changeset
   293
		size += get_payload_size(&(internal_settings->m_Password));
hgs
parents:
diff changeset
   294
	}
hgs
parents:
diff changeset
   295
hgs
parents:
diff changeset
   296
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   297
	size += sizeof(u32_t); // bool m_RealmPresent
hgs
parents:
diff changeset
   298
	if (internal_settings->m_RealmPresent == true)
hgs
parents:
diff changeset
   299
	{
hgs
parents:
diff changeset
   300
		size += get_payload_size(&(internal_settings->m_Realm));
hgs
parents:
diff changeset
   301
	}
hgs
parents:
diff changeset
   302
hgs
parents:
diff changeset
   303
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   304
	size += sizeof(u32_t); // bool m_UsePseudonymsPresent
hgs
parents:
diff changeset
   305
	if (internal_settings->m_UsePseudonymsPresent == true)
hgs
parents:
diff changeset
   306
	{
hgs
parents:
diff changeset
   307
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   308
		size += sizeof(u32_t); // bool m_UsePseudonyms
hgs
parents:
diff changeset
   309
	}
hgs
parents:
diff changeset
   310
hgs
parents:
diff changeset
   311
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   312
	size += sizeof(u32_t); // bool m_VerifyServerRealmPresent
hgs
parents:
diff changeset
   313
	if (internal_settings->m_VerifyServerRealmPresent == true)
hgs
parents:
diff changeset
   314
	{
hgs
parents:
diff changeset
   315
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   316
		size += sizeof(u32_t); // bool m_VerifyServerRealm
hgs
parents:
diff changeset
   317
	}
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   320
	size += sizeof(u32_t); // bool m_RequireClientAuthenticationPresent
hgs
parents:
diff changeset
   321
	if (internal_settings->m_RequireClientAuthenticationPresent == true)
hgs
parents:
diff changeset
   322
	{
hgs
parents:
diff changeset
   323
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   324
		size += sizeof(u32_t); // bool m_RequireClientAuthentication
hgs
parents:
diff changeset
   325
	}
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   328
	size += sizeof(u32_t); // bool m_SessionValidityTimePresent
hgs
parents:
diff changeset
   329
	if (internal_settings->m_SessionValidityTimePresent == true)
hgs
parents:
diff changeset
   330
	{
hgs
parents:
diff changeset
   331
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   332
		size += sizeof(u32_t); // u32_t m_SessionValidityTime
hgs
parents:
diff changeset
   333
	}
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   336
	size += sizeof(u32_t); // bool m_CipherSuitesPresent
hgs
parents:
diff changeset
   337
	if (internal_settings->m_CipherSuitesPresent == true)
hgs
parents:
diff changeset
   338
	{
hgs
parents:
diff changeset
   339
		// Array header.
hgs
parents:
diff changeset
   340
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   341
		size += get_payload_size(&(internal_settings->m_CipherSuites));
hgs
parents:
diff changeset
   342
	}
hgs
parents:
diff changeset
   343
hgs
parents:
diff changeset
   344
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   345
	size += sizeof(u32_t); // bool m_PEAPVersionsPresent
hgs
parents:
diff changeset
   346
	if (internal_settings->m_PEAPVersionsPresent == true)
hgs
parents:
diff changeset
   347
	{
hgs
parents:
diff changeset
   348
		size += (3ul * eap_tlv_header_c::get_header_length());
hgs
parents:
diff changeset
   349
		size += sizeof(u32_t); // bool m_PEAPv0Allowed
hgs
parents:
diff changeset
   350
		size += sizeof(u32_t); // bool m_PEAPv1Allowed
hgs
parents:
diff changeset
   351
		size += sizeof(u32_t); // bool m_PEAPv2Allowed
hgs
parents:
diff changeset
   352
	}
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   355
	size += sizeof(u32_t); // bool m_CertificatesPresent
hgs
parents:
diff changeset
   356
	if (internal_settings->m_CertificatesPresent == true)
hgs
parents:
diff changeset
   357
	{
hgs
parents:
diff changeset
   358
		// Array header.
hgs
parents:
diff changeset
   359
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   360
		size += get_payload_size(&(internal_settings->m_Certificates));
hgs
parents:
diff changeset
   361
	}
hgs
parents:
diff changeset
   362
hgs
parents:
diff changeset
   363
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   364
	size += sizeof(u32_t); // bool m_EnabledEncapsulatedEAPTypesPresent
hgs
parents:
diff changeset
   365
	if (internal_settings->m_EnabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
   366
	{
hgs
parents:
diff changeset
   367
		// Array header.
hgs
parents:
diff changeset
   368
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   369
		size += get_payload_size(&(internal_settings->m_EnabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
   370
	}
hgs
parents:
diff changeset
   371
hgs
parents:
diff changeset
   372
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   373
	size += sizeof(u32_t); // bool m_DisabledEncapsulatedEAPTypesPresent
hgs
parents:
diff changeset
   374
	if (internal_settings->m_DisabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
   375
	{
hgs
parents:
diff changeset
   376
		// Array header.
hgs
parents:
diff changeset
   377
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   378
		size += get_payload_size(&(internal_settings->m_DisabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
   379
	}
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   382
	size += sizeof(u32_t); // bool m_AuthProvModeAllowedPresent
hgs
parents:
diff changeset
   383
	if (internal_settings->m_AuthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
   384
	{
hgs
parents:
diff changeset
   385
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   386
		size += sizeof(u32_t); // bool m_AuthProvModeAllowed
hgs
parents:
diff changeset
   387
	}
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   390
	size += sizeof(u32_t); // bool m_UnauthProvModeAllowedPresent
hgs
parents:
diff changeset
   391
	if (internal_settings->m_UnauthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
   392
	{
hgs
parents:
diff changeset
   393
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   394
		size += sizeof(u32_t); // bool m_UnauthProvModeAllowed
hgs
parents:
diff changeset
   395
	}
hgs
parents:
diff changeset
   396
hgs
parents:
diff changeset
   397
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   398
	size += sizeof(u32_t); // bool m_PACGroupReferencePresent
hgs
parents:
diff changeset
   399
	if (internal_settings->m_PACGroupReferencePresent == true)
hgs
parents:
diff changeset
   400
	{
hgs
parents:
diff changeset
   401
		size += get_payload_size(&(internal_settings->m_PACGroupReference));
hgs
parents:
diff changeset
   402
	}
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   405
	size += sizeof(u32_t); // bool m_WarnADHPNoPACPresent
hgs
parents:
diff changeset
   406
	if (internal_settings->m_WarnADHPNoPACPresent == true)
hgs
parents:
diff changeset
   407
	{
hgs
parents:
diff changeset
   408
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   409
		size += sizeof(u32_t); // bool m_WarnADHPNoPAC
hgs
parents:
diff changeset
   410
	}
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   413
	size += sizeof(u32_t); // bool m_WarnADHPNoMatchingPACPresent
hgs
parents:
diff changeset
   414
	if (internal_settings->m_WarnADHPNoMatchingPACPresent == true)
hgs
parents:
diff changeset
   415
	{
hgs
parents:
diff changeset
   416
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   417
		size += sizeof(u32_t); // bool m_WarnADHPNoMatchingPAC
hgs
parents:
diff changeset
   418
	}
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   421
	size += sizeof(u32_t); // bool m_WarnNotDefaultServerPresent
hgs
parents:
diff changeset
   422
	if (internal_settings->m_WarnNotDefaultServerPresent == true)
hgs
parents:
diff changeset
   423
	{
hgs
parents:
diff changeset
   424
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   425
		size += sizeof(u32_t); // bool m_WarnNotDefaultServer
hgs
parents:
diff changeset
   426
	}
hgs
parents:
diff changeset
   427
hgs
parents:
diff changeset
   428
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   429
	size += sizeof(u32_t); // bool m_SelectedEAPTypesPresent
hgs
parents:
diff changeset
   430
	if (internal_settings->m_SelectedEAPTypesPresent == true)
hgs
parents:
diff changeset
   431
	{
hgs
parents:
diff changeset
   432
		// Array header.
hgs
parents:
diff changeset
   433
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   434
		size += get_payload_size(&(internal_settings->m_active_eap_methods));
hgs
parents:
diff changeset
   435
hgs
parents:
diff changeset
   436
		// Array header.
hgs
parents:
diff changeset
   437
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   438
		size += get_payload_size(&(internal_settings->m_disabled_eap_methods));
hgs
parents:
diff changeset
   439
	}
hgs
parents:
diff changeset
   440
hgs
parents:
diff changeset
   441
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   442
	size += sizeof(u32_t); // bool m_TunnelingTypePresent
hgs
parents:
diff changeset
   443
	if (internal_settings->m_TunnelingTypePresent == true)
hgs
parents:
diff changeset
   444
	{
hgs
parents:
diff changeset
   445
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   446
		size += eap_expanded_type_c::get_eap_expanded_type_size(); // eap_type_value_e m_TunnelingType
hgs
parents:
diff changeset
   447
	}
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   450
	size += sizeof(u32_t); // bool m_DestinationIndexAndTypePresent
hgs
parents:
diff changeset
   451
	if (internal_settings->m_DestinationIndexAndTypePresent == true)
hgs
parents:
diff changeset
   452
	{
hgs
parents:
diff changeset
   453
		size += (2ul * eap_tlv_header_c::get_header_length());
hgs
parents:
diff changeset
   454
		size += sizeof(u32_t); // u32_t m_DestinationIndexType
hgs
parents:
diff changeset
   455
		size += sizeof(u32_t); // u32_t m_DestinationIndex
hgs
parents:
diff changeset
   456
	}
hgs
parents:
diff changeset
   457
hgs
parents:
diff changeset
   458
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   459
	size += sizeof(u32_t); // bool m_MethodInfoPresent
hgs
parents:
diff changeset
   460
	if (internal_settings->m_MethodInfoPresent == true)
hgs
parents:
diff changeset
   461
	{
hgs
parents:
diff changeset
   462
		size += get_payload_size(&(internal_settings->m_KReleaseDate));
hgs
parents:
diff changeset
   463
		size += get_payload_size(&(internal_settings->m_KEapTypeVersion));
hgs
parents:
diff changeset
   464
		size += get_payload_size(&(internal_settings->m_KManufacturer));
hgs
parents:
diff changeset
   465
	}
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   468
	size += sizeof(u32_t); // bool m_ButtonIdPresent
hgs
parents:
diff changeset
   469
	if (internal_settings->m_ButtonIdPresent == true)
hgs
parents:
diff changeset
   470
	{
hgs
parents:
diff changeset
   471
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   472
		size += sizeof(u32_t); // i32_t m_ButtonId
hgs
parents:
diff changeset
   473
	}
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   476
	size += sizeof(u32_t); // bool m_ShowPassWordPromptPresent
hgs
parents:
diff changeset
   477
	if (internal_settings->m_ShowPassWordPromptPresent == true)
hgs
parents:
diff changeset
   478
	{
hgs
parents:
diff changeset
   479
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   480
		size += sizeof(u32_t); // bool m_ShowPassWordPrompt));
hgs
parents:
diff changeset
   481
	}
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
	size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   484
	size += sizeof(u32_t); // bool m_UseIdentityPrivacyPresent
hgs
parents:
diff changeset
   485
	if (internal_settings->m_UseIdentityPrivacyPresent == true)
hgs
parents:
diff changeset
   486
	{
hgs
parents:
diff changeset
   487
		size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   488
		size += sizeof(u32_t); // bool m_UseIdentityPrivacy));
hgs
parents:
diff changeset
   489
	}
hgs
parents:
diff changeset
   490
hgs
parents:
diff changeset
   491
	return size;
hgs
parents:
diff changeset
   492
}
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
//--------------------------------------------------
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   497
	EAP_TEMPLATE_CONST eap_array_c<eap_certificate_entry_c> * const cert_array) const
hgs
parents:
diff changeset
   498
{
hgs
parents:
diff changeset
   499
	u32_t size(0ul);
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
	for (u32_t ind = 0ul; ind < cert_array->get_object_count(); ind++)
hgs
parents:
diff changeset
   502
	{
hgs
parents:
diff changeset
   503
		eap_certificate_entry_c * const value = cert_array->get_object(ind);
hgs
parents:
diff changeset
   504
		if (value != 0)
hgs
parents:
diff changeset
   505
		{
hgs
parents:
diff changeset
   506
			// Structure header.
hgs
parents:
diff changeset
   507
			size += eap_tlv_header_c::get_header_length();
hgs
parents:
diff changeset
   508
hgs
parents:
diff changeset
   509
			size += get_payload_size(value);
hgs
parents:
diff changeset
   510
		}
hgs
parents:
diff changeset
   511
	} // for ()
hgs
parents:
diff changeset
   512
hgs
parents:
diff changeset
   513
	return (size);
hgs
parents:
diff changeset
   514
}
hgs
parents:
diff changeset
   515
hgs
parents:
diff changeset
   516
//--------------------------------------------------
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   519
hgs
parents:
diff changeset
   520
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   521
	const network_key_and_index_c * const key) const
hgs
parents:
diff changeset
   522
{
hgs
parents:
diff changeset
   523
	u32_t size(0ul);
hgs
parents:
diff changeset
   524
hgs
parents:
diff changeset
   525
	if (key != 0)
hgs
parents:
diff changeset
   526
	{
hgs
parents:
diff changeset
   527
		size += eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   528
			+ sizeof(key->get_network_key_index()) // Size of Network Key Index
hgs
parents:
diff changeset
   529
			+ eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   530
			+ key->get_network_key_const()->get_data_length() // Size of Network Key
hgs
parents:
diff changeset
   531
			;
hgs
parents:
diff changeset
   532
	}
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
	return (size);
hgs
parents:
diff changeset
   535
}
hgs
parents:
diff changeset
   536
hgs
parents:
diff changeset
   537
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   538
hgs
parents:
diff changeset
   539
//--------------------------------------------------
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   544
	const eap_array_c<network_key_and_index_c> * const network_keys) const
hgs
parents:
diff changeset
   545
{
hgs
parents:
diff changeset
   546
	u32_t size(0ul);
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
	for (u32_t ind_network_key = 0ul; ind_network_key < network_keys->get_object_count(); ind_network_key++)
hgs
parents:
diff changeset
   549
	{
hgs
parents:
diff changeset
   550
		network_key_and_index_c * const key = network_keys->get_object(ind_network_key);
hgs
parents:
diff changeset
   551
		if (key != 0)
hgs
parents:
diff changeset
   552
		{
hgs
parents:
diff changeset
   553
			size += eap_tlv_header_c::get_header_length() // Size of structure header
hgs
parents:
diff changeset
   554
				+ get_payload_size(key); // Size of Network Key
hgs
parents:
diff changeset
   555
		}
hgs
parents:
diff changeset
   556
	} // for ()
hgs
parents:
diff changeset
   557
hgs
parents:
diff changeset
   558
	return (size);
hgs
parents:
diff changeset
   559
}
hgs
parents:
diff changeset
   560
hgs
parents:
diff changeset
   561
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   562
hgs
parents:
diff changeset
   563
//--------------------------------------------------
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   566
hgs
parents:
diff changeset
   567
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   568
	const simple_config_credential_c * const credential) const
hgs
parents:
diff changeset
   569
{
hgs
parents:
diff changeset
   570
	u32_t size(0ul);
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
	if (credential != 0)
hgs
parents:
diff changeset
   573
	{
hgs
parents:
diff changeset
   574
		size += eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   575
			+ sizeof(credential->get_network_index()) // Size of Network Index
hgs
parents:
diff changeset
   576
			+ eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   577
			+ credential->get_SSID_const()->get_data_length() // Size of SSID
hgs
parents:
diff changeset
   578
			+ eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   579
			+ sizeof(u16_t) // Size of Authentiction type
hgs
parents:
diff changeset
   580
			+ eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   581
			+ sizeof(u16_t) // Size of Encryption type
hgs
parents:
diff changeset
   582
			;
hgs
parents:
diff changeset
   583
hgs
parents:
diff changeset
   584
		size += eap_tlv_header_c::get_header_length() // Size of header of Array
hgs
parents:
diff changeset
   585
			+ get_payload_size(credential->get_network_keys_const());
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
		size += eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   588
			+ credential->get_MAC_address_const()->get_data_length() // Size of MAC Address
hgs
parents:
diff changeset
   589
			;
hgs
parents:
diff changeset
   590
	}
hgs
parents:
diff changeset
   591
hgs
parents:
diff changeset
   592
	return (size);
hgs
parents:
diff changeset
   593
}
hgs
parents:
diff changeset
   594
hgs
parents:
diff changeset
   595
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   596
hgs
parents:
diff changeset
   597
//--------------------------------------------------
hgs
parents:
diff changeset
   598
hgs
parents:
diff changeset
   599
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   600
hgs
parents:
diff changeset
   601
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   602
	EAP_TEMPLATE_CONST eap_array_c<simple_config_credential_c> * const credential_array) const
hgs
parents:
diff changeset
   603
{
hgs
parents:
diff changeset
   604
	u32_t size(0ul);
hgs
parents:
diff changeset
   605
hgs
parents:
diff changeset
   606
	for (u32_t ind_credential = 0ul; ind_credential < credential_array->get_object_count(); ind_credential++)
hgs
parents:
diff changeset
   607
	{
hgs
parents:
diff changeset
   608
		simple_config_credential_c * const credential = credential_array->get_object(ind_credential);
hgs
parents:
diff changeset
   609
		if (credential != 0)
hgs
parents:
diff changeset
   610
		{
hgs
parents:
diff changeset
   611
			size += eap_tlv_header_c::get_header_length() // Size of structure header
hgs
parents:
diff changeset
   612
				+ get_payload_size(credential);
hgs
parents:
diff changeset
   613
		}
hgs
parents:
diff changeset
   614
	} // for ()
hgs
parents:
diff changeset
   615
hgs
parents:
diff changeset
   616
	return (size);
hgs
parents:
diff changeset
   617
}
hgs
parents:
diff changeset
   618
hgs
parents:
diff changeset
   619
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
   620
hgs
parents:
diff changeset
   621
//--------------------------------------------------
hgs
parents:
diff changeset
   622
hgs
parents:
diff changeset
   623
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
   624
	const eap_variable_data_c * const selector,
hgs
parents:
diff changeset
   625
	const eap_config_value_c * const configuration_option) const
hgs
parents:
diff changeset
   626
{
hgs
parents:
diff changeset
   627
	u32_t size_of_data(0ul);
hgs
parents:
diff changeset
   628
hgs
parents:
diff changeset
   629
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   630
		m_am_tools,
hgs
parents:
diff changeset
   631
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   632
		(EAPL("eap_process_tlv_message_data_c::get_payload_size(): type=%d=%s\n"),
hgs
parents:
diff changeset
   633
		configuration_option->get_const_type(),
hgs
parents:
diff changeset
   634
		eap_configuration_field_c::get_configure_type_string(configuration_option->get_const_type())));
hgs
parents:
diff changeset
   635
hgs
parents:
diff changeset
   636
	switch(configuration_option->get_const_type())
hgs
parents:
diff changeset
   637
	{
hgs
parents:
diff changeset
   638
	case eap_configure_type_string:
hgs
parents:
diff changeset
   639
	case eap_configure_type_hex_data:
hgs
parents:
diff changeset
   640
		size_of_data += 3ul * eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   641
			+ sizeof(u32_t) // Length of the type.
hgs
parents:
diff changeset
   642
			+ selector->get_data_length() // Length of the option name.
hgs
parents:
diff changeset
   643
			+ configuration_option->get_const_data()->get_data_length(); // Length of the option data.
hgs
parents:
diff changeset
   644
		break;
hgs
parents:
diff changeset
   645
	case eap_configure_type_u32_t:
hgs
parents:
diff changeset
   646
	case eap_configure_type_boolean:
hgs
parents:
diff changeset
   647
		size_of_data += 3ul * eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   648
			+ sizeof(u32_t) // Length of the type.
hgs
parents:
diff changeset
   649
			+ selector->get_data_length() // Length of the option name.
hgs
parents:
diff changeset
   650
			+ sizeof(u32_t); // Length of the option data.
hgs
parents:
diff changeset
   651
		break;
hgs
parents:
diff changeset
   652
	case eap_configure_type_u32array:
hgs
parents:
diff changeset
   653
		{
hgs
parents:
diff changeset
   654
			const u32_t count_of_values = configuration_option->get_const_data()->get_data_length() / sizeof(u32_t);
hgs
parents:
diff changeset
   655
			size_of_data += 3ul * eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
   656
				+ sizeof(u32_t) // Length of the type.
hgs
parents:
diff changeset
   657
				+ selector->get_data_length() // Length of the option name.
hgs
parents:
diff changeset
   658
				+ count_of_values*(eap_tlv_header_c::get_header_length()+sizeof(u32_t)); // Length of the option data.
hgs
parents:
diff changeset
   659
		}
hgs
parents:
diff changeset
   660
		break;
hgs
parents:
diff changeset
   661
	case eap_configure_type_subsection:
hgs
parents:
diff changeset
   662
		// No size.
hgs
parents:
diff changeset
   663
		break;
hgs
parents:
diff changeset
   664
	default:
hgs
parents:
diff changeset
   665
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   666
			m_am_tools,
hgs
parents:
diff changeset
   667
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   668
			(EAPL("ERROR: eap_process_tlv_message_data_c::get_payload_size(): Unknown type=%d=%s\n"),
hgs
parents:
diff changeset
   669
			configuration_option->get_const_type(),
hgs
parents:
diff changeset
   670
			eap_configuration_field_c::get_configure_type_string(configuration_option->get_const_type())));
hgs
parents:
diff changeset
   671
		break;
hgs
parents:
diff changeset
   672
	};
hgs
parents:
diff changeset
   673
hgs
parents:
diff changeset
   674
	return (size_of_data);
hgs
parents:
diff changeset
   675
}
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
//--------------------------------------------------
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_structured_parameter_header(
hgs
parents:
diff changeset
   680
	const eap_tlv_message_type_e type,
hgs
parents:
diff changeset
   681
	const u32_t length)
hgs
parents:
diff changeset
   682
{
hgs
parents:
diff changeset
   683
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   684
		m_am_tools,
hgs
parents:
diff changeset
   685
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   686
		(EAPL("eap_process_tlv_message_data_c::add_structured_parameter_header(): type=%d=%s\n"),
hgs
parents:
diff changeset
   687
		type,
hgs
parents:
diff changeset
   688
		 get_type_string(type)));
hgs
parents:
diff changeset
   689
hgs
parents:
diff changeset
   690
	return add_message_header(
hgs
parents:
diff changeset
   691
		type,
hgs
parents:
diff changeset
   692
		length);
hgs
parents:
diff changeset
   693
}
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
//--------------------------------------------------
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   698
	const eap_tlv_message_type_e type,
hgs
parents:
diff changeset
   699
	const u32_t integer)
hgs
parents:
diff changeset
   700
{
hgs
parents:
diff changeset
   701
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   702
hgs
parents:
diff changeset
   703
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   704
		m_am_tools,
hgs
parents:
diff changeset
   705
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   706
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   707
		type,
hgs
parents:
diff changeset
   708
		 get_type_string(type)));
hgs
parents:
diff changeset
   709
hgs
parents:
diff changeset
   710
	const u32_t network_order_integer(eap_htonl(integer));
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   713
		type,
hgs
parents:
diff changeset
   714
		sizeof(network_order_integer),
hgs
parents:
diff changeset
   715
		&network_order_integer);
hgs
parents:
diff changeset
   716
hgs
parents:
diff changeset
   717
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   718
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   719
}
hgs
parents:
diff changeset
   720
hgs
parents:
diff changeset
   721
//--------------------------------------------------
hgs
parents:
diff changeset
   722
hgs
parents:
diff changeset
   723
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   724
	const u64_t long_integer)
hgs
parents:
diff changeset
   725
{
hgs
parents:
diff changeset
   726
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   727
hgs
parents:
diff changeset
   728
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   729
		m_am_tools,
hgs
parents:
diff changeset
   730
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   731
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   732
		eap_tlv_message_type_u64_t,
hgs
parents:
diff changeset
   733
		 get_type_string(eap_tlv_message_type_u64_t)));
hgs
parents:
diff changeset
   734
hgs
parents:
diff changeset
   735
	const u64_t network_order_long_integer(eap_htonll(long_integer));
hgs
parents:
diff changeset
   736
hgs
parents:
diff changeset
   737
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   738
		eap_tlv_message_type_u64_t,
hgs
parents:
diff changeset
   739
		sizeof(network_order_long_integer),
hgs
parents:
diff changeset
   740
		&network_order_long_integer);
hgs
parents:
diff changeset
   741
hgs
parents:
diff changeset
   742
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   743
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   744
}
hgs
parents:
diff changeset
   745
hgs
parents:
diff changeset
   746
//--------------------------------------------------
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   749
	const u32_t integer)
hgs
parents:
diff changeset
   750
{
hgs
parents:
diff changeset
   751
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   754
		m_am_tools,
hgs
parents:
diff changeset
   755
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   756
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   757
		eap_tlv_message_type_u32_t,
hgs
parents:
diff changeset
   758
		 get_type_string(eap_tlv_message_type_u32_t)));
hgs
parents:
diff changeset
   759
hgs
parents:
diff changeset
   760
	const u32_t network_order_integer(eap_htonl(integer));
hgs
parents:
diff changeset
   761
hgs
parents:
diff changeset
   762
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   763
		eap_tlv_message_type_u32_t,
hgs
parents:
diff changeset
   764
		sizeof(network_order_integer),
hgs
parents:
diff changeset
   765
		&network_order_integer);
hgs
parents:
diff changeset
   766
hgs
parents:
diff changeset
   767
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   768
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   769
}
hgs
parents:
diff changeset
   770
hgs
parents:
diff changeset
   771
//--------------------------------------------------
hgs
parents:
diff changeset
   772
hgs
parents:
diff changeset
   773
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   774
	const u16_t short_integer)
hgs
parents:
diff changeset
   775
{
hgs
parents:
diff changeset
   776
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   777
hgs
parents:
diff changeset
   778
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   779
		m_am_tools,
hgs
parents:
diff changeset
   780
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   781
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   782
		eap_tlv_message_type_u16_t,
hgs
parents:
diff changeset
   783
		 get_type_string(eap_tlv_message_type_u16_t)));
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
	const u16_t network_order_short_integer(eap_htons(short_integer));
hgs
parents:
diff changeset
   786
hgs
parents:
diff changeset
   787
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   788
		eap_tlv_message_type_u16_t,
hgs
parents:
diff changeset
   789
		sizeof(network_order_short_integer),
hgs
parents:
diff changeset
   790
		&network_order_short_integer);
hgs
parents:
diff changeset
   791
hgs
parents:
diff changeset
   792
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   793
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   794
}
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
//--------------------------------------------------
hgs
parents:
diff changeset
   797
hgs
parents:
diff changeset
   798
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   799
	const u8_t byte_integer)
hgs
parents:
diff changeset
   800
{
hgs
parents:
diff changeset
   801
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   802
hgs
parents:
diff changeset
   803
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   804
		m_am_tools,
hgs
parents:
diff changeset
   805
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   806
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   807
		eap_tlv_message_type_u8_t,
hgs
parents:
diff changeset
   808
		 get_type_string(eap_tlv_message_type_u8_t)));
hgs
parents:
diff changeset
   809
hgs
parents:
diff changeset
   810
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   811
		eap_tlv_message_type_u8_t,
hgs
parents:
diff changeset
   812
		sizeof(byte_integer),
hgs
parents:
diff changeset
   813
		&byte_integer);
hgs
parents:
diff changeset
   814
hgs
parents:
diff changeset
   815
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   816
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   817
}
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
//--------------------------------------------------
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   822
	const i32_t integer)
hgs
parents:
diff changeset
   823
{
hgs
parents:
diff changeset
   824
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   825
hgs
parents:
diff changeset
   826
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   827
		m_am_tools,
hgs
parents:
diff changeset
   828
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   829
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   830
		eap_tlv_message_type_i32_t,
hgs
parents:
diff changeset
   831
		 get_type_string(eap_tlv_message_type_i32_t)));
hgs
parents:
diff changeset
   832
hgs
parents:
diff changeset
   833
	const i32_t network_order_integer(eap_htonl(integer));
hgs
parents:
diff changeset
   834
hgs
parents:
diff changeset
   835
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   836
		eap_tlv_message_type_i32_t,
hgs
parents:
diff changeset
   837
		sizeof(network_order_integer),
hgs
parents:
diff changeset
   838
		&network_order_integer);
hgs
parents:
diff changeset
   839
hgs
parents:
diff changeset
   840
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   841
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   842
}
hgs
parents:
diff changeset
   843
hgs
parents:
diff changeset
   844
//--------------------------------------------------
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   847
	const i16_t integer)
hgs
parents:
diff changeset
   848
{
hgs
parents:
diff changeset
   849
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   850
hgs
parents:
diff changeset
   851
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   852
		m_am_tools,
hgs
parents:
diff changeset
   853
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   854
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   855
		eap_tlv_message_type_i16_t,
hgs
parents:
diff changeset
   856
		 get_type_string(eap_tlv_message_type_i16_t)));
hgs
parents:
diff changeset
   857
hgs
parents:
diff changeset
   858
	const i16_t network_order_short_integer(eap_htons(integer));
hgs
parents:
diff changeset
   859
hgs
parents:
diff changeset
   860
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   861
		eap_tlv_message_type_i16_t,
hgs
parents:
diff changeset
   862
		sizeof(network_order_short_integer),
hgs
parents:
diff changeset
   863
		&network_order_short_integer);
hgs
parents:
diff changeset
   864
hgs
parents:
diff changeset
   865
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   866
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   867
}
hgs
parents:
diff changeset
   868
hgs
parents:
diff changeset
   869
//--------------------------------------------------
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   872
	const i8_t byte_integer)
hgs
parents:
diff changeset
   873
{
hgs
parents:
diff changeset
   874
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   877
		m_am_tools,
hgs
parents:
diff changeset
   878
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   879
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   880
		eap_tlv_message_type_i8_t,
hgs
parents:
diff changeset
   881
		 get_type_string(eap_tlv_message_type_i8_t)));
hgs
parents:
diff changeset
   882
hgs
parents:
diff changeset
   883
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   884
		eap_tlv_message_type_i8_t,
hgs
parents:
diff changeset
   885
		sizeof(byte_integer),
hgs
parents:
diff changeset
   886
		&byte_integer);
hgs
parents:
diff changeset
   887
hgs
parents:
diff changeset
   888
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   889
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   890
}
hgs
parents:
diff changeset
   891
hgs
parents:
diff changeset
   892
//--------------------------------------------------
hgs
parents:
diff changeset
   893
hgs
parents:
diff changeset
   894
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   895
	const bool boolean)
hgs
parents:
diff changeset
   896
{
hgs
parents:
diff changeset
   897
	const u32_t value((boolean == false) ? 0u: 1u);
hgs
parents:
diff changeset
   898
hgs
parents:
diff changeset
   899
	return add_parameter_data(
hgs
parents:
diff changeset
   900
		eap_tlv_message_type_boolean,
hgs
parents:
diff changeset
   901
		value);
hgs
parents:
diff changeset
   902
}
hgs
parents:
diff changeset
   903
hgs
parents:
diff changeset
   904
//--------------------------------------------------
hgs
parents:
diff changeset
   905
hgs
parents:
diff changeset
   906
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   907
	const eap_status_e status)
hgs
parents:
diff changeset
   908
{
hgs
parents:
diff changeset
   909
	const u32_t value(static_cast<u32_t>(status));
hgs
parents:
diff changeset
   910
hgs
parents:
diff changeset
   911
	return add_parameter_data(
hgs
parents:
diff changeset
   912
		eap_tlv_message_type_eap_status,
hgs
parents:
diff changeset
   913
		value);
hgs
parents:
diff changeset
   914
}
hgs
parents:
diff changeset
   915
hgs
parents:
diff changeset
   916
//--------------------------------------------------
hgs
parents:
diff changeset
   917
hgs
parents:
diff changeset
   918
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   919
	const eapol_key_authentication_type_e authentication_type)
hgs
parents:
diff changeset
   920
{
hgs
parents:
diff changeset
   921
	const u32_t value(static_cast<u32_t>(authentication_type));
hgs
parents:
diff changeset
   922
hgs
parents:
diff changeset
   923
	return add_parameter_data(
hgs
parents:
diff changeset
   924
		eap_tlv_message_type_eapol_key_authentication_type,
hgs
parents:
diff changeset
   925
		value);
hgs
parents:
diff changeset
   926
}
hgs
parents:
diff changeset
   927
hgs
parents:
diff changeset
   928
//--------------------------------------------------
hgs
parents:
diff changeset
   929
hgs
parents:
diff changeset
   930
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   931
	const eapol_key_802_11_authentication_mode_e mode)
hgs
parents:
diff changeset
   932
{
hgs
parents:
diff changeset
   933
	const u32_t value(static_cast<u32_t>(mode));
hgs
parents:
diff changeset
   934
hgs
parents:
diff changeset
   935
	return add_parameter_data(
hgs
parents:
diff changeset
   936
		eap_tlv_message_type_eapol_key_802_11_authentication_mode,
hgs
parents:
diff changeset
   937
		value);
hgs
parents:
diff changeset
   938
}
hgs
parents:
diff changeset
   939
hgs
parents:
diff changeset
   940
//--------------------------------------------------
hgs
parents:
diff changeset
   941
hgs
parents:
diff changeset
   942
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   943
	const eap_tlv_message_type_function_e function)
hgs
parents:
diff changeset
   944
{
hgs
parents:
diff changeset
   945
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   946
hgs
parents:
diff changeset
   947
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   948
		m_am_tools,
hgs
parents:
diff changeset
   949
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   950
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, function=%s\n"),
hgs
parents:
diff changeset
   951
		eap_tlv_message_type_function,
hgs
parents:
diff changeset
   952
		 get_type_string(eap_tlv_message_type_function),
hgs
parents:
diff changeset
   953
		 get_function_string(function)));
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
	if (function < eap_tlv_message_type_function_none
hgs
parents:
diff changeset
   956
		|| function >= eap_tlv_message_type_function_illegal_value)
hgs
parents:
diff changeset
   957
	{
hgs
parents:
diff changeset
   958
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   959
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
   960
	}
hgs
parents:
diff changeset
   961
hgs
parents:
diff changeset
   962
	const u32_t network_order_function(eap_htonl(function));
hgs
parents:
diff changeset
   963
hgs
parents:
diff changeset
   964
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
   965
		eap_tlv_message_type_function,
hgs
parents:
diff changeset
   966
		sizeof(network_order_function),
hgs
parents:
diff changeset
   967
		&network_order_function);
hgs
parents:
diff changeset
   968
hgs
parents:
diff changeset
   969
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   970
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   971
}
hgs
parents:
diff changeset
   972
hgs
parents:
diff changeset
   973
//--------------------------------------------------
hgs
parents:
diff changeset
   974
hgs
parents:
diff changeset
   975
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
   976
	const eap_variable_data_c * const variable_data)
hgs
parents:
diff changeset
   977
{
hgs
parents:
diff changeset
   978
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   979
hgs
parents:
diff changeset
   980
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   981
		m_am_tools,
hgs
parents:
diff changeset
   982
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   983
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
   984
		eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
   985
		 get_type_string(eap_tlv_message_type_variable_data)));
hgs
parents:
diff changeset
   986
hgs
parents:
diff changeset
   987
	if (variable_data == 0)
hgs
parents:
diff changeset
   988
	{
hgs
parents:
diff changeset
   989
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   990
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
   991
	}
hgs
parents:
diff changeset
   992
hgs
parents:
diff changeset
   993
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   994
hgs
parents:
diff changeset
   995
	if (variable_data->get_is_valid_data() == false)
hgs
parents:
diff changeset
   996
	{
hgs
parents:
diff changeset
   997
		// Empty variable data. Add just the header.
hgs
parents:
diff changeset
   998
		status = add_structured_parameter_header(
hgs
parents:
diff changeset
   999
			eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  1000
			0ul);
hgs
parents:
diff changeset
  1001
	}
hgs
parents:
diff changeset
  1002
	else
hgs
parents:
diff changeset
  1003
	{
hgs
parents:
diff changeset
  1004
		status = add_message_data(
hgs
parents:
diff changeset
  1005
			eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  1006
			variable_data->get_data_length(),
hgs
parents:
diff changeset
  1007
			variable_data->get_data());
hgs
parents:
diff changeset
  1008
	}
hgs
parents:
diff changeset
  1009
hgs
parents:
diff changeset
  1010
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1011
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1012
}
hgs
parents:
diff changeset
  1013
hgs
parents:
diff changeset
  1014
//--------------------------------------------------
hgs
parents:
diff changeset
  1015
hgs
parents:
diff changeset
  1016
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1017
	const eap_am_network_id_c * const network_id)
hgs
parents:
diff changeset
  1018
{
hgs
parents:
diff changeset
  1019
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1020
hgs
parents:
diff changeset
  1021
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1022
		m_am_tools,
hgs
parents:
diff changeset
  1023
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1024
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1025
		eap_tlv_message_type_network_id,
hgs
parents:
diff changeset
  1026
		 get_type_string(eap_tlv_message_type_network_id)));
hgs
parents:
diff changeset
  1027
hgs
parents:
diff changeset
  1028
	if (network_id == 0
hgs
parents:
diff changeset
  1029
		|| network_id->get_is_valid() == false)
hgs
parents:
diff changeset
  1030
	{
hgs
parents:
diff changeset
  1031
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1032
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  1033
	}
hgs
parents:
diff changeset
  1034
hgs
parents:
diff changeset
  1035
	const u32_t size_of_network_id = get_payload_size(network_id);
hgs
parents:
diff changeset
  1036
hgs
parents:
diff changeset
  1037
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  1038
		eap_tlv_message_type_network_id,
hgs
parents:
diff changeset
  1039
		size_of_network_id);
hgs
parents:
diff changeset
  1040
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1041
	{
hgs
parents:
diff changeset
  1042
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1043
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1044
	}
hgs
parents:
diff changeset
  1045
hgs
parents:
diff changeset
  1046
	status = add_parameter_data(
hgs
parents:
diff changeset
  1047
		network_id->get_source_id());
hgs
parents:
diff changeset
  1048
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1049
	{
hgs
parents:
diff changeset
  1050
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1051
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1052
	}
hgs
parents:
diff changeset
  1053
hgs
parents:
diff changeset
  1054
	status = add_parameter_data(
hgs
parents:
diff changeset
  1055
		network_id->get_destination_id());
hgs
parents:
diff changeset
  1056
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1057
	{
hgs
parents:
diff changeset
  1058
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1059
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1060
	}
hgs
parents:
diff changeset
  1061
hgs
parents:
diff changeset
  1062
	status = add_parameter_data(
hgs
parents:
diff changeset
  1063
		network_id->get_type());
hgs
parents:
diff changeset
  1064
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1065
	{
hgs
parents:
diff changeset
  1066
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1067
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1068
	}
hgs
parents:
diff changeset
  1069
hgs
parents:
diff changeset
  1070
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1071
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  1072
}
hgs
parents:
diff changeset
  1073
hgs
parents:
diff changeset
  1074
//--------------------------------------------------
hgs
parents:
diff changeset
  1075
hgs
parents:
diff changeset
  1076
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1077
	const eap_buf_chain_wr_c * const packet_buffer)
hgs
parents:
diff changeset
  1078
{
hgs
parents:
diff changeset
  1079
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1080
hgs
parents:
diff changeset
  1081
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1082
		m_am_tools,
hgs
parents:
diff changeset
  1083
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1084
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1085
		eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  1086
		 get_type_string(eap_tlv_message_type_variable_data)));
hgs
parents:
diff changeset
  1087
hgs
parents:
diff changeset
  1088
	if (packet_buffer == 0
hgs
parents:
diff changeset
  1089
		|| packet_buffer->get_is_valid() == false)
hgs
parents:
diff changeset
  1090
	{
hgs
parents:
diff changeset
  1091
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1092
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  1093
	}
hgs
parents:
diff changeset
  1094
hgs
parents:
diff changeset
  1095
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
  1096
		eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  1097
		packet_buffer->get_data_length(),
hgs
parents:
diff changeset
  1098
		packet_buffer->get_data(packet_buffer->get_data_length()));
hgs
parents:
diff changeset
  1099
hgs
parents:
diff changeset
  1100
hgs
parents:
diff changeset
  1101
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1102
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1103
}
hgs
parents:
diff changeset
  1104
hgs
parents:
diff changeset
  1105
//--------------------------------------------------
hgs
parents:
diff changeset
  1106
hgs
parents:
diff changeset
  1107
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1108
	const eapol_session_key_c * const session_key)
hgs
parents:
diff changeset
  1109
{
hgs
parents:
diff changeset
  1110
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1111
hgs
parents:
diff changeset
  1112
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1113
		m_am_tools,
hgs
parents:
diff changeset
  1114
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1115
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1116
		eap_tlv_message_type_session_key,
hgs
parents:
diff changeset
  1117
		 get_type_string(eap_tlv_message_type_session_key)));
hgs
parents:
diff changeset
  1118
hgs
parents:
diff changeset
  1119
	if (session_key == 0
hgs
parents:
diff changeset
  1120
		|| session_key->get_is_valid() == false)
hgs
parents:
diff changeset
  1121
	{
hgs
parents:
diff changeset
  1122
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1123
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  1124
	}
hgs
parents:
diff changeset
  1125
hgs
parents:
diff changeset
  1126
	const u32_t size_of_session_key(get_payload_size(session_key));
hgs
parents:
diff changeset
  1127
hgs
parents:
diff changeset
  1128
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  1129
		eap_tlv_message_type_session_key,
hgs
parents:
diff changeset
  1130
		size_of_session_key);
hgs
parents:
diff changeset
  1131
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1132
	{
hgs
parents:
diff changeset
  1133
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1134
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1135
	}
hgs
parents:
diff changeset
  1136
hgs
parents:
diff changeset
  1137
	status = add_parameter_data(
hgs
parents:
diff changeset
  1138
		session_key->get_key());
hgs
parents:
diff changeset
  1139
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1140
	{
hgs
parents:
diff changeset
  1141
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1142
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1143
	}
hgs
parents:
diff changeset
  1144
hgs
parents:
diff changeset
  1145
	status = add_parameter_data(
hgs
parents:
diff changeset
  1146
		session_key->get_sequence_number());
hgs
parents:
diff changeset
  1147
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1148
	{
hgs
parents:
diff changeset
  1149
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1150
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1151
	}
hgs
parents:
diff changeset
  1152
hgs
parents:
diff changeset
  1153
	status = add_parameter_data(
hgs
parents:
diff changeset
  1154
		eap_tlv_message_type_eapol_key_type,
hgs
parents:
diff changeset
  1155
		static_cast<u32_t>(session_key->get_key_type()));
hgs
parents:
diff changeset
  1156
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1157
	{
hgs
parents:
diff changeset
  1158
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1159
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1160
	}
hgs
parents:
diff changeset
  1161
hgs
parents:
diff changeset
  1162
	status = add_parameter_data(session_key->get_key_index());
hgs
parents:
diff changeset
  1163
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1164
	{
hgs
parents:
diff changeset
  1165
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1166
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1167
	}
hgs
parents:
diff changeset
  1168
hgs
parents:
diff changeset
  1169
	status = add_parameter_data(session_key->get_key_tx_bit());
hgs
parents:
diff changeset
  1170
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1171
	{
hgs
parents:
diff changeset
  1172
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1173
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1174
	}
hgs
parents:
diff changeset
  1175
hgs
parents:
diff changeset
  1176
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1177
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  1178
}
hgs
parents:
diff changeset
  1179
hgs
parents:
diff changeset
  1180
//--------------------------------------------------
hgs
parents:
diff changeset
  1181
hgs
parents:
diff changeset
  1182
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1183
	const abs_eap_state_notification_c * const state)
hgs
parents:
diff changeset
  1184
{
hgs
parents:
diff changeset
  1185
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1186
hgs
parents:
diff changeset
  1187
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1188
		m_am_tools,
hgs
parents:
diff changeset
  1189
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1190
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1191
		eap_tlv_message_type_eap_state_notification,
hgs
parents:
diff changeset
  1192
		 get_type_string(eap_tlv_message_type_eap_state_notification)));
hgs
parents:
diff changeset
  1193
hgs
parents:
diff changeset
  1194
	if (state == 0)
hgs
parents:
diff changeset
  1195
	{
hgs
parents:
diff changeset
  1196
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1197
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  1198
	}
hgs
parents:
diff changeset
  1199
hgs
parents:
diff changeset
  1200
	const u32_t size_of_state(get_payload_size(state));
hgs
parents:
diff changeset
  1201
hgs
parents:
diff changeset
  1202
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  1203
		eap_tlv_message_type_eap_state_notification,
hgs
parents:
diff changeset
  1204
		size_of_state);
hgs
parents:
diff changeset
  1205
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1206
	{
hgs
parents:
diff changeset
  1207
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1208
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1209
	}
hgs
parents:
diff changeset
  1210
hgs
parents:
diff changeset
  1211
	status = add_parameter_data(state->get_send_network_id());
hgs
parents:
diff changeset
  1212
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1213
	{
hgs
parents:
diff changeset
  1214
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1215
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1216
	}
hgs
parents:
diff changeset
  1217
hgs
parents:
diff changeset
  1218
	status = add_parameter_data(
hgs
parents:
diff changeset
  1219
		eap_tlv_message_type_eap_protocol_layer,
hgs
parents:
diff changeset
  1220
		static_cast<u32_t>(state->get_protocol_layer()));
hgs
parents:
diff changeset
  1221
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1222
	{
hgs
parents:
diff changeset
  1223
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1224
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1225
	}
hgs
parents:
diff changeset
  1226
hgs
parents:
diff changeset
  1227
	status = add_parameter_data(state->get_protocol());
hgs
parents:
diff changeset
  1228
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1229
	{
hgs
parents:
diff changeset
  1230
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1231
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1232
	}
hgs
parents:
diff changeset
  1233
hgs
parents:
diff changeset
  1234
	status = add_parameter_data(state->get_eap_type());
hgs
parents:
diff changeset
  1235
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1236
	{
hgs
parents:
diff changeset
  1237
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1238
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1239
	}
hgs
parents:
diff changeset
  1240
hgs
parents:
diff changeset
  1241
	status = add_parameter_data(state->get_current_state());
hgs
parents:
diff changeset
  1242
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1243
	{
hgs
parents:
diff changeset
  1244
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1245
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1246
	}
hgs
parents:
diff changeset
  1247
hgs
parents:
diff changeset
  1248
	status = add_parameter_data(state->get_is_client());
hgs
parents:
diff changeset
  1249
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1250
	{
hgs
parents:
diff changeset
  1251
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1252
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1253
	}
hgs
parents:
diff changeset
  1254
hgs
parents:
diff changeset
  1255
	status = add_parameter_data(state->get_authentication_error());
hgs
parents:
diff changeset
  1256
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1257
	{
hgs
parents:
diff changeset
  1258
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1259
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1260
	}
hgs
parents:
diff changeset
  1261
hgs
parents:
diff changeset
  1262
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1263
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  1264
}
hgs
parents:
diff changeset
  1265
hgs
parents:
diff changeset
  1266
//--------------------------------------------------
hgs
parents:
diff changeset
  1267
hgs
parents:
diff changeset
  1268
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1269
	const eap_type_value_e eap_type)
hgs
parents:
diff changeset
  1270
{
hgs
parents:
diff changeset
  1271
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1272
hgs
parents:
diff changeset
  1273
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1274
		m_am_tools,
hgs
parents:
diff changeset
  1275
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1276
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1277
		eap_tlv_message_type_eap_type,
hgs
parents:
diff changeset
  1278
		 get_type_string(eap_tlv_message_type_eap_type)));
hgs
parents:
diff changeset
  1279
hgs
parents:
diff changeset
  1280
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  1281
		m_am_tools,
hgs
parents:
diff changeset
  1282
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1283
		(EAPL("add_parameter_data(eap_type_value_e)"),
hgs
parents:
diff changeset
  1284
		 &eap_type,
hgs
parents:
diff changeset
  1285
		 sizeof(eap_type)));
hgs
parents:
diff changeset
  1286
hgs
parents:
diff changeset
  1287
	void * type_buffer = 0;
hgs
parents:
diff changeset
  1288
hgs
parents:
diff changeset
  1289
	eap_status_e status = allocate_message_buffer(
hgs
parents:
diff changeset
  1290
		eap_tlv_message_type_eap_type,
hgs
parents:
diff changeset
  1291
		eap_expanded_type_c::get_eap_expanded_type_size(),
hgs
parents:
diff changeset
  1292
		&type_buffer);
hgs
parents:
diff changeset
  1293
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1294
	{
hgs
parents:
diff changeset
  1295
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1296
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1297
	}
hgs
parents:
diff changeset
  1298
hgs
parents:
diff changeset
  1299
	status = eap_expanded_type_c::write_type(
hgs
parents:
diff changeset
  1300
		m_am_tools,
hgs
parents:
diff changeset
  1301
		0ul, ///< Index is from 0 to n. Index 0 is the first EAP type field after base EAP header.
hgs
parents:
diff changeset
  1302
		type_buffer,
hgs
parents:
diff changeset
  1303
		eap_expanded_type_c::get_eap_expanded_type_size(),
hgs
parents:
diff changeset
  1304
		true, ///< True value writes always Extented Type.
hgs
parents:
diff changeset
  1305
		eap_type ///< The EAP type to be written.
hgs
parents:
diff changeset
  1306
		);
hgs
parents:
diff changeset
  1307
hgs
parents:
diff changeset
  1308
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1309
		m_am_tools,
hgs
parents:
diff changeset
  1310
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1311
		(EAPL("eap_tlv_message_data_c::add_message_data():   type %2d=0x%08x, length %3d=0x%08x\n"),
hgs
parents:
diff changeset
  1312
		 eap_tlv_message_type_eap_type,
hgs
parents:
diff changeset
  1313
		 eap_tlv_message_type_eap_type,
hgs
parents:
diff changeset
  1314
		 eap_expanded_type_c::get_eap_expanded_type_size(),
hgs
parents:
diff changeset
  1315
		 eap_expanded_type_c::get_eap_expanded_type_size()));
hgs
parents:
diff changeset
  1316
hgs
parents:
diff changeset
  1317
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  1318
		m_am_tools,
hgs
parents:
diff changeset
  1319
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1320
		(EAPL("add_message_data()"),
hgs
parents:
diff changeset
  1321
		type_buffer,
hgs
parents:
diff changeset
  1322
		eap_expanded_type_c::get_eap_expanded_type_size()));
hgs
parents:
diff changeset
  1323
hgs
parents:
diff changeset
  1324
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1325
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  1326
}
hgs
parents:
diff changeset
  1327
hgs
parents:
diff changeset
  1328
//--------------------------------------------------
hgs
parents:
diff changeset
  1329
hgs
parents:
diff changeset
  1330
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
49
hgs
parents: 34
diff changeset
  1331
	const eap_general_header_base_c * const packet_data,
hgs
parents: 34
diff changeset
  1332
	const u32_t packet_length)
26
hgs
parents:
diff changeset
  1333
{
hgs
parents:
diff changeset
  1334
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1335
hgs
parents:
diff changeset
  1336
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1337
		m_am_tools,
hgs
parents:
diff changeset
  1338
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1339
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1340
		eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  1341
		 get_type_string(eap_tlv_message_type_variable_data)));
hgs
parents:
diff changeset
  1342
hgs
parents:
diff changeset
  1343
	if (packet_data == 0
hgs
parents:
diff changeset
  1344
		|| packet_data->get_is_valid() == false)
hgs
parents:
diff changeset
  1345
	{
hgs
parents:
diff changeset
  1346
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1347
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  1348
	}
hgs
parents:
diff changeset
  1349
49
hgs
parents: 34
diff changeset
  1350
	if (packet_length > packet_data->get_header_buffer_length())
hgs
parents: 34
diff changeset
  1351
	{
hgs
parents: 34
diff changeset
  1352
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents: 34
diff changeset
  1353
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents: 34
diff changeset
  1354
	}
hgs
parents: 34
diff changeset
  1355
26
hgs
parents:
diff changeset
  1356
	eap_status_e status = add_message_data(
hgs
parents:
diff changeset
  1357
		eap_tlv_message_type_variable_data,
49
hgs
parents: 34
diff changeset
  1358
		packet_length,
hgs
parents: 34
diff changeset
  1359
		packet_data->get_header_buffer(packet_length));
26
hgs
parents:
diff changeset
  1360
hgs
parents:
diff changeset
  1361
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1362
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1363
}
hgs
parents:
diff changeset
  1364
hgs
parents:
diff changeset
  1365
//--------------------------------------------------
hgs
parents:
diff changeset
  1366
hgs
parents:
diff changeset
  1367
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1368
	const eap_certificate_entry_c * const certificate_entry)
hgs
parents:
diff changeset
  1369
{
hgs
parents:
diff changeset
  1370
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1371
hgs
parents:
diff changeset
  1372
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1373
		m_am_tools,
hgs
parents:
diff changeset
  1374
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1375
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1376
		eap_tlv_message_type_eap_certificate_entry,
hgs
parents:
diff changeset
  1377
		 get_type_string(eap_tlv_message_type_eap_certificate_entry)));
hgs
parents:
diff changeset
  1378
hgs
parents:
diff changeset
  1379
	eap_status_e status(eap_status_not_supported);
hgs
parents:
diff changeset
  1380
hgs
parents:
diff changeset
  1381
hgs
parents:
diff changeset
  1382
	const u32_t size_of_certificate(get_payload_size(certificate_entry));
hgs
parents:
diff changeset
  1383
hgs
parents:
diff changeset
  1384
	status = add_structured_parameter_header(
hgs
parents:
diff changeset
  1385
		eap_tlv_message_type_eap_certificate_entry,
hgs
parents:
diff changeset
  1386
		size_of_certificate);
hgs
parents:
diff changeset
  1387
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1388
	{
hgs
parents:
diff changeset
  1389
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1390
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1391
	}
hgs
parents:
diff changeset
  1392
hgs
parents:
diff changeset
  1393
hgs
parents:
diff changeset
  1394
	{
hgs
parents:
diff changeset
  1395
		// Specifies whether this entry describes user or CA certificate (mandatory)
hgs
parents:
diff changeset
  1396
		status = add_parameter_data(static_cast<u32_t>(certificate_entry->m_CertType));
hgs
parents:
diff changeset
  1397
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1398
		{
hgs
parents:
diff changeset
  1399
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1400
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1401
		}
hgs
parents:
diff changeset
  1402
	}
hgs
parents:
diff changeset
  1403
hgs
parents:
diff changeset
  1404
	{
hgs
parents:
diff changeset
  1405
		// Subject name in distinguished name ASCII form. This is optional.
hgs
parents:
diff changeset
  1406
		// For example "/C=US/O=Some organization/CN=Some common name".
hgs
parents:
diff changeset
  1407
		status = add_parameter_data(certificate_entry->m_SubjectNamePresent);
hgs
parents:
diff changeset
  1408
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1409
		{
hgs
parents:
diff changeset
  1410
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1411
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1412
		}
hgs
parents:
diff changeset
  1413
hgs
parents:
diff changeset
  1414
		if (certificate_entry->m_SubjectNamePresent == true)
hgs
parents:
diff changeset
  1415
		{
hgs
parents:
diff changeset
  1416
			status = add_parameter_data(&(certificate_entry->m_SubjectName));
hgs
parents:
diff changeset
  1417
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1418
			{
hgs
parents:
diff changeset
  1419
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1420
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1421
			}
hgs
parents:
diff changeset
  1422
		}
hgs
parents:
diff changeset
  1423
	}
hgs
parents:
diff changeset
  1424
hgs
parents:
diff changeset
  1425
	{
hgs
parents:
diff changeset
  1426
		// Issuer name in distinguished name ASCII form. This is optional.
hgs
parents:
diff changeset
  1427
		// For example "/C=US/O=Some organization/CN=Some common name".
hgs
parents:
diff changeset
  1428
		status = add_parameter_data(certificate_entry->m_IssuerNamePresent);
hgs
parents:
diff changeset
  1429
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1430
		{
hgs
parents:
diff changeset
  1431
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1432
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1433
		}
hgs
parents:
diff changeset
  1434
hgs
parents:
diff changeset
  1435
		if (certificate_entry->m_IssuerNamePresent == true)
hgs
parents:
diff changeset
  1436
		{
hgs
parents:
diff changeset
  1437
			status = add_parameter_data(&(certificate_entry->m_IssuerName));
hgs
parents:
diff changeset
  1438
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1439
			{
hgs
parents:
diff changeset
  1440
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1441
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1442
			}
hgs
parents:
diff changeset
  1443
		}
hgs
parents:
diff changeset
  1444
	}
hgs
parents:
diff changeset
  1445
hgs
parents:
diff changeset
  1446
	{
hgs
parents:
diff changeset
  1447
		// Serial number in ASCII form. This is optional.
hgs
parents:
diff changeset
  1448
		status = add_parameter_data(certificate_entry->m_SerialNumberPresent);
hgs
parents:
diff changeset
  1449
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1450
		{
hgs
parents:
diff changeset
  1451
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1452
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1453
		}
hgs
parents:
diff changeset
  1454
hgs
parents:
diff changeset
  1455
		if (certificate_entry->m_SerialNumberPresent == true)
hgs
parents:
diff changeset
  1456
		{
hgs
parents:
diff changeset
  1457
			status = add_parameter_data(&(certificate_entry->m_SerialNumber));
hgs
parents:
diff changeset
  1458
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1459
			{
hgs
parents:
diff changeset
  1460
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1461
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1462
			}
hgs
parents:
diff changeset
  1463
		}
hgs
parents:
diff changeset
  1464
	}
hgs
parents:
diff changeset
  1465
hgs
parents:
diff changeset
  1466
	{
hgs
parents:
diff changeset
  1467
		// Subject key in binary form. This is mandatory.
hgs
parents:
diff changeset
  1468
		status = add_parameter_data(certificate_entry->m_SubjectKeyIDPresent);
hgs
parents:
diff changeset
  1469
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1470
		{
hgs
parents:
diff changeset
  1471
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1472
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1473
		}
hgs
parents:
diff changeset
  1474
hgs
parents:
diff changeset
  1475
		if (certificate_entry->m_SubjectKeyIDPresent == true)
hgs
parents:
diff changeset
  1476
		{
hgs
parents:
diff changeset
  1477
			status = add_parameter_data(&(certificate_entry->m_SubjectKeyID));
hgs
parents:
diff changeset
  1478
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1479
			{
hgs
parents:
diff changeset
  1480
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1481
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1482
			}
hgs
parents:
diff changeset
  1483
		}
hgs
parents:
diff changeset
  1484
	}
hgs
parents:
diff changeset
  1485
hgs
parents:
diff changeset
  1486
	{
hgs
parents:
diff changeset
  1487
		// Thumbprint in binary form. This is optional.
hgs
parents:
diff changeset
  1488
		status = add_parameter_data(certificate_entry->m_ThumbprintPresent);
hgs
parents:
diff changeset
  1489
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1490
		{
hgs
parents:
diff changeset
  1491
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1492
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1493
		}
hgs
parents:
diff changeset
  1494
hgs
parents:
diff changeset
  1495
		if (certificate_entry->m_ThumbprintPresent == true)
hgs
parents:
diff changeset
  1496
		{
hgs
parents:
diff changeset
  1497
			status = add_parameter_data(&(certificate_entry->m_Thumbprint));
hgs
parents:
diff changeset
  1498
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1499
			{
hgs
parents:
diff changeset
  1500
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1501
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1502
			}
hgs
parents:
diff changeset
  1503
		}
hgs
parents:
diff changeset
  1504
	}
hgs
parents:
diff changeset
  1505
hgs
parents:
diff changeset
  1506
hgs
parents:
diff changeset
  1507
	{
hgs
parents:
diff changeset
  1508
		// This holds only the certificate label. This is the text UI will show.
hgs
parents:
diff changeset
  1509
		status = add_parameter_data(certificate_entry->m_LabelPresent);
hgs
parents:
diff changeset
  1510
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1511
		{
hgs
parents:
diff changeset
  1512
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1513
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1514
		}
hgs
parents:
diff changeset
  1515
hgs
parents:
diff changeset
  1516
		if (certificate_entry->m_LabelPresent == true)
hgs
parents:
diff changeset
  1517
		{
hgs
parents:
diff changeset
  1518
			status = add_parameter_data(&(certificate_entry->m_Label));
hgs
parents:
diff changeset
  1519
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1520
			{
hgs
parents:
diff changeset
  1521
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1522
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1523
			}
hgs
parents:
diff changeset
  1524
		}
hgs
parents:
diff changeset
  1525
	}
hgs
parents:
diff changeset
  1526
hgs
parents:
diff changeset
  1527
	{
hgs
parents:
diff changeset
  1528
		// Primary name of the certificate if any, UI uses this.
hgs
parents:
diff changeset
  1529
		status = add_parameter_data(certificate_entry->m_PrimaryNamePresent);
hgs
parents:
diff changeset
  1530
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1531
		{
hgs
parents:
diff changeset
  1532
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1533
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1534
		}
hgs
parents:
diff changeset
  1535
hgs
parents:
diff changeset
  1536
		if (certificate_entry->m_PrimaryNamePresent == true)
hgs
parents:
diff changeset
  1537
		{
hgs
parents:
diff changeset
  1538
			status = add_parameter_data(&(certificate_entry->m_PrimaryName));
hgs
parents:
diff changeset
  1539
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1540
			{
hgs
parents:
diff changeset
  1541
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1542
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1543
			}
hgs
parents:
diff changeset
  1544
		}
hgs
parents:
diff changeset
  1545
	}
hgs
parents:
diff changeset
  1546
hgs
parents:
diff changeset
  1547
	{
hgs
parents:
diff changeset
  1548
		// Secondary name of the certificate if any, UI uses this.
hgs
parents:
diff changeset
  1549
		status = add_parameter_data(certificate_entry->m_SecondaryNamePresent);
hgs
parents:
diff changeset
  1550
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1551
		{
hgs
parents:
diff changeset
  1552
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1553
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1554
		}
hgs
parents:
diff changeset
  1555
hgs
parents:
diff changeset
  1556
		if (certificate_entry->m_SecondaryNamePresent == true)
hgs
parents:
diff changeset
  1557
		{
hgs
parents:
diff changeset
  1558
			status = add_parameter_data(&(certificate_entry->m_SecondaryName));
hgs
parents:
diff changeset
  1559
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1560
			{
hgs
parents:
diff changeset
  1561
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1562
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1563
			}
hgs
parents:
diff changeset
  1564
		}
hgs
parents:
diff changeset
  1565
	}
hgs
parents:
diff changeset
  1566
hgs
parents:
diff changeset
  1567
	{
hgs
parents:
diff changeset
  1568
		// UI uses this to indicate enabled certificate.
hgs
parents:
diff changeset
  1569
		status = add_parameter_data(certificate_entry->m_iIsEnabledPresent);
hgs
parents:
diff changeset
  1570
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1571
		{
hgs
parents:
diff changeset
  1572
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1573
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1574
		}
hgs
parents:
diff changeset
  1575
hgs
parents:
diff changeset
  1576
		if (certificate_entry->m_iIsEnabledPresent == true)
hgs
parents:
diff changeset
  1577
		{
hgs
parents:
diff changeset
  1578
			status = add_parameter_data((certificate_entry->m_iIsEnabled));
hgs
parents:
diff changeset
  1579
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1580
			{
hgs
parents:
diff changeset
  1581
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1582
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1583
			}
hgs
parents:
diff changeset
  1584
		}
hgs
parents:
diff changeset
  1585
	}
hgs
parents:
diff changeset
  1586
hgs
parents:
diff changeset
  1587
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1588
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1589
}
hgs
parents:
diff changeset
  1590
hgs
parents:
diff changeset
  1591
//--------------------------------------------------
hgs
parents:
diff changeset
  1592
hgs
parents:
diff changeset
  1593
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  1594
	const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
  1595
{
hgs
parents:
diff changeset
  1596
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1597
hgs
parents:
diff changeset
  1598
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1599
		m_am_tools,
hgs
parents:
diff changeset
  1600
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1601
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  1602
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1603
		 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1604
hgs
parents:
diff changeset
  1605
	eap_status_e status(eap_status_not_supported);
hgs
parents:
diff changeset
  1606
hgs
parents:
diff changeset
  1607
	const u32_t size_of_settings(get_payload_size(internal_settings));
hgs
parents:
diff changeset
  1608
hgs
parents:
diff changeset
  1609
	status = add_structured_parameter_header(
hgs
parents:
diff changeset
  1610
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1611
		size_of_settings);
hgs
parents:
diff changeset
  1612
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1613
	{
hgs
parents:
diff changeset
  1614
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1615
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1616
	}
hgs
parents:
diff changeset
  1617
hgs
parents:
diff changeset
  1618
hgs
parents:
diff changeset
  1619
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1620
		m_am_tools,
hgs
parents:
diff changeset
  1621
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1622
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_completion_status\n"),
hgs
parents:
diff changeset
  1623
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1624
		 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1625
hgs
parents:
diff changeset
  1626
	status = add_parameter_data((internal_settings->m_completion_status));
hgs
parents:
diff changeset
  1627
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1628
	{
hgs
parents:
diff changeset
  1629
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1630
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1631
	}
hgs
parents:
diff changeset
  1632
hgs
parents:
diff changeset
  1633
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1634
		m_am_tools,
hgs
parents:
diff changeset
  1635
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1636
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_EAPType\n"),
hgs
parents:
diff changeset
  1637
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1638
		 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1639
hgs
parents:
diff changeset
  1640
	// Specifies the EAP-method these settings are for.
hgs
parents:
diff changeset
  1641
	status = add_parameter_data(internal_settings->m_EAPType);
hgs
parents:
diff changeset
  1642
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1643
	{
hgs
parents:
diff changeset
  1644
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1645
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1646
	}
hgs
parents:
diff changeset
  1647
hgs
parents:
diff changeset
  1648
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1649
		m_am_tools,
hgs
parents:
diff changeset
  1650
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1651
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_IndexType\n"),
hgs
parents:
diff changeset
  1652
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1653
		 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1654
hgs
parents:
diff changeset
  1655
	status = add_parameter_data((internal_settings->m_IndexType));
hgs
parents:
diff changeset
  1656
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1657
	{
hgs
parents:
diff changeset
  1658
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1659
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1660
	}
hgs
parents:
diff changeset
  1661
hgs
parents:
diff changeset
  1662
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1663
		m_am_tools,
hgs
parents:
diff changeset
  1664
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1665
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_Index\n"),
hgs
parents:
diff changeset
  1666
		eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1667
		 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1668
hgs
parents:
diff changeset
  1669
	status = add_parameter_data((internal_settings->m_Index));
hgs
parents:
diff changeset
  1670
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1671
	{
hgs
parents:
diff changeset
  1672
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1673
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1674
	}
hgs
parents:
diff changeset
  1675
hgs
parents:
diff changeset
  1676
	{
hgs
parents:
diff changeset
  1677
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1678
			m_am_tools,
hgs
parents:
diff changeset
  1679
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1680
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticCACertificatePresent\n"),
hgs
parents:
diff changeset
  1681
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1682
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1683
hgs
parents:
diff changeset
  1684
		// Use automatic CA certificate.
hgs
parents:
diff changeset
  1685
		status = add_parameter_data(internal_settings->m_UseAutomaticCACertificatePresent);
hgs
parents:
diff changeset
  1686
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1687
		{
hgs
parents:
diff changeset
  1688
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1689
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1690
		}
hgs
parents:
diff changeset
  1691
hgs
parents:
diff changeset
  1692
		if (internal_settings->m_UseAutomaticCACertificatePresent == true)
hgs
parents:
diff changeset
  1693
		{
hgs
parents:
diff changeset
  1694
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1695
				m_am_tools,
hgs
parents:
diff changeset
  1696
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1697
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticCACertificate\n"),
hgs
parents:
diff changeset
  1698
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1699
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1700
hgs
parents:
diff changeset
  1701
			status = add_parameter_data((internal_settings->m_UseAutomaticCACertificate));
hgs
parents:
diff changeset
  1702
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1703
			{
hgs
parents:
diff changeset
  1704
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1705
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1706
			}
hgs
parents:
diff changeset
  1707
		}
hgs
parents:
diff changeset
  1708
	}
hgs
parents:
diff changeset
  1709
hgs
parents:
diff changeset
  1710
	{
hgs
parents:
diff changeset
  1711
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1712
			m_am_tools,
hgs
parents:
diff changeset
  1713
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1714
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticUsernamePresent\n"),
hgs
parents:
diff changeset
  1715
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1716
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1717
hgs
parents:
diff changeset
  1718
		// Use automatic username.
hgs
parents:
diff changeset
  1719
		status = add_parameter_data(internal_settings->m_UseAutomaticUsernamePresent);
hgs
parents:
diff changeset
  1720
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1721
		{
hgs
parents:
diff changeset
  1722
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1723
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1724
		}
hgs
parents:
diff changeset
  1725
hgs
parents:
diff changeset
  1726
		if (internal_settings->m_UseAutomaticUsernamePresent == true)
hgs
parents:
diff changeset
  1727
		{
hgs
parents:
diff changeset
  1728
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1729
				m_am_tools,
hgs
parents:
diff changeset
  1730
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1731
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticUsername\n"),
hgs
parents:
diff changeset
  1732
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1733
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1734
hgs
parents:
diff changeset
  1735
			status = add_parameter_data((internal_settings->m_UseAutomaticUsername));
hgs
parents:
diff changeset
  1736
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1737
			{
hgs
parents:
diff changeset
  1738
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1739
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1740
			}
hgs
parents:
diff changeset
  1741
		}
hgs
parents:
diff changeset
  1742
	}
hgs
parents:
diff changeset
  1743
hgs
parents:
diff changeset
  1744
	{
hgs
parents:
diff changeset
  1745
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1746
			m_am_tools,
hgs
parents:
diff changeset
  1747
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1748
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticRealmPresent\n"),
hgs
parents:
diff changeset
  1749
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1750
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1751
hgs
parents:
diff changeset
  1752
		// Use automatic username.
hgs
parents:
diff changeset
  1753
		status = add_parameter_data(internal_settings->m_UseAutomaticRealmPresent);
hgs
parents:
diff changeset
  1754
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1755
		{
hgs
parents:
diff changeset
  1756
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1757
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1758
		}
hgs
parents:
diff changeset
  1759
hgs
parents:
diff changeset
  1760
		if (internal_settings->m_UseAutomaticRealmPresent == true)
hgs
parents:
diff changeset
  1761
		{
hgs
parents:
diff changeset
  1762
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1763
				m_am_tools,
hgs
parents:
diff changeset
  1764
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1765
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseAutomaticRealm\n"),
hgs
parents:
diff changeset
  1766
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1767
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1768
hgs
parents:
diff changeset
  1769
			status = add_parameter_data((internal_settings->m_UseAutomaticRealm));
hgs
parents:
diff changeset
  1770
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1771
			{
hgs
parents:
diff changeset
  1772
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1773
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1774
			}
hgs
parents:
diff changeset
  1775
		}
hgs
parents:
diff changeset
  1776
	}
hgs
parents:
diff changeset
  1777
hgs
parents:
diff changeset
  1778
	{
hgs
parents:
diff changeset
  1779
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1780
			m_am_tools,
hgs
parents:
diff changeset
  1781
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1782
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UsernamePresent\n"),
hgs
parents:
diff changeset
  1783
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1784
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1785
hgs
parents:
diff changeset
  1786
		// Username in ASCII format
hgs
parents:
diff changeset
  1787
		status = add_parameter_data(internal_settings->m_UsernamePresent);
hgs
parents:
diff changeset
  1788
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1789
		{
hgs
parents:
diff changeset
  1790
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1791
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1792
		}
hgs
parents:
diff changeset
  1793
hgs
parents:
diff changeset
  1794
		if (internal_settings->m_UsernamePresent == true)
hgs
parents:
diff changeset
  1795
		{
hgs
parents:
diff changeset
  1796
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1797
				m_am_tools,
hgs
parents:
diff changeset
  1798
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1799
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_Username_fix\n"),
hgs
parents:
diff changeset
  1800
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1801
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1802
hgs
parents:
diff changeset
  1803
			status = add_parameter_data(&(internal_settings->m_Username_fix));
hgs
parents:
diff changeset
  1804
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1805
			{
hgs
parents:
diff changeset
  1806
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1807
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1808
			}
hgs
parents:
diff changeset
  1809
		}
hgs
parents:
diff changeset
  1810
	}
hgs
parents:
diff changeset
  1811
hgs
parents:
diff changeset
  1812
	{
hgs
parents:
diff changeset
  1813
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1814
			m_am_tools,
hgs
parents:
diff changeset
  1815
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1816
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PasswordExistPresent\n"),
hgs
parents:
diff changeset
  1817
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1818
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1819
hgs
parents:
diff changeset
  1820
		// Password existence
hgs
parents:
diff changeset
  1821
		status = add_parameter_data(internal_settings->m_PasswordExistPresent);
hgs
parents:
diff changeset
  1822
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1823
		{
hgs
parents:
diff changeset
  1824
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1825
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1826
		}
hgs
parents:
diff changeset
  1827
hgs
parents:
diff changeset
  1828
		if (internal_settings->m_PasswordExistPresent == true)
hgs
parents:
diff changeset
  1829
		{
hgs
parents:
diff changeset
  1830
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1831
				m_am_tools,
hgs
parents:
diff changeset
  1832
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1833
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PasswordExist\n"),
hgs
parents:
diff changeset
  1834
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1835
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1836
hgs
parents:
diff changeset
  1837
			status = add_parameter_data(internal_settings->m_PasswordExist);
hgs
parents:
diff changeset
  1838
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1839
			{
hgs
parents:
diff changeset
  1840
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1841
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1842
			}
hgs
parents:
diff changeset
  1843
		}
hgs
parents:
diff changeset
  1844
	}
hgs
parents:
diff changeset
  1845
hgs
parents:
diff changeset
  1846
	{
hgs
parents:
diff changeset
  1847
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1848
			m_am_tools,
hgs
parents:
diff changeset
  1849
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1850
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PasswordPresent\n"),
hgs
parents:
diff changeset
  1851
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1852
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1853
hgs
parents:
diff changeset
  1854
		// Password in ASCII format
hgs
parents:
diff changeset
  1855
		status = add_parameter_data(internal_settings->m_PasswordPresent);
hgs
parents:
diff changeset
  1856
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1857
		{
hgs
parents:
diff changeset
  1858
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1859
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1860
		}
hgs
parents:
diff changeset
  1861
hgs
parents:
diff changeset
  1862
		if (internal_settings->m_PasswordPresent == true)
hgs
parents:
diff changeset
  1863
		{
hgs
parents:
diff changeset
  1864
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1865
				m_am_tools,
hgs
parents:
diff changeset
  1866
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1867
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_Password\n"),
hgs
parents:
diff changeset
  1868
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1869
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1870
hgs
parents:
diff changeset
  1871
			status = add_parameter_data(&(internal_settings->m_Password));
hgs
parents:
diff changeset
  1872
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1873
			{
hgs
parents:
diff changeset
  1874
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1875
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1876
			}
hgs
parents:
diff changeset
  1877
		}
hgs
parents:
diff changeset
  1878
	}
hgs
parents:
diff changeset
  1879
hgs
parents:
diff changeset
  1880
	{
hgs
parents:
diff changeset
  1881
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1882
			m_am_tools,
hgs
parents:
diff changeset
  1883
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1884
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_RealmPresent\n"),
hgs
parents:
diff changeset
  1885
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1886
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1887
hgs
parents:
diff changeset
  1888
		// Realm in ASCII format
hgs
parents:
diff changeset
  1889
		status = add_parameter_data(internal_settings->m_RealmPresent);
hgs
parents:
diff changeset
  1890
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1891
		{
hgs
parents:
diff changeset
  1892
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1893
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1894
		}
hgs
parents:
diff changeset
  1895
hgs
parents:
diff changeset
  1896
		if (internal_settings->m_RealmPresent == true)
hgs
parents:
diff changeset
  1897
		{
hgs
parents:
diff changeset
  1898
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1899
				m_am_tools,
hgs
parents:
diff changeset
  1900
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1901
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_Realm\n"),
hgs
parents:
diff changeset
  1902
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1903
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1904
hgs
parents:
diff changeset
  1905
			status = add_parameter_data(&(internal_settings->m_Realm));
hgs
parents:
diff changeset
  1906
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1907
			{
hgs
parents:
diff changeset
  1908
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1909
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1910
			}
hgs
parents:
diff changeset
  1911
		}
hgs
parents:
diff changeset
  1912
	}
hgs
parents:
diff changeset
  1913
hgs
parents:
diff changeset
  1914
	{
hgs
parents:
diff changeset
  1915
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1916
			m_am_tools,
hgs
parents:
diff changeset
  1917
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1918
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UsePseudonymsPresent\n"),
hgs
parents:
diff changeset
  1919
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1920
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1921
hgs
parents:
diff changeset
  1922
		// Use pseudonym identities in EAP-SIM/AKA
hgs
parents:
diff changeset
  1923
		status = add_parameter_data(internal_settings->m_UsePseudonymsPresent);
hgs
parents:
diff changeset
  1924
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1925
		{
hgs
parents:
diff changeset
  1926
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1927
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1928
		}
hgs
parents:
diff changeset
  1929
hgs
parents:
diff changeset
  1930
		if (internal_settings->m_UsePseudonymsPresent == true)
hgs
parents:
diff changeset
  1931
		{
hgs
parents:
diff changeset
  1932
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1933
				m_am_tools,
hgs
parents:
diff changeset
  1934
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1935
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UsePseudonyms\n"),
hgs
parents:
diff changeset
  1936
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1937
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1938
hgs
parents:
diff changeset
  1939
			status = add_parameter_data((internal_settings->m_UsePseudonyms));
hgs
parents:
diff changeset
  1940
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1941
			{
hgs
parents:
diff changeset
  1942
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1943
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1944
			}
hgs
parents:
diff changeset
  1945
		}
hgs
parents:
diff changeset
  1946
	}
hgs
parents:
diff changeset
  1947
hgs
parents:
diff changeset
  1948
	{
hgs
parents:
diff changeset
  1949
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1950
			m_am_tools,
hgs
parents:
diff changeset
  1951
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1952
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_VerifyServerRealmPresent\n"),
hgs
parents:
diff changeset
  1953
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1954
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1955
hgs
parents:
diff changeset
  1956
		// Whether EAP-TLS/TTLS/PEAP should verify server realm
hgs
parents:
diff changeset
  1957
		status = add_parameter_data(internal_settings->m_VerifyServerRealmPresent);
hgs
parents:
diff changeset
  1958
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1959
		{
hgs
parents:
diff changeset
  1960
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1961
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1962
		}
hgs
parents:
diff changeset
  1963
hgs
parents:
diff changeset
  1964
		if (internal_settings->m_VerifyServerRealmPresent == true)
hgs
parents:
diff changeset
  1965
		{
hgs
parents:
diff changeset
  1966
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1967
				m_am_tools,
hgs
parents:
diff changeset
  1968
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1969
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_VerifyServerRealm\n"),
hgs
parents:
diff changeset
  1970
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1971
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1972
hgs
parents:
diff changeset
  1973
			status = add_parameter_data((internal_settings->m_VerifyServerRealm));
hgs
parents:
diff changeset
  1974
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1975
			{
hgs
parents:
diff changeset
  1976
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1977
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1978
			}
hgs
parents:
diff changeset
  1979
		}
hgs
parents:
diff changeset
  1980
	}
hgs
parents:
diff changeset
  1981
hgs
parents:
diff changeset
  1982
	{
hgs
parents:
diff changeset
  1983
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1984
			m_am_tools,
hgs
parents:
diff changeset
  1985
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  1986
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_RequireClientAuthenticationPresent\n"),
hgs
parents:
diff changeset
  1987
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  1988
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  1989
hgs
parents:
diff changeset
  1990
		// Whether EAP-TLS/TTLS/PEAP should require client authentication
hgs
parents:
diff changeset
  1991
		status = add_parameter_data(internal_settings->m_RequireClientAuthenticationPresent);
hgs
parents:
diff changeset
  1992
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  1993
		{
hgs
parents:
diff changeset
  1994
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1995
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  1996
		}
hgs
parents:
diff changeset
  1997
hgs
parents:
diff changeset
  1998
		if (internal_settings->m_RequireClientAuthenticationPresent == true)
hgs
parents:
diff changeset
  1999
		{
hgs
parents:
diff changeset
  2000
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2001
				m_am_tools,
hgs
parents:
diff changeset
  2002
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2003
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_RequireClientAuthentication\n"),
hgs
parents:
diff changeset
  2004
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2005
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2006
hgs
parents:
diff changeset
  2007
			status = add_parameter_data((internal_settings->m_RequireClientAuthentication));
hgs
parents:
diff changeset
  2008
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2009
			{
hgs
parents:
diff changeset
  2010
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2011
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2012
			}
hgs
parents:
diff changeset
  2013
		}
hgs
parents:
diff changeset
  2014
	}
hgs
parents:
diff changeset
  2015
hgs
parents:
diff changeset
  2016
	{
hgs
parents:
diff changeset
  2017
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2018
			m_am_tools,
hgs
parents:
diff changeset
  2019
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2020
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_SessionValidityTimePresent\n"),
hgs
parents:
diff changeset
  2021
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2022
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2023
hgs
parents:
diff changeset
  2024
		// General session validity time (in minutes)
hgs
parents:
diff changeset
  2025
		status = add_parameter_data(internal_settings->m_SessionValidityTimePresent);
hgs
parents:
diff changeset
  2026
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2027
		{
hgs
parents:
diff changeset
  2028
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2029
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2030
		}
hgs
parents:
diff changeset
  2031
hgs
parents:
diff changeset
  2032
		if (internal_settings->m_SessionValidityTimePresent == true)
hgs
parents:
diff changeset
  2033
		{
hgs
parents:
diff changeset
  2034
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2035
				m_am_tools,
hgs
parents:
diff changeset
  2036
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2037
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_SessionValidityTime\n"),
hgs
parents:
diff changeset
  2038
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2039
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2040
hgs
parents:
diff changeset
  2041
			status = add_parameter_data((internal_settings->m_SessionValidityTime));
hgs
parents:
diff changeset
  2042
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2043
			{
hgs
parents:
diff changeset
  2044
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2045
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2046
			}
hgs
parents:
diff changeset
  2047
		}
hgs
parents:
diff changeset
  2048
	}
hgs
parents:
diff changeset
  2049
hgs
parents:
diff changeset
  2050
	{
hgs
parents:
diff changeset
  2051
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2052
			m_am_tools,
hgs
parents:
diff changeset
  2053
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2054
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_CipherSuitesPresent\n"),
hgs
parents:
diff changeset
  2055
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2056
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2057
hgs
parents:
diff changeset
  2058
		// An array of allowed cipher suites for EAP-TLS/TTLS/PEAP.
hgs
parents:
diff changeset
  2059
		// Refer to RFC2246 chapter A.5 for the values.
hgs
parents:
diff changeset
  2060
		status = add_parameter_data(internal_settings->m_CipherSuitesPresent);
hgs
parents:
diff changeset
  2061
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2062
		{
hgs
parents:
diff changeset
  2063
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2064
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2065
		}
hgs
parents:
diff changeset
  2066
hgs
parents:
diff changeset
  2067
		if (internal_settings->m_CipherSuitesPresent == true)
hgs
parents:
diff changeset
  2068
		{
hgs
parents:
diff changeset
  2069
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2070
				m_am_tools,
hgs
parents:
diff changeset
  2071
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2072
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_CipherSuites\n"),
hgs
parents:
diff changeset
  2073
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2074
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2075
hgs
parents:
diff changeset
  2076
			status = add_parameter_data(&(internal_settings->m_CipherSuites));
hgs
parents:
diff changeset
  2077
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2078
			{
hgs
parents:
diff changeset
  2079
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2080
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2081
			}
hgs
parents:
diff changeset
  2082
		}
hgs
parents:
diff changeset
  2083
	}
hgs
parents:
diff changeset
  2084
hgs
parents:
diff changeset
  2085
	{
hgs
parents:
diff changeset
  2086
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2087
			m_am_tools,
hgs
parents:
diff changeset
  2088
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2089
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PEAPVersionsPresent\n"),
hgs
parents:
diff changeset
  2090
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2091
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2092
hgs
parents:
diff changeset
  2093
		// Which EAP-PEAP versions are allowed
hgs
parents:
diff changeset
  2094
		status = add_parameter_data(internal_settings->m_PEAPVersionsPresent);
hgs
parents:
diff changeset
  2095
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2096
		{
hgs
parents:
diff changeset
  2097
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2098
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2099
		}
hgs
parents:
diff changeset
  2100
hgs
parents:
diff changeset
  2101
		if (internal_settings->m_PEAPVersionsPresent == true)
hgs
parents:
diff changeset
  2102
		{
hgs
parents:
diff changeset
  2103
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2104
				m_am_tools,
hgs
parents:
diff changeset
  2105
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2106
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PEAPv0Allowed\n"),
hgs
parents:
diff changeset
  2107
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2108
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2109
hgs
parents:
diff changeset
  2110
			status = add_parameter_data((internal_settings->m_PEAPv0Allowed));
hgs
parents:
diff changeset
  2111
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2112
			{
hgs
parents:
diff changeset
  2113
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2114
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2115
			}
hgs
parents:
diff changeset
  2116
hgs
parents:
diff changeset
  2117
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2118
				m_am_tools,
hgs
parents:
diff changeset
  2119
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2120
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PEAPv1Allowed\n"),
hgs
parents:
diff changeset
  2121
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2122
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2123
hgs
parents:
diff changeset
  2124
			status = add_parameter_data((internal_settings->m_PEAPv1Allowed));
hgs
parents:
diff changeset
  2125
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2126
			{
hgs
parents:
diff changeset
  2127
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2128
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2129
			}
hgs
parents:
diff changeset
  2130
hgs
parents:
diff changeset
  2131
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2132
				m_am_tools,
hgs
parents:
diff changeset
  2133
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2134
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PEAPv2Allowed\n"),
hgs
parents:
diff changeset
  2135
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2136
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2137
hgs
parents:
diff changeset
  2138
			status = add_parameter_data((internal_settings->m_PEAPv2Allowed));
hgs
parents:
diff changeset
  2139
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2140
			{
hgs
parents:
diff changeset
  2141
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2142
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2143
			}
hgs
parents:
diff changeset
  2144
		}
hgs
parents:
diff changeset
  2145
	}
hgs
parents:
diff changeset
  2146
hgs
parents:
diff changeset
  2147
	{
hgs
parents:
diff changeset
  2148
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2149
			m_am_tools,
hgs
parents:
diff changeset
  2150
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2151
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_CertificatesPresent\n"),
hgs
parents:
diff changeset
  2152
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2153
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2154
hgs
parents:
diff changeset
  2155
  		// Array listing the allowed certificates for EAP-TLS/TTLS/PEAP.
hgs
parents:
diff changeset
  2156
  		// Subject key ID and Certificate type are the only mandatory certificate
hgs
parents:
diff changeset
  2157
  		// details needed at the moment.
hgs
parents:
diff changeset
  2158
		status = add_parameter_data(internal_settings->m_CertificatesPresent);
hgs
parents:
diff changeset
  2159
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2160
		{
hgs
parents:
diff changeset
  2161
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2162
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2163
		}
hgs
parents:
diff changeset
  2164
hgs
parents:
diff changeset
  2165
		if (internal_settings->m_CertificatesPresent == true)
hgs
parents:
diff changeset
  2166
		{
hgs
parents:
diff changeset
  2167
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2168
				m_am_tools,
hgs
parents:
diff changeset
  2169
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2170
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_Certificates\n"),
hgs
parents:
diff changeset
  2171
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2172
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2173
hgs
parents:
diff changeset
  2174
			status = add_parameter_data(&(internal_settings->m_Certificates));
hgs
parents:
diff changeset
  2175
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2176
			{
hgs
parents:
diff changeset
  2177
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2178
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2179
			}
hgs
parents:
diff changeset
  2180
		}
hgs
parents:
diff changeset
  2181
	}
hgs
parents:
diff changeset
  2182
hgs
parents:
diff changeset
  2183
	{
hgs
parents:
diff changeset
  2184
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2185
			m_am_tools,
hgs
parents:
diff changeset
  2186
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2187
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_EnabledEncapsulatedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  2188
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2189
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2190
hgs
parents:
diff changeset
  2191
		// Array listing the enabled encapsulated EAP types (in priority order).
hgs
parents:
diff changeset
  2192
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  2193
		status = add_parameter_data(internal_settings->m_EnabledEncapsulatedEAPTypesPresent);
hgs
parents:
diff changeset
  2194
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2195
		{
hgs
parents:
diff changeset
  2196
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2197
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2198
		}
hgs
parents:
diff changeset
  2199
hgs
parents:
diff changeset
  2200
		if (internal_settings->m_EnabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
  2201
		{
hgs
parents:
diff changeset
  2202
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2203
				m_am_tools,
hgs
parents:
diff changeset
  2204
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2205
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_EnabledEncapsulatedEAPTypes\n"),
hgs
parents:
diff changeset
  2206
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2207
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2208
hgs
parents:
diff changeset
  2209
			status = add_parameter_data(&(internal_settings->m_EnabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
  2210
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2211
			{
hgs
parents:
diff changeset
  2212
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2213
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2214
			}
hgs
parents:
diff changeset
  2215
		}
hgs
parents:
diff changeset
  2216
	}
hgs
parents:
diff changeset
  2217
hgs
parents:
diff changeset
  2218
	{
hgs
parents:
diff changeset
  2219
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2220
			m_am_tools,
hgs
parents:
diff changeset
  2221
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2222
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_DisabledEncapsulatedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  2223
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2224
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2225
hgs
parents:
diff changeset
  2226
		// Array listing the disabled encapsulated EAP types (in priority order).
hgs
parents:
diff changeset
  2227
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  2228
		status = add_parameter_data(internal_settings->m_DisabledEncapsulatedEAPTypesPresent);
hgs
parents:
diff changeset
  2229
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2230
		{
hgs
parents:
diff changeset
  2231
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2232
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2233
		}
hgs
parents:
diff changeset
  2234
hgs
parents:
diff changeset
  2235
		if (internal_settings->m_DisabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
  2236
		{
hgs
parents:
diff changeset
  2237
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2238
				m_am_tools,
hgs
parents:
diff changeset
  2239
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2240
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_DisabledEncapsulatedEAPTypes\n"),
hgs
parents:
diff changeset
  2241
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2242
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2243
hgs
parents:
diff changeset
  2244
			status = add_parameter_data(&(internal_settings->m_DisabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
  2245
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2246
			{
hgs
parents:
diff changeset
  2247
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2248
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2249
			}
hgs
parents:
diff changeset
  2250
		}
hgs
parents:
diff changeset
  2251
	}
hgs
parents:
diff changeset
  2252
hgs
parents:
diff changeset
  2253
	{
hgs
parents:
diff changeset
  2254
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2255
			m_am_tools,
hgs
parents:
diff changeset
  2256
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2257
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_AuthProvModeAllowedPresent\n"),
hgs
parents:
diff changeset
  2258
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2259
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2260
hgs
parents:
diff changeset
  2261
		// Whether Authenticated provisioning mode allowed or not in EAP-FAST.
hgs
parents:
diff changeset
  2262
		status = add_parameter_data(internal_settings->m_AuthProvModeAllowedPresent);
hgs
parents:
diff changeset
  2263
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2264
		{
hgs
parents:
diff changeset
  2265
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2266
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2267
		}
hgs
parents:
diff changeset
  2268
hgs
parents:
diff changeset
  2269
		if (internal_settings->m_AuthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
  2270
		{
hgs
parents:
diff changeset
  2271
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2272
				m_am_tools,
hgs
parents:
diff changeset
  2273
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2274
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_AuthProvModeAllowed\n"),
hgs
parents:
diff changeset
  2275
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2276
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2277
hgs
parents:
diff changeset
  2278
			status = add_parameter_data((internal_settings->m_AuthProvModeAllowed));
hgs
parents:
diff changeset
  2279
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2280
			{
hgs
parents:
diff changeset
  2281
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2282
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2283
			}
hgs
parents:
diff changeset
  2284
		}
hgs
parents:
diff changeset
  2285
	}
hgs
parents:
diff changeset
  2286
hgs
parents:
diff changeset
  2287
	{
hgs
parents:
diff changeset
  2288
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2289
			m_am_tools,
hgs
parents:
diff changeset
  2290
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2291
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UnauthProvModeAllowedPresent\n"),
hgs
parents:
diff changeset
  2292
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2293
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2294
hgs
parents:
diff changeset
  2295
		// Whether Unauthenticated provisioning mode allowed or not in EAP-FAST.
hgs
parents:
diff changeset
  2296
		status = add_parameter_data(internal_settings->m_UnauthProvModeAllowedPresent);
hgs
parents:
diff changeset
  2297
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2298
		{
hgs
parents:
diff changeset
  2299
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2300
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2301
		}
hgs
parents:
diff changeset
  2302
hgs
parents:
diff changeset
  2303
		if (internal_settings->m_UnauthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
  2304
		{
hgs
parents:
diff changeset
  2305
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2306
				m_am_tools,
hgs
parents:
diff changeset
  2307
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2308
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UnauthProvModeAllowed\n"),
hgs
parents:
diff changeset
  2309
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2310
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2311
hgs
parents:
diff changeset
  2312
			status = add_parameter_data((internal_settings->m_UnauthProvModeAllowed));
hgs
parents:
diff changeset
  2313
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2314
			{
hgs
parents:
diff changeset
  2315
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2316
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2317
			}
hgs
parents:
diff changeset
  2318
		}
hgs
parents:
diff changeset
  2319
	}
hgs
parents:
diff changeset
  2320
hgs
parents:
diff changeset
  2321
	{
hgs
parents:
diff changeset
  2322
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2323
			m_am_tools,
hgs
parents:
diff changeset
  2324
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2325
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PACGroupReferencePresent\n"),
hgs
parents:
diff changeset
  2326
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2327
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2328
hgs
parents:
diff changeset
  2329
		// PAC group reference in ASCII format for EAP-FAST.
hgs
parents:
diff changeset
  2330
		status = add_parameter_data(internal_settings->m_PACGroupReferencePresent);
hgs
parents:
diff changeset
  2331
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2332
		{
hgs
parents:
diff changeset
  2333
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2334
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2335
		}
hgs
parents:
diff changeset
  2336
hgs
parents:
diff changeset
  2337
		if (internal_settings->m_PACGroupReferencePresent == true)
hgs
parents:
diff changeset
  2338
		{
hgs
parents:
diff changeset
  2339
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2340
				m_am_tools,
hgs
parents:
diff changeset
  2341
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2342
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_PACGroupReference\n"),
hgs
parents:
diff changeset
  2343
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2344
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2345
hgs
parents:
diff changeset
  2346
			status = add_parameter_data(&(internal_settings->m_PACGroupReference));
hgs
parents:
diff changeset
  2347
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2348
			{
hgs
parents:
diff changeset
  2349
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2350
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2351
			}
hgs
parents:
diff changeset
  2352
		}
hgs
parents:
diff changeset
  2353
	}
hgs
parents:
diff changeset
  2354
hgs
parents:
diff changeset
  2355
	{
hgs
parents:
diff changeset
  2356
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2357
			m_am_tools,
hgs
parents:
diff changeset
  2358
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2359
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnADHPNoPACPresent\n"),
hgs
parents:
diff changeset
  2360
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2361
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2362
hgs
parents:
diff changeset
  2363
		// Whether to Warn (or Prompt) for ADHP (Authenticated Diffie-Hellman Protocol)
hgs
parents:
diff changeset
  2364
		// auto-provisioning when there is no PAC at all. EAP-FAST specific.
hgs
parents:
diff changeset
  2365
		status = add_parameter_data(internal_settings->m_WarnADHPNoPACPresent);
hgs
parents:
diff changeset
  2366
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2367
		{
hgs
parents:
diff changeset
  2368
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2369
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2370
		}
hgs
parents:
diff changeset
  2371
hgs
parents:
diff changeset
  2372
		if (internal_settings->m_WarnADHPNoPACPresent == true)
hgs
parents:
diff changeset
  2373
		{
hgs
parents:
diff changeset
  2374
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2375
				m_am_tools,
hgs
parents:
diff changeset
  2376
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2377
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnADHPNoPAC\n"),
hgs
parents:
diff changeset
  2378
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2379
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2380
hgs
parents:
diff changeset
  2381
			status = add_parameter_data((internal_settings->m_WarnADHPNoPAC));
hgs
parents:
diff changeset
  2382
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2383
			{
hgs
parents:
diff changeset
  2384
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2385
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2386
			}
hgs
parents:
diff changeset
  2387
		}
hgs
parents:
diff changeset
  2388
	}
hgs
parents:
diff changeset
  2389
hgs
parents:
diff changeset
  2390
	{
hgs
parents:
diff changeset
  2391
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2392
			m_am_tools,
hgs
parents:
diff changeset
  2393
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2394
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnADHPNoMatchingPACPresent\n"),
hgs
parents:
diff changeset
  2395
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2396
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2397
hgs
parents:
diff changeset
  2398
		// Whether to Warn (or Prompt) for ADHP auto-provisioning when
hgs
parents:
diff changeset
  2399
		// there is no PAC that matches the A-ID sent by server. EAP-FAST specific.
hgs
parents:
diff changeset
  2400
		status = add_parameter_data(internal_settings->m_WarnADHPNoMatchingPACPresent);
hgs
parents:
diff changeset
  2401
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2402
		{
hgs
parents:
diff changeset
  2403
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2404
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2405
		}
hgs
parents:
diff changeset
  2406
hgs
parents:
diff changeset
  2407
		if (internal_settings->m_WarnADHPNoMatchingPACPresent == true)
hgs
parents:
diff changeset
  2408
		{
hgs
parents:
diff changeset
  2409
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2410
				m_am_tools,
hgs
parents:
diff changeset
  2411
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2412
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnADHPNoMatchingPAC\n"),
hgs
parents:
diff changeset
  2413
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2414
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2415
hgs
parents:
diff changeset
  2416
			status = add_parameter_data((internal_settings->m_WarnADHPNoMatchingPAC));
hgs
parents:
diff changeset
  2417
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2418
			{
hgs
parents:
diff changeset
  2419
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2420
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2421
			}
hgs
parents:
diff changeset
  2422
		}
hgs
parents:
diff changeset
  2423
	}
hgs
parents:
diff changeset
  2424
hgs
parents:
diff changeset
  2425
	{
hgs
parents:
diff changeset
  2426
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2427
			m_am_tools,
hgs
parents:
diff changeset
  2428
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2429
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnNotDefaultServerPresent\n"),
hgs
parents:
diff changeset
  2430
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2431
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2432
hgs
parents:
diff changeset
  2433
		// Whether to Warn (or Prompt) when client encouters a server that has provisioned
hgs
parents:
diff changeset
  2434
		// the client with a PAC before but is not currently selected as the default server.
hgs
parents:
diff changeset
  2435
		// EAP-FAST specific.
hgs
parents:
diff changeset
  2436
		status = add_parameter_data(internal_settings->m_WarnNotDefaultServerPresent);
hgs
parents:
diff changeset
  2437
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2438
		{
hgs
parents:
diff changeset
  2439
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2440
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2441
		}
hgs
parents:
diff changeset
  2442
hgs
parents:
diff changeset
  2443
		if (internal_settings->m_WarnNotDefaultServerPresent == true)
hgs
parents:
diff changeset
  2444
		{
hgs
parents:
diff changeset
  2445
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2446
				m_am_tools,
hgs
parents:
diff changeset
  2447
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2448
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_WarnNotDefaultServer\n"),
hgs
parents:
diff changeset
  2449
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2450
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2451
hgs
parents:
diff changeset
  2452
			status = add_parameter_data((internal_settings->m_WarnNotDefaultServer));
hgs
parents:
diff changeset
  2453
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2454
			{
hgs
parents:
diff changeset
  2455
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2456
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2457
			}
hgs
parents:
diff changeset
  2458
		}
hgs
parents:
diff changeset
  2459
	}
hgs
parents:
diff changeset
  2460
hgs
parents:
diff changeset
  2461
	{
hgs
parents:
diff changeset
  2462
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2463
			m_am_tools,
hgs
parents:
diff changeset
  2464
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2465
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_SelectedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  2466
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2467
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2468
hgs
parents:
diff changeset
  2469
		// Array listing the active and disabled EAP types (in priority order).
hgs
parents:
diff changeset
  2470
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  2471
		status = add_parameter_data(internal_settings->m_SelectedEAPTypesPresent);
hgs
parents:
diff changeset
  2472
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2473
		{
hgs
parents:
diff changeset
  2474
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2475
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2476
		}
hgs
parents:
diff changeset
  2477
hgs
parents:
diff changeset
  2478
		if (internal_settings->m_SelectedEAPTypesPresent == true)
hgs
parents:
diff changeset
  2479
		{
hgs
parents:
diff changeset
  2480
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2481
				m_am_tools,
hgs
parents:
diff changeset
  2482
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2483
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_active_eap_methods\n"),
hgs
parents:
diff changeset
  2484
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2485
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2486
hgs
parents:
diff changeset
  2487
			status = add_parameter_data(&(internal_settings->m_active_eap_methods));
hgs
parents:
diff changeset
  2488
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2489
			{
hgs
parents:
diff changeset
  2490
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2491
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2492
			}
hgs
parents:
diff changeset
  2493
hgs
parents:
diff changeset
  2494
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2495
				m_am_tools,
hgs
parents:
diff changeset
  2496
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2497
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_disabled_eap_methods\n"),
hgs
parents:
diff changeset
  2498
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2499
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2500
hgs
parents:
diff changeset
  2501
			status = add_parameter_data(&(internal_settings->m_disabled_eap_methods));
hgs
parents:
diff changeset
  2502
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2503
			{
hgs
parents:
diff changeset
  2504
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2505
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2506
			}
hgs
parents:
diff changeset
  2507
		}
hgs
parents:
diff changeset
  2508
	}
hgs
parents:
diff changeset
  2509
hgs
parents:
diff changeset
  2510
	{
hgs
parents:
diff changeset
  2511
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2512
			m_am_tools,
hgs
parents:
diff changeset
  2513
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2514
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_TunnelingTypePresent\n"),
hgs
parents:
diff changeset
  2515
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2516
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2517
hgs
parents:
diff changeset
  2518
		status = add_parameter_data(internal_settings->m_TunnelingTypePresent);
hgs
parents:
diff changeset
  2519
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2520
		{
hgs
parents:
diff changeset
  2521
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2522
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2523
		}
hgs
parents:
diff changeset
  2524
hgs
parents:
diff changeset
  2525
		if (internal_settings->m_TunnelingTypePresent == true)
hgs
parents:
diff changeset
  2526
		{
hgs
parents:
diff changeset
  2527
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2528
				m_am_tools,
hgs
parents:
diff changeset
  2529
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2530
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_TunnelingType\n"),
hgs
parents:
diff changeset
  2531
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2532
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2533
hgs
parents:
diff changeset
  2534
			status = add_parameter_data((internal_settings->m_TunnelingType));
hgs
parents:
diff changeset
  2535
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2536
			{
hgs
parents:
diff changeset
  2537
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2538
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2539
			}
hgs
parents:
diff changeset
  2540
		}
hgs
parents:
diff changeset
  2541
	}
hgs
parents:
diff changeset
  2542
hgs
parents:
diff changeset
  2543
	{
hgs
parents:
diff changeset
  2544
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2545
			m_am_tools,
hgs
parents:
diff changeset
  2546
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2547
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_DestinationIndexAndTypePresent\n"),
hgs
parents:
diff changeset
  2548
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2549
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2550
hgs
parents:
diff changeset
  2551
		status = add_parameter_data(internal_settings->m_DestinationIndexAndTypePresent);
hgs
parents:
diff changeset
  2552
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2553
		{
hgs
parents:
diff changeset
  2554
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2555
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2556
		}
hgs
parents:
diff changeset
  2557
hgs
parents:
diff changeset
  2558
		if (internal_settings->m_DestinationIndexAndTypePresent == true)
hgs
parents:
diff changeset
  2559
		{
hgs
parents:
diff changeset
  2560
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2561
				m_am_tools,
hgs
parents:
diff changeset
  2562
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2563
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_DestinationIndexType\n"),
hgs
parents:
diff changeset
  2564
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2565
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2566
hgs
parents:
diff changeset
  2567
			status = add_parameter_data((internal_settings->m_DestinationIndexType));
hgs
parents:
diff changeset
  2568
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2569
			{
hgs
parents:
diff changeset
  2570
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2571
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2572
			}
hgs
parents:
diff changeset
  2573
hgs
parents:
diff changeset
  2574
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2575
				m_am_tools,
hgs
parents:
diff changeset
  2576
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2577
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_DestinationIndex\n"),
hgs
parents:
diff changeset
  2578
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2579
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2580
hgs
parents:
diff changeset
  2581
			status = add_parameter_data((internal_settings->m_DestinationIndex));
hgs
parents:
diff changeset
  2582
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2583
			{
hgs
parents:
diff changeset
  2584
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2585
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2586
			}
hgs
parents:
diff changeset
  2587
		}
hgs
parents:
diff changeset
  2588
	}
hgs
parents:
diff changeset
  2589
hgs
parents:
diff changeset
  2590
	{
hgs
parents:
diff changeset
  2591
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2592
			m_am_tools,
hgs
parents:
diff changeset
  2593
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2594
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_MethodInfoPresent\n"),
hgs
parents:
diff changeset
  2595
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2596
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2597
hgs
parents:
diff changeset
  2598
		status = add_parameter_data(internal_settings->m_MethodInfoPresent);
hgs
parents:
diff changeset
  2599
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2600
		{
hgs
parents:
diff changeset
  2601
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2602
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2603
		}
hgs
parents:
diff changeset
  2604
hgs
parents:
diff changeset
  2605
		if (internal_settings->m_MethodInfoPresent == true)
hgs
parents:
diff changeset
  2606
		{
hgs
parents:
diff changeset
  2607
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2608
				m_am_tools,
hgs
parents:
diff changeset
  2609
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2610
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_KReleaseDate\n"),
hgs
parents:
diff changeset
  2611
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2612
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2613
hgs
parents:
diff changeset
  2614
			status = add_parameter_data(&(internal_settings->m_KReleaseDate));
hgs
parents:
diff changeset
  2615
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2616
			{
hgs
parents:
diff changeset
  2617
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2618
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2619
			}
hgs
parents:
diff changeset
  2620
hgs
parents:
diff changeset
  2621
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2622
				m_am_tools,
hgs
parents:
diff changeset
  2623
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2624
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_KEapTypeVersion\n"),
hgs
parents:
diff changeset
  2625
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2626
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2627
hgs
parents:
diff changeset
  2628
			status = add_parameter_data(&(internal_settings->m_KEapTypeVersion));
hgs
parents:
diff changeset
  2629
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2630
			{
hgs
parents:
diff changeset
  2631
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2632
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2633
			}
hgs
parents:
diff changeset
  2634
hgs
parents:
diff changeset
  2635
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2636
				m_am_tools,
hgs
parents:
diff changeset
  2637
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2638
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_KManufacturer\n"),
hgs
parents:
diff changeset
  2639
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2640
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2641
hgs
parents:
diff changeset
  2642
			status = add_parameter_data(&(internal_settings->m_KManufacturer));
hgs
parents:
diff changeset
  2643
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2644
			{
hgs
parents:
diff changeset
  2645
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2646
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2647
			}
hgs
parents:
diff changeset
  2648
		}
hgs
parents:
diff changeset
  2649
	}
hgs
parents:
diff changeset
  2650
hgs
parents:
diff changeset
  2651
	{
hgs
parents:
diff changeset
  2652
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2653
			m_am_tools,
hgs
parents:
diff changeset
  2654
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2655
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_ButtonIdPresent\n"),
hgs
parents:
diff changeset
  2656
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2657
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2658
hgs
parents:
diff changeset
  2659
		status = add_parameter_data(internal_settings->m_ButtonIdPresent);
hgs
parents:
diff changeset
  2660
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2661
		{
hgs
parents:
diff changeset
  2662
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2663
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2664
		}
hgs
parents:
diff changeset
  2665
hgs
parents:
diff changeset
  2666
		if (internal_settings->m_ButtonIdPresent == true)
hgs
parents:
diff changeset
  2667
		{
hgs
parents:
diff changeset
  2668
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2669
				m_am_tools,
hgs
parents:
diff changeset
  2670
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2671
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_ButtonId\n"),
hgs
parents:
diff changeset
  2672
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2673
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2674
hgs
parents:
diff changeset
  2675
			status = add_parameter_data((internal_settings->m_ButtonId));
hgs
parents:
diff changeset
  2676
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2677
			{
hgs
parents:
diff changeset
  2678
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2679
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2680
			}
hgs
parents:
diff changeset
  2681
		}
hgs
parents:
diff changeset
  2682
	}
hgs
parents:
diff changeset
  2683
hgs
parents:
diff changeset
  2684
hgs
parents:
diff changeset
  2685
	{
hgs
parents:
diff changeset
  2686
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2687
			m_am_tools,
hgs
parents:
diff changeset
  2688
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2689
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_ShowPassWordPromptPresent\n"),
hgs
parents:
diff changeset
  2690
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2691
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2692
hgs
parents:
diff changeset
  2693
		// Whether to show (or Prompt) password.
hgs
parents:
diff changeset
  2694
		status = add_parameter_data(internal_settings->m_ShowPassWordPromptPresent);
hgs
parents:
diff changeset
  2695
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2696
		{
hgs
parents:
diff changeset
  2697
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2698
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2699
		}
hgs
parents:
diff changeset
  2700
hgs
parents:
diff changeset
  2701
		if (internal_settings->m_ShowPassWordPromptPresent == true)
hgs
parents:
diff changeset
  2702
		{
hgs
parents:
diff changeset
  2703
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2704
				m_am_tools,
hgs
parents:
diff changeset
  2705
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2706
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_ShowPassWordPrompt\n"),
hgs
parents:
diff changeset
  2707
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2708
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2709
hgs
parents:
diff changeset
  2710
			status = add_parameter_data((internal_settings->m_ShowPassWordPrompt));
hgs
parents:
diff changeset
  2711
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2712
			{
hgs
parents:
diff changeset
  2713
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2714
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2715
			}
hgs
parents:
diff changeset
  2716
		}
hgs
parents:
diff changeset
  2717
	}
hgs
parents:
diff changeset
  2718
hgs
parents:
diff changeset
  2719
hgs
parents:
diff changeset
  2720
	{
hgs
parents:
diff changeset
  2721
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2722
			m_am_tools,
hgs
parents:
diff changeset
  2723
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2724
			(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseIdentityPrivacyPresent\n"),
hgs
parents:
diff changeset
  2725
			eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2726
			 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2727
hgs
parents:
diff changeset
  2728
		// Whether to show (or Prompt) password.
hgs
parents:
diff changeset
  2729
		status = add_parameter_data(internal_settings->m_UseIdentityPrivacyPresent);
hgs
parents:
diff changeset
  2730
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  2731
		{
hgs
parents:
diff changeset
  2732
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2733
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2734
		}
hgs
parents:
diff changeset
  2735
hgs
parents:
diff changeset
  2736
		if (internal_settings->m_UseIdentityPrivacyPresent == true)
hgs
parents:
diff changeset
  2737
		{
hgs
parents:
diff changeset
  2738
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2739
				m_am_tools,
hgs
parents:
diff changeset
  2740
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2741
				(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s, m_UseIdentityPrivacy\n"),
hgs
parents:
diff changeset
  2742
				eap_tlv_message_type_eap_method_settings,
hgs
parents:
diff changeset
  2743
				 get_type_string(eap_tlv_message_type_eap_method_settings)));
hgs
parents:
diff changeset
  2744
hgs
parents:
diff changeset
  2745
			status = add_parameter_data((internal_settings->m_UseIdentityPrivacy));
hgs
parents:
diff changeset
  2746
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2747
			{
hgs
parents:
diff changeset
  2748
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2749
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2750
			}
hgs
parents:
diff changeset
  2751
		}
hgs
parents:
diff changeset
  2752
	}
hgs
parents:
diff changeset
  2753
hgs
parents:
diff changeset
  2754
hgs
parents:
diff changeset
  2755
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2756
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2757
}
hgs
parents:
diff changeset
  2758
hgs
parents:
diff changeset
  2759
//--------------------------------------------------
hgs
parents:
diff changeset
  2760
hgs
parents:
diff changeset
  2761
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  2762
	EAP_TEMPLATE_CONST eap_array_c<u16_t> * const ushort_array)
hgs
parents:
diff changeset
  2763
{
hgs
parents:
diff changeset
  2764
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2765
hgs
parents:
diff changeset
  2766
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2767
		m_am_tools,
hgs
parents:
diff changeset
  2768
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2769
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): array type=%d=%s\n"),
hgs
parents:
diff changeset
  2770
		eap_tlv_message_type_u16_t,
hgs
parents:
diff changeset
  2771
		 get_type_string(eap_tlv_message_type_u16_t)));
hgs
parents:
diff changeset
  2772
hgs
parents:
diff changeset
  2773
	if (ushort_array == 0)
hgs
parents:
diff changeset
  2774
	{
hgs
parents:
diff changeset
  2775
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2776
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  2777
	}
hgs
parents:
diff changeset
  2778
hgs
parents:
diff changeset
  2779
	const u32_t size_of_ushort_array(get_payload_size(ushort_array));
hgs
parents:
diff changeset
  2780
hgs
parents:
diff changeset
  2781
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2782
		eap_tlv_message_type_array,
hgs
parents:
diff changeset
  2783
		size_of_ushort_array);
hgs
parents:
diff changeset
  2784
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  2785
	{
hgs
parents:
diff changeset
  2786
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2787
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2788
	}
hgs
parents:
diff changeset
  2789
hgs
parents:
diff changeset
  2790
hgs
parents:
diff changeset
  2791
	for (u32_t ind = 0ul; ind < ushort_array->get_object_count(); ind++)
hgs
parents:
diff changeset
  2792
	{
hgs
parents:
diff changeset
  2793
		const u16_t * const value = ushort_array->get_object(ind);
hgs
parents:
diff changeset
  2794
		if (value != 0)
hgs
parents:
diff changeset
  2795
		{
hgs
parents:
diff changeset
  2796
			status = add_parameter_data(*value);
hgs
parents:
diff changeset
  2797
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2798
			{
hgs
parents:
diff changeset
  2799
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2800
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2801
			}
hgs
parents:
diff changeset
  2802
		}
hgs
parents:
diff changeset
  2803
	}
hgs
parents:
diff changeset
  2804
hgs
parents:
diff changeset
  2805
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2806
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  2807
}
hgs
parents:
diff changeset
  2808
hgs
parents:
diff changeset
  2809
//--------------------------------------------------
hgs
parents:
diff changeset
  2810
hgs
parents:
diff changeset
  2811
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  2812
	EAP_TEMPLATE_CONST eap_array_c<eap_certificate_entry_c> * const cert_array)
hgs
parents:
diff changeset
  2813
{
hgs
parents:
diff changeset
  2814
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2815
hgs
parents:
diff changeset
  2816
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2817
		m_am_tools,
hgs
parents:
diff changeset
  2818
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2819
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): array type=%d=%s\n"),
hgs
parents:
diff changeset
  2820
		eap_tlv_message_type_eap_certificate_entry,
hgs
parents:
diff changeset
  2821
		 get_type_string(eap_tlv_message_type_eap_certificate_entry)));
hgs
parents:
diff changeset
  2822
hgs
parents:
diff changeset
  2823
	if (cert_array == 0)
hgs
parents:
diff changeset
  2824
	{
hgs
parents:
diff changeset
  2825
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2826
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  2827
	}
hgs
parents:
diff changeset
  2828
hgs
parents:
diff changeset
  2829
	const u32_t size_of_cert_array(get_payload_size(cert_array));
hgs
parents:
diff changeset
  2830
hgs
parents:
diff changeset
  2831
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2832
		eap_tlv_message_type_array,
hgs
parents:
diff changeset
  2833
		size_of_cert_array);
hgs
parents:
diff changeset
  2834
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  2835
	{
hgs
parents:
diff changeset
  2836
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2837
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2838
	}
hgs
parents:
diff changeset
  2839
hgs
parents:
diff changeset
  2840
hgs
parents:
diff changeset
  2841
	for (u32_t ind = 0ul; ind < cert_array->get_object_count(); ind++)
hgs
parents:
diff changeset
  2842
	{
hgs
parents:
diff changeset
  2843
		const eap_certificate_entry_c * const value = cert_array->get_object(ind);
hgs
parents:
diff changeset
  2844
		if (value != 0)
hgs
parents:
diff changeset
  2845
		{
hgs
parents:
diff changeset
  2846
			status = add_parameter_data(value);
hgs
parents:
diff changeset
  2847
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2848
			{
hgs
parents:
diff changeset
  2849
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2850
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2851
			}
hgs
parents:
diff changeset
  2852
		}
hgs
parents:
diff changeset
  2853
	}
hgs
parents:
diff changeset
  2854
hgs
parents:
diff changeset
  2855
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2856
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  2857
}
hgs
parents:
diff changeset
  2858
hgs
parents:
diff changeset
  2859
//--------------------------------------------------
hgs
parents:
diff changeset
  2860
hgs
parents:
diff changeset
  2861
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  2862
hgs
parents:
diff changeset
  2863
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  2864
	EAP_TEMPLATE_CONST eap_array_c<simple_config_credential_c> * const credential_array)
hgs
parents:
diff changeset
  2865
{
hgs
parents:
diff changeset
  2866
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2867
hgs
parents:
diff changeset
  2868
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  2869
		m_am_tools,
hgs
parents:
diff changeset
  2870
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  2871
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): array type=%d=%s\n"),
hgs
parents:
diff changeset
  2872
		eap_tlv_message_type_protected_setup_credential,
hgs
parents:
diff changeset
  2873
		 get_type_string(eap_tlv_message_type_protected_setup_credential)));
hgs
parents:
diff changeset
  2874
hgs
parents:
diff changeset
  2875
	if (credential_array == 0)
hgs
parents:
diff changeset
  2876
	{
hgs
parents:
diff changeset
  2877
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2878
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  2879
	}
hgs
parents:
diff changeset
  2880
hgs
parents:
diff changeset
  2881
	const u32_t size_of_credential_array(get_payload_size(credential_array));
hgs
parents:
diff changeset
  2882
hgs
parents:
diff changeset
  2883
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2884
		eap_tlv_message_type_array,
hgs
parents:
diff changeset
  2885
		size_of_credential_array);
hgs
parents:
diff changeset
  2886
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  2887
	{
hgs
parents:
diff changeset
  2888
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2889
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2890
	}
hgs
parents:
diff changeset
  2891
hgs
parents:
diff changeset
  2892
hgs
parents:
diff changeset
  2893
	for (u32_t ind_credential = 0ul; ind_credential < credential_array->get_object_count(); ind_credential++)
hgs
parents:
diff changeset
  2894
	{
hgs
parents:
diff changeset
  2895
		simple_config_credential_c * const credential = credential_array->get_object(ind_credential);
hgs
parents:
diff changeset
  2896
		if (credential != 0)
hgs
parents:
diff changeset
  2897
		{
hgs
parents:
diff changeset
  2898
			const u32_t size_of_credential(get_payload_size(credential));
hgs
parents:
diff changeset
  2899
hgs
parents:
diff changeset
  2900
			eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2901
				eap_tlv_message_type_protected_setup_credential,
hgs
parents:
diff changeset
  2902
				size_of_credential);
hgs
parents:
diff changeset
  2903
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2904
			{
hgs
parents:
diff changeset
  2905
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2906
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2907
			}
hgs
parents:
diff changeset
  2908
hgs
parents:
diff changeset
  2909
			status = add_parameter_data(credential->get_network_index());
hgs
parents:
diff changeset
  2910
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2911
			{
hgs
parents:
diff changeset
  2912
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2913
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2914
			}
hgs
parents:
diff changeset
  2915
hgs
parents:
diff changeset
  2916
			status = add_parameter_data(credential->get_SSID());
hgs
parents:
diff changeset
  2917
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2918
			{
hgs
parents:
diff changeset
  2919
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2920
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2921
			}
hgs
parents:
diff changeset
  2922
hgs
parents:
diff changeset
  2923
			status = add_parameter_data(static_cast<u16_t>(credential->get_Authentication_Type()));
hgs
parents:
diff changeset
  2924
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2925
			{
hgs
parents:
diff changeset
  2926
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2927
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2928
			}
hgs
parents:
diff changeset
  2929
hgs
parents:
diff changeset
  2930
			status = add_parameter_data(static_cast<u16_t>(credential->get_Encryption_Type()));
hgs
parents:
diff changeset
  2931
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2932
			{
hgs
parents:
diff changeset
  2933
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2934
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2935
			}
hgs
parents:
diff changeset
  2936
hgs
parents:
diff changeset
  2937
			const u32_t size_of_network_key_array(get_payload_size(credential->get_network_keys()));
hgs
parents:
diff changeset
  2938
hgs
parents:
diff changeset
  2939
			status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2940
				eap_tlv_message_type_array,
hgs
parents:
diff changeset
  2941
				size_of_network_key_array);
hgs
parents:
diff changeset
  2942
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2943
			{
hgs
parents:
diff changeset
  2944
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2945
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2946
			}
hgs
parents:
diff changeset
  2947
hgs
parents:
diff changeset
  2948
			for (u32_t ind_network_key = 0ul; ind_network_key < credential->get_network_keys()->get_object_count(); ind_network_key++)
hgs
parents:
diff changeset
  2949
			{
hgs
parents:
diff changeset
  2950
				network_key_and_index_c * const network_key = credential->get_network_keys()->get_object(ind_network_key);
hgs
parents:
diff changeset
  2951
				if (network_key != 0)
hgs
parents:
diff changeset
  2952
				{
hgs
parents:
diff changeset
  2953
					const u32_t size_of_network_key(get_payload_size(network_key));
hgs
parents:
diff changeset
  2954
hgs
parents:
diff changeset
  2955
					status = add_structured_parameter_header(
hgs
parents:
diff changeset
  2956
						eap_tlv_message_type_network_key,
hgs
parents:
diff changeset
  2957
						size_of_network_key);
hgs
parents:
diff changeset
  2958
					if (status != eap_status_ok)
hgs
parents:
diff changeset
  2959
					{
hgs
parents:
diff changeset
  2960
						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2961
						return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2962
					}
hgs
parents:
diff changeset
  2963
hgs
parents:
diff changeset
  2964
					status = add_parameter_data(network_key->get_network_key_index());
hgs
parents:
diff changeset
  2965
					if (status != eap_status_ok)
hgs
parents:
diff changeset
  2966
					{
hgs
parents:
diff changeset
  2967
						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2968
						return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2969
					}
hgs
parents:
diff changeset
  2970
hgs
parents:
diff changeset
  2971
					status = add_parameter_data(network_key->get_network_key());
hgs
parents:
diff changeset
  2972
					if (status != eap_status_ok)
hgs
parents:
diff changeset
  2973
					{
hgs
parents:
diff changeset
  2974
						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2975
						return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2976
					}
hgs
parents:
diff changeset
  2977
				}
hgs
parents:
diff changeset
  2978
			} // for ()
hgs
parents:
diff changeset
  2979
hgs
parents:
diff changeset
  2980
			status = add_parameter_data(credential->get_MAC_address());
hgs
parents:
diff changeset
  2981
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  2982
			{
hgs
parents:
diff changeset
  2983
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2984
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  2985
			}
hgs
parents:
diff changeset
  2986
		}
hgs
parents:
diff changeset
  2987
	} // for ()
hgs
parents:
diff changeset
  2988
hgs
parents:
diff changeset
  2989
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  2990
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  2991
}
hgs
parents:
diff changeset
  2992
hgs
parents:
diff changeset
  2993
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  2994
hgs
parents:
diff changeset
  2995
//--------------------------------------------------
hgs
parents:
diff changeset
  2996
hgs
parents:
diff changeset
  2997
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  2998
	const eap_variable_data_c * const selector,
hgs
parents:
diff changeset
  2999
	const eap_config_value_c * const configuration_option)
hgs
parents:
diff changeset
  3000
{
hgs
parents:
diff changeset
  3001
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3002
hgs
parents:
diff changeset
  3003
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3004
		m_am_tools,
hgs
parents:
diff changeset
  3005
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3006
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3007
		eap_tlv_message_type_variable_data,
hgs
parents:
diff changeset
  3008
		 get_type_string(eap_tlv_message_type_variable_data)));
hgs
parents:
diff changeset
  3009
hgs
parents:
diff changeset
  3010
	if (selector == 0
hgs
parents:
diff changeset
  3011
		|| selector->get_is_valid_data() == false
hgs
parents:
diff changeset
  3012
		|| configuration_option == 0
hgs
parents:
diff changeset
  3013
		|| configuration_option->get_is_valid() == false)
hgs
parents:
diff changeset
  3014
	{
hgs
parents:
diff changeset
  3015
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3016
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3017
	}
hgs
parents:
diff changeset
  3018
hgs
parents:
diff changeset
  3019
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
  3020
hgs
parents:
diff changeset
  3021
	u32_t size_of_data = get_payload_size(
hgs
parents:
diff changeset
  3022
		selector,
hgs
parents:
diff changeset
  3023
		configuration_option);
hgs
parents:
diff changeset
  3024
hgs
parents:
diff changeset
  3025
	if (size_of_data > 0ul)
hgs
parents:
diff changeset
  3026
	{
hgs
parents:
diff changeset
  3027
		status = add_structured_parameter_header(
hgs
parents:
diff changeset
  3028
				eap_tlv_message_type_configuration_option,
hgs
parents:
diff changeset
  3029
				size_of_data);
hgs
parents:
diff changeset
  3030
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3031
		{
hgs
parents:
diff changeset
  3032
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3033
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3034
		}
hgs
parents:
diff changeset
  3035
hgs
parents:
diff changeset
  3036
		status = add_parameter_data(static_cast<u32_t>(configuration_option->get_const_type()));
hgs
parents:
diff changeset
  3037
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3038
		{
hgs
parents:
diff changeset
  3039
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3040
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3041
		}
hgs
parents:
diff changeset
  3042
hgs
parents:
diff changeset
  3043
		status = add_parameter_data(selector);
hgs
parents:
diff changeset
  3044
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3045
		{
hgs
parents:
diff changeset
  3046
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3047
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3048
		}
hgs
parents:
diff changeset
  3049
hgs
parents:
diff changeset
  3050
hgs
parents:
diff changeset
  3051
		switch(configuration_option->get_const_type())
hgs
parents:
diff changeset
  3052
		{
hgs
parents:
diff changeset
  3053
		case eap_configure_type_string:
hgs
parents:
diff changeset
  3054
		case eap_configure_type_hex_data:
hgs
parents:
diff changeset
  3055
			status = add_parameter_data(configuration_option->get_const_data());
hgs
parents:
diff changeset
  3056
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  3057
			{
hgs
parents:
diff changeset
  3058
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3059
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3060
			}
hgs
parents:
diff changeset
  3061
			break;
hgs
parents:
diff changeset
  3062
		case eap_configure_type_u32_t:
hgs
parents:
diff changeset
  3063
		case eap_configure_type_boolean:
hgs
parents:
diff changeset
  3064
			{
hgs
parents:
diff changeset
  3065
				const u32_t * value = reinterpret_cast<const u32_t *>(configuration_option->get_const_data()->get_data(sizeof(u32_t)));
hgs
parents:
diff changeset
  3066
				if (value != 0)
hgs
parents:
diff changeset
  3067
				{
hgs
parents:
diff changeset
  3068
					status = add_parameter_data(*value);
hgs
parents:
diff changeset
  3069
					if (status != eap_status_ok)
hgs
parents:
diff changeset
  3070
					{
hgs
parents:
diff changeset
  3071
						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3072
						return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3073
					}
hgs
parents:
diff changeset
  3074
				}
hgs
parents:
diff changeset
  3075
			}
hgs
parents:
diff changeset
  3076
			break;
hgs
parents:
diff changeset
  3077
		case eap_configure_type_u32array:
hgs
parents:
diff changeset
  3078
			{
hgs
parents:
diff changeset
  3079
				const u32_t count_of_values = configuration_option->get_const_data()->get_data_length() / sizeof(u32_t);
hgs
parents:
diff changeset
  3080
				const u32_t * value = reinterpret_cast<const u32_t *>(configuration_option->get_const_data()->get_data(sizeof(u32_t)));
hgs
parents:
diff changeset
  3081
				if (value != 0)
hgs
parents:
diff changeset
  3082
				{
hgs
parents:
diff changeset
  3083
					status = add_structured_parameter_header(
hgs
parents:
diff changeset
  3084
							eap_tlv_message_type_array,
hgs
parents:
diff changeset
  3085
							count_of_values*(eap_tlv_header_c::get_header_length()+sizeof(u32_t)));
hgs
parents:
diff changeset
  3086
					if (status != eap_status_ok)
hgs
parents:
diff changeset
  3087
					{
hgs
parents:
diff changeset
  3088
						EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3089
						return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3090
					}
hgs
parents:
diff changeset
  3091
hgs
parents:
diff changeset
  3092
					for (u32_t ind = 0ul; ind < count_of_values; ++ind)
hgs
parents:
diff changeset
  3093
					{
hgs
parents:
diff changeset
  3094
						status = add_parameter_data(value[ind]);
hgs
parents:
diff changeset
  3095
						if (status != eap_status_ok)
hgs
parents:
diff changeset
  3096
						{
hgs
parents:
diff changeset
  3097
							EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3098
							return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3099
						}
hgs
parents:
diff changeset
  3100
					}
hgs
parents:
diff changeset
  3101
				}
hgs
parents:
diff changeset
  3102
			}
hgs
parents:
diff changeset
  3103
			break;
hgs
parents:
diff changeset
  3104
		default:
hgs
parents:
diff changeset
  3105
			break;
hgs
parents:
diff changeset
  3106
		};
hgs
parents:
diff changeset
  3107
	}
hgs
parents:
diff changeset
  3108
hgs
parents:
diff changeset
  3109
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3110
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3111
}
hgs
parents:
diff changeset
  3112
hgs
parents:
diff changeset
  3113
//--------------------------------------------------
hgs
parents:
diff changeset
  3114
hgs
parents:
diff changeset
  3115
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3116
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3117
	u64_t * const value)
hgs
parents:
diff changeset
  3118
{
hgs
parents:
diff changeset
  3119
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3120
hgs
parents:
diff changeset
  3121
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3122
		m_am_tools,
hgs
parents:
diff changeset
  3123
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3124
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3125
		integer_header->get_type(),
hgs
parents:
diff changeset
  3126
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3127
hgs
parents:
diff changeset
  3128
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3129
		m_am_tools,
hgs
parents:
diff changeset
  3130
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3131
		(EAPL("get_parameter_data(u64_t *)"),
hgs
parents:
diff changeset
  3132
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3133
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3134
hgs
parents:
diff changeset
  3135
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3136
		!= eap_tlv_message_type_u64_t)
hgs
parents:
diff changeset
  3137
	{
hgs
parents:
diff changeset
  3138
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3139
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3140
	}
hgs
parents:
diff changeset
  3141
hgs
parents:
diff changeset
  3142
	const u8_t * const data = integer_header->get_value(sizeof(u64_t));
hgs
parents:
diff changeset
  3143
	if (data == 0)
hgs
parents:
diff changeset
  3144
	{
hgs
parents:
diff changeset
  3145
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3146
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3147
	}
hgs
parents:
diff changeset
  3148
hgs
parents:
diff changeset
  3149
	*value =
hgs
parents:
diff changeset
  3150
		eap_read_u64_t_network_order(
hgs
parents:
diff changeset
  3151
			data,
hgs
parents:
diff changeset
  3152
			sizeof(u64_t));
hgs
parents:
diff changeset
  3153
hgs
parents:
diff changeset
  3154
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3155
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3156
}
hgs
parents:
diff changeset
  3157
hgs
parents:
diff changeset
  3158
//--------------------------------------------------
hgs
parents:
diff changeset
  3159
hgs
parents:
diff changeset
  3160
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3161
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3162
	u32_t * const value)
hgs
parents:
diff changeset
  3163
{
hgs
parents:
diff changeset
  3164
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3165
hgs
parents:
diff changeset
  3166
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3167
		m_am_tools,
hgs
parents:
diff changeset
  3168
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3169
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3170
		integer_header->get_type(),
hgs
parents:
diff changeset
  3171
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3172
hgs
parents:
diff changeset
  3173
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3174
		m_am_tools,
hgs
parents:
diff changeset
  3175
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3176
		(EAPL("get_parameter_data(u32_t *)"),
hgs
parents:
diff changeset
  3177
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3178
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3179
hgs
parents:
diff changeset
  3180
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3181
			!= eap_tlv_message_type_boolean
hgs
parents:
diff changeset
  3182
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3183
			!= eap_tlv_message_type_eap_protocol_layer
hgs
parents:
diff changeset
  3184
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3185
			!= eap_tlv_message_type_eapol_key_802_11_authentication_mode
hgs
parents:
diff changeset
  3186
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3187
			!= eap_tlv_message_type_eapol_key_authentication_type
hgs
parents:
diff changeset
  3188
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3189
			!= eap_tlv_message_type_eapol_key_type
hgs
parents:
diff changeset
  3190
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3191
			!= eap_tlv_message_type_eapol_tkip_mic_failure_type
hgs
parents:
diff changeset
  3192
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3193
			!= eap_tlv_message_type_eapol_wlan_authentication_state
hgs
parents:
diff changeset
  3194
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3195
			!= eap_tlv_message_type_error
hgs
parents:
diff changeset
  3196
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3197
			!= eap_tlv_message_type_function
hgs
parents:
diff changeset
  3198
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3199
			!= eap_tlv_message_type_RSNA_cipher
hgs
parents:
diff changeset
  3200
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3201
			!= eap_tlv_message_type_u32_t
hgs
parents:
diff changeset
  3202
		&& static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3203
			!= eap_tlv_message_type_eap_status
hgs
parents:
diff changeset
  3204
			)
hgs
parents:
diff changeset
  3205
	{
hgs
parents:
diff changeset
  3206
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3207
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3208
	}
hgs
parents:
diff changeset
  3209
hgs
parents:
diff changeset
  3210
	const u8_t * const data = integer_header->get_value(sizeof(u32_t));
hgs
parents:
diff changeset
  3211
	if (data == 0)
hgs
parents:
diff changeset
  3212
	{
hgs
parents:
diff changeset
  3213
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3214
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3215
	}
hgs
parents:
diff changeset
  3216
hgs
parents:
diff changeset
  3217
	*value =
hgs
parents:
diff changeset
  3218
		eap_read_u32_t_network_order(
hgs
parents:
diff changeset
  3219
			data,
hgs
parents:
diff changeset
  3220
			sizeof(u32_t));
hgs
parents:
diff changeset
  3221
hgs
parents:
diff changeset
  3222
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3223
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3224
}
hgs
parents:
diff changeset
  3225
hgs
parents:
diff changeset
  3226
//--------------------------------------------------
hgs
parents:
diff changeset
  3227
hgs
parents:
diff changeset
  3228
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3229
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3230
	u16_t * const value)
hgs
parents:
diff changeset
  3231
{
hgs
parents:
diff changeset
  3232
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3233
hgs
parents:
diff changeset
  3234
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3235
		m_am_tools,
hgs
parents:
diff changeset
  3236
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3237
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3238
		integer_header->get_type(),
hgs
parents:
diff changeset
  3239
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3240
hgs
parents:
diff changeset
  3241
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3242
		m_am_tools,
hgs
parents:
diff changeset
  3243
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3244
		(EAPL("get_parameter_data(u16_t *)"),
hgs
parents:
diff changeset
  3245
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3246
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3247
hgs
parents:
diff changeset
  3248
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3249
		!= eap_tlv_message_type_u16_t)
hgs
parents:
diff changeset
  3250
	{
hgs
parents:
diff changeset
  3251
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3252
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3253
	}
hgs
parents:
diff changeset
  3254
hgs
parents:
diff changeset
  3255
	const u8_t * const data = integer_header->get_value(sizeof(u16_t));
hgs
parents:
diff changeset
  3256
	if (data == 0)
hgs
parents:
diff changeset
  3257
	{
hgs
parents:
diff changeset
  3258
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3259
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3260
	}
hgs
parents:
diff changeset
  3261
hgs
parents:
diff changeset
  3262
	*value =
hgs
parents:
diff changeset
  3263
		eap_read_u16_t_network_order(
hgs
parents:
diff changeset
  3264
			data,
hgs
parents:
diff changeset
  3265
			sizeof(u16_t));
hgs
parents:
diff changeset
  3266
hgs
parents:
diff changeset
  3267
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3268
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3269
}
hgs
parents:
diff changeset
  3270
hgs
parents:
diff changeset
  3271
//--------------------------------------------------
hgs
parents:
diff changeset
  3272
hgs
parents:
diff changeset
  3273
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3274
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3275
	u8_t * const value)
hgs
parents:
diff changeset
  3276
{
hgs
parents:
diff changeset
  3277
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3278
hgs
parents:
diff changeset
  3279
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3280
		m_am_tools,
hgs
parents:
diff changeset
  3281
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3282
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3283
		integer_header->get_type(),
hgs
parents:
diff changeset
  3284
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3285
hgs
parents:
diff changeset
  3286
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3287
		m_am_tools,
hgs
parents:
diff changeset
  3288
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3289
		(EAPL("get_parameter_data(u8_t *)"),
hgs
parents:
diff changeset
  3290
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3291
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3292
hgs
parents:
diff changeset
  3293
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3294
		!= eap_tlv_message_type_u8_t)
hgs
parents:
diff changeset
  3295
	{
hgs
parents:
diff changeset
  3296
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3297
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3298
	}
hgs
parents:
diff changeset
  3299
hgs
parents:
diff changeset
  3300
	const u8_t * const data = integer_header->get_value(sizeof(u8_t));
hgs
parents:
diff changeset
  3301
	if (data == 0)
hgs
parents:
diff changeset
  3302
	{
hgs
parents:
diff changeset
  3303
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3304
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3305
	}
hgs
parents:
diff changeset
  3306
hgs
parents:
diff changeset
  3307
	*value = *data;
hgs
parents:
diff changeset
  3308
hgs
parents:
diff changeset
  3309
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3310
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3311
}
hgs
parents:
diff changeset
  3312
hgs
parents:
diff changeset
  3313
//--------------------------------------------------
hgs
parents:
diff changeset
  3314
hgs
parents:
diff changeset
  3315
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3316
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3317
	i32_t * const value)
hgs
parents:
diff changeset
  3318
{
hgs
parents:
diff changeset
  3319
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3320
hgs
parents:
diff changeset
  3321
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3322
		m_am_tools,
hgs
parents:
diff changeset
  3323
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3324
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3325
		integer_header->get_type(),
hgs
parents:
diff changeset
  3326
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3327
hgs
parents:
diff changeset
  3328
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3329
		m_am_tools,
hgs
parents:
diff changeset
  3330
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3331
		(EAPL("get_parameter_data(u8_t *)"),
hgs
parents:
diff changeset
  3332
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3333
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3334
hgs
parents:
diff changeset
  3335
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3336
		!= eap_tlv_message_type_i32_t)
hgs
parents:
diff changeset
  3337
	{
hgs
parents:
diff changeset
  3338
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3339
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3340
	}
hgs
parents:
diff changeset
  3341
hgs
parents:
diff changeset
  3342
	const u8_t * const data = integer_header->get_value(sizeof(i32_t));
hgs
parents:
diff changeset
  3343
	if (data == 0)
hgs
parents:
diff changeset
  3344
	{
hgs
parents:
diff changeset
  3345
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3346
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3347
	}
hgs
parents:
diff changeset
  3348
hgs
parents:
diff changeset
  3349
	*value = static_cast<i32_t>(eap_read_u32_t_network_order(
hgs
parents:
diff changeset
  3350
			data,
hgs
parents:
diff changeset
  3351
			sizeof(i32_t)));
hgs
parents:
diff changeset
  3352
hgs
parents:
diff changeset
  3353
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3354
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3355
}
hgs
parents:
diff changeset
  3356
hgs
parents:
diff changeset
  3357
//--------------------------------------------------
hgs
parents:
diff changeset
  3358
hgs
parents:
diff changeset
  3359
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3360
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3361
	i16_t * const value)
hgs
parents:
diff changeset
  3362
{
hgs
parents:
diff changeset
  3363
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3364
hgs
parents:
diff changeset
  3365
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3366
		m_am_tools,
hgs
parents:
diff changeset
  3367
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3368
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3369
		integer_header->get_type(),
hgs
parents:
diff changeset
  3370
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3371
hgs
parents:
diff changeset
  3372
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3373
		m_am_tools,
hgs
parents:
diff changeset
  3374
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3375
		(EAPL("get_parameter_data(u8_t *)"),
hgs
parents:
diff changeset
  3376
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3377
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3378
hgs
parents:
diff changeset
  3379
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3380
		!= eap_tlv_message_type_i16_t)
hgs
parents:
diff changeset
  3381
	{
hgs
parents:
diff changeset
  3382
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3383
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3384
	}
hgs
parents:
diff changeset
  3385
hgs
parents:
diff changeset
  3386
	const u8_t * const data = integer_header->get_value(sizeof(i16_t));
hgs
parents:
diff changeset
  3387
	if (data == 0)
hgs
parents:
diff changeset
  3388
	{
hgs
parents:
diff changeset
  3389
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3390
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3391
	}
hgs
parents:
diff changeset
  3392
hgs
parents:
diff changeset
  3393
	*value = static_cast<i16_t>(eap_read_u16_t_network_order(
hgs
parents:
diff changeset
  3394
			data,
hgs
parents:
diff changeset
  3395
			sizeof(i16_t)));
hgs
parents:
diff changeset
  3396
hgs
parents:
diff changeset
  3397
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3398
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3399
}
hgs
parents:
diff changeset
  3400
hgs
parents:
diff changeset
  3401
//--------------------------------------------------
hgs
parents:
diff changeset
  3402
hgs
parents:
diff changeset
  3403
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3404
	const eap_tlv_header_c * const integer_header,
hgs
parents:
diff changeset
  3405
	i8_t * const value)
hgs
parents:
diff changeset
  3406
{
hgs
parents:
diff changeset
  3407
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3408
hgs
parents:
diff changeset
  3409
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3410
		m_am_tools,
hgs
parents:
diff changeset
  3411
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3412
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3413
		integer_header->get_type(),
hgs
parents:
diff changeset
  3414
		 get_type_string(static_cast<eap_tlv_message_type_e>(integer_header->get_type()))));
hgs
parents:
diff changeset
  3415
hgs
parents:
diff changeset
  3416
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3417
		m_am_tools,
hgs
parents:
diff changeset
  3418
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3419
		(EAPL("get_parameter_data(u8_t *)"),
hgs
parents:
diff changeset
  3420
		integer_header->get_header_buffer(integer_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3421
		integer_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3422
hgs
parents:
diff changeset
  3423
	if (static_cast<eap_tlv_message_type_e>(integer_header->get_type())
hgs
parents:
diff changeset
  3424
		!= eap_tlv_message_type_i8_t)
hgs
parents:
diff changeset
  3425
	{
hgs
parents:
diff changeset
  3426
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3427
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3428
	}
hgs
parents:
diff changeset
  3429
hgs
parents:
diff changeset
  3430
	const u8_t * const data = integer_header->get_value(sizeof(i8_t));
hgs
parents:
diff changeset
  3431
	if (data == 0)
hgs
parents:
diff changeset
  3432
	{
hgs
parents:
diff changeset
  3433
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3434
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3435
	}
hgs
parents:
diff changeset
  3436
hgs
parents:
diff changeset
  3437
	*value = static_cast<i8_t>(*data);
hgs
parents:
diff changeset
  3438
hgs
parents:
diff changeset
  3439
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3440
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3441
}
hgs
parents:
diff changeset
  3442
hgs
parents:
diff changeset
  3443
//--------------------------------------------------
hgs
parents:
diff changeset
  3444
hgs
parents:
diff changeset
  3445
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3446
	const eap_tlv_header_c * const function_header,
hgs
parents:
diff changeset
  3447
	eap_tlv_message_type_function_e * const function)
hgs
parents:
diff changeset
  3448
{
hgs
parents:
diff changeset
  3449
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3450
hgs
parents:
diff changeset
  3451
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3452
		m_am_tools,
hgs
parents:
diff changeset
  3453
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3454
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3455
		function_header->get_type(),
hgs
parents:
diff changeset
  3456
		 get_type_string(static_cast<eap_tlv_message_type_e>(function_header->get_type()))));
hgs
parents:
diff changeset
  3457
hgs
parents:
diff changeset
  3458
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3459
		m_am_tools,
hgs
parents:
diff changeset
  3460
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3461
		(EAPL("get_parameter_data(eap_tlv_message_type_function_e *)"),
hgs
parents:
diff changeset
  3462
		function_header->get_header_buffer(function_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3463
		function_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3464
hgs
parents:
diff changeset
  3465
	if (static_cast<eap_tlv_message_type_e>(function_header->get_type())
hgs
parents:
diff changeset
  3466
		!= eap_tlv_message_type_function)
hgs
parents:
diff changeset
  3467
	{
hgs
parents:
diff changeset
  3468
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3469
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3470
	}
hgs
parents:
diff changeset
  3471
hgs
parents:
diff changeset
  3472
	u32_t host_order(0ul);
hgs
parents:
diff changeset
  3473
hgs
parents:
diff changeset
  3474
	eap_status_e status = get_parameter_data(
hgs
parents:
diff changeset
  3475
		function_header,
hgs
parents:
diff changeset
  3476
		&host_order);
hgs
parents:
diff changeset
  3477
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3478
	{
hgs
parents:
diff changeset
  3479
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3480
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3481
	}
hgs
parents:
diff changeset
  3482
hgs
parents:
diff changeset
  3483
	*function = static_cast<eap_tlv_message_type_function_e>(host_order);
hgs
parents:
diff changeset
  3484
hgs
parents:
diff changeset
  3485
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3486
		m_am_tools,
hgs
parents:
diff changeset
  3487
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3488
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, function=%s\n"),
hgs
parents:
diff changeset
  3489
		eap_tlv_message_type_function,
hgs
parents:
diff changeset
  3490
		 get_type_string(eap_tlv_message_type_function),
hgs
parents:
diff changeset
  3491
		 get_function_string(*function)
hgs
parents:
diff changeset
  3492
		 ));
hgs
parents:
diff changeset
  3493
hgs
parents:
diff changeset
  3494
	if (*function < eap_tlv_message_type_function_none
hgs
parents:
diff changeset
  3495
		|| eap_tlv_message_type_function_illegal_value <= *function)
hgs
parents:
diff changeset
  3496
	{
hgs
parents:
diff changeset
  3497
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3498
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3499
	}
hgs
parents:
diff changeset
  3500
hgs
parents:
diff changeset
  3501
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3502
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3503
}
hgs
parents:
diff changeset
  3504
hgs
parents:
diff changeset
  3505
//--------------------------------------------------
hgs
parents:
diff changeset
  3506
hgs
parents:
diff changeset
  3507
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3508
	const eap_tlv_header_c * const network_id_header,
hgs
parents:
diff changeset
  3509
	eap_am_network_id_c * const new_network_id)
hgs
parents:
diff changeset
  3510
{
hgs
parents:
diff changeset
  3511
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3512
hgs
parents:
diff changeset
  3513
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3514
		m_am_tools,
hgs
parents:
diff changeset
  3515
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3516
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3517
		network_id_header->get_type(),
hgs
parents:
diff changeset
  3518
		 get_type_string(static_cast<eap_tlv_message_type_e>(network_id_header->get_type()))));
hgs
parents:
diff changeset
  3519
hgs
parents:
diff changeset
  3520
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3521
		m_am_tools,
hgs
parents:
diff changeset
  3522
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3523
		(EAPL("get_parameter_data(eap_am_network_id_c *)"),
hgs
parents:
diff changeset
  3524
		network_id_header->get_header_buffer(network_id_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3525
		network_id_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3526
hgs
parents:
diff changeset
  3527
	if (static_cast<eap_tlv_message_type_e>(network_id_header->get_type())
hgs
parents:
diff changeset
  3528
		!= eap_tlv_message_type_network_id)
hgs
parents:
diff changeset
  3529
	{
hgs
parents:
diff changeset
  3530
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3531
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3532
	}
hgs
parents:
diff changeset
  3533
hgs
parents:
diff changeset
  3534
	eap_process_tlv_message_data_c network_id_data(m_am_tools);
hgs
parents:
diff changeset
  3535
hgs
parents:
diff changeset
  3536
	if (network_id_data.get_is_valid() == false)
hgs
parents:
diff changeset
  3537
	{
hgs
parents:
diff changeset
  3538
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3539
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3540
	}
hgs
parents:
diff changeset
  3541
hgs
parents:
diff changeset
  3542
	eap_status_e status = network_id_data.set_message_data(
hgs
parents:
diff changeset
  3543
		network_id_header->get_value_length(),
hgs
parents:
diff changeset
  3544
		network_id_header->get_value(network_id_header->get_value_length()));
hgs
parents:
diff changeset
  3545
hgs
parents:
diff changeset
  3546
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3547
	{
hgs
parents:
diff changeset
  3548
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3549
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3550
	}
hgs
parents:
diff changeset
  3551
hgs
parents:
diff changeset
  3552
	eap_array_c<eap_tlv_header_c> network_id_members(m_am_tools);
hgs
parents:
diff changeset
  3553
hgs
parents:
diff changeset
  3554
	status = network_id_data.parse_message_data(&network_id_members);
hgs
parents:
diff changeset
  3555
hgs
parents:
diff changeset
  3556
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3557
	{
hgs
parents:
diff changeset
  3558
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3559
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3560
	}
hgs
parents:
diff changeset
  3561
hgs
parents:
diff changeset
  3562
hgs
parents:
diff changeset
  3563
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  3564
hgs
parents:
diff changeset
  3565
	eap_variable_data_c source_id(
hgs
parents:
diff changeset
  3566
		m_am_tools);
hgs
parents:
diff changeset
  3567
hgs
parents:
diff changeset
  3568
	if (source_id.get_is_valid() == false)
hgs
parents:
diff changeset
  3569
	{
hgs
parents:
diff changeset
  3570
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3571
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3572
	}
hgs
parents:
diff changeset
  3573
hgs
parents:
diff changeset
  3574
	{
hgs
parents:
diff changeset
  3575
		const eap_tlv_header_c * const source_id_header = network_id_members.get_object(member_index);
hgs
parents:
diff changeset
  3576
		if (source_id_header == 0)
hgs
parents:
diff changeset
  3577
		{
hgs
parents:
diff changeset
  3578
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3579
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3580
		}
hgs
parents:
diff changeset
  3581
hgs
parents:
diff changeset
  3582
		status = network_id_data.get_parameter_data(source_id_header, &source_id);
hgs
parents:
diff changeset
  3583
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3584
		{
hgs
parents:
diff changeset
  3585
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3586
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3587
		}
hgs
parents:
diff changeset
  3588
	}
hgs
parents:
diff changeset
  3589
hgs
parents:
diff changeset
  3590
hgs
parents:
diff changeset
  3591
	++member_index;
hgs
parents:
diff changeset
  3592
hgs
parents:
diff changeset
  3593
	eap_variable_data_c destination_id(
hgs
parents:
diff changeset
  3594
		m_am_tools);
hgs
parents:
diff changeset
  3595
hgs
parents:
diff changeset
  3596
	if (destination_id.get_is_valid() == false)
hgs
parents:
diff changeset
  3597
	{
hgs
parents:
diff changeset
  3598
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3599
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3600
	}
hgs
parents:
diff changeset
  3601
hgs
parents:
diff changeset
  3602
	{
hgs
parents:
diff changeset
  3603
		const eap_tlv_header_c * const destination_id_header = network_id_members.get_object(member_index);
hgs
parents:
diff changeset
  3604
		if (destination_id_header == 0)
hgs
parents:
diff changeset
  3605
		{
hgs
parents:
diff changeset
  3606
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3607
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3608
		}
hgs
parents:
diff changeset
  3609
hgs
parents:
diff changeset
  3610
		status = network_id_data.get_parameter_data(destination_id_header, &destination_id);
hgs
parents:
diff changeset
  3611
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3612
		{
hgs
parents:
diff changeset
  3613
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3614
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3615
		}
hgs
parents:
diff changeset
  3616
	}
hgs
parents:
diff changeset
  3617
hgs
parents:
diff changeset
  3618
hgs
parents:
diff changeset
  3619
	++member_index;
hgs
parents:
diff changeset
  3620
hgs
parents:
diff changeset
  3621
	u16_t type_value(0ul);
hgs
parents:
diff changeset
  3622
hgs
parents:
diff changeset
  3623
	{
hgs
parents:
diff changeset
  3624
		const eap_tlv_header_c * const type_header = network_id_members.get_object(member_index);
hgs
parents:
diff changeset
  3625
		if (type_header == 0)
hgs
parents:
diff changeset
  3626
		{
hgs
parents:
diff changeset
  3627
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3628
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3629
		}
hgs
parents:
diff changeset
  3630
hgs
parents:
diff changeset
  3631
		status = network_id_data.get_parameter_data(type_header, &type_value);
hgs
parents:
diff changeset
  3632
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3633
		{
hgs
parents:
diff changeset
  3634
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3635
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3636
		}
hgs
parents:
diff changeset
  3637
	}
hgs
parents:
diff changeset
  3638
hgs
parents:
diff changeset
  3639
hgs
parents:
diff changeset
  3640
	status = new_network_id->set_copy_of_am_network_id(
hgs
parents:
diff changeset
  3641
		source_id.get_data(),
hgs
parents:
diff changeset
  3642
		source_id.get_data_length(),
hgs
parents:
diff changeset
  3643
		destination_id.get_data(),
hgs
parents:
diff changeset
  3644
		destination_id.get_data_length(),
hgs
parents:
diff changeset
  3645
		type_value);
hgs
parents:
diff changeset
  3646
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3647
	{
hgs
parents:
diff changeset
  3648
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3649
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3650
	}
hgs
parents:
diff changeset
  3651
hgs
parents:
diff changeset
  3652
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3653
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3654
}
hgs
parents:
diff changeset
  3655
hgs
parents:
diff changeset
  3656
//--------------------------------------------------
hgs
parents:
diff changeset
  3657
hgs
parents:
diff changeset
  3658
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3659
	const eap_tlv_header_c * const variable_data_header,
hgs
parents:
diff changeset
  3660
	eap_variable_data_c * const variable_data)
hgs
parents:
diff changeset
  3661
{
hgs
parents:
diff changeset
  3662
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3663
hgs
parents:
diff changeset
  3664
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3665
		m_am_tools,
hgs
parents:
diff changeset
  3666
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3667
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3668
		variable_data_header->get_type(),
hgs
parents:
diff changeset
  3669
		 get_type_string(static_cast<eap_tlv_message_type_e>(variable_data_header->get_type()))));
hgs
parents:
diff changeset
  3670
hgs
parents:
diff changeset
  3671
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3672
		m_am_tools,
hgs
parents:
diff changeset
  3673
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3674
		(EAPL("get_parameter_data(eap_variable_data_c *)"),
hgs
parents:
diff changeset
  3675
		variable_data_header->get_header_buffer(variable_data_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3676
		variable_data_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3677
hgs
parents:
diff changeset
  3678
	if (variable_data == 0
hgs
parents:
diff changeset
  3679
		|| variable_data->get_is_valid() == false)
hgs
parents:
diff changeset
  3680
	{
hgs
parents:
diff changeset
  3681
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3682
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3683
	}
hgs
parents:
diff changeset
  3684
hgs
parents:
diff changeset
  3685
	if (static_cast<eap_tlv_message_type_e>(variable_data_header->get_type())
hgs
parents:
diff changeset
  3686
		!= eap_tlv_message_type_variable_data)
hgs
parents:
diff changeset
  3687
	{
hgs
parents:
diff changeset
  3688
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3689
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3690
	}
hgs
parents:
diff changeset
  3691
hgs
parents:
diff changeset
  3692
	eap_status_e status = variable_data->set_copy_of_buffer(
hgs
parents:
diff changeset
  3693
		variable_data_header->get_value(variable_data_header->get_value_length()),
hgs
parents:
diff changeset
  3694
		variable_data_header->get_value_length());
hgs
parents:
diff changeset
  3695
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3696
	{
hgs
parents:
diff changeset
  3697
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3698
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3699
	}
hgs
parents:
diff changeset
  3700
hgs
parents:
diff changeset
  3701
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3702
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3703
}
hgs
parents:
diff changeset
  3704
hgs
parents:
diff changeset
  3705
//--------------------------------------------------
hgs
parents:
diff changeset
  3706
hgs
parents:
diff changeset
  3707
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3708
	const eap_tlv_header_c * const session_key_header,
hgs
parents:
diff changeset
  3709
		eapol_session_key_c * const session_key)
hgs
parents:
diff changeset
  3710
{
hgs
parents:
diff changeset
  3711
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3712
hgs
parents:
diff changeset
  3713
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3714
		m_am_tools,
hgs
parents:
diff changeset
  3715
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3716
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3717
		session_key_header->get_type(),
hgs
parents:
diff changeset
  3718
		 get_type_string(static_cast<eap_tlv_message_type_e>(session_key_header->get_type()))));
hgs
parents:
diff changeset
  3719
hgs
parents:
diff changeset
  3720
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3721
		m_am_tools,
hgs
parents:
diff changeset
  3722
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3723
		(EAPL("get_parameter_data(eapol_session_key_c *)"),
hgs
parents:
diff changeset
  3724
		session_key_header->get_header_buffer(session_key_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3725
		session_key_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3726
hgs
parents:
diff changeset
  3727
	if (static_cast<eap_tlv_message_type_e>(session_key_header->get_type())
hgs
parents:
diff changeset
  3728
		!= eap_tlv_message_type_session_key)
hgs
parents:
diff changeset
  3729
	{
hgs
parents:
diff changeset
  3730
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3731
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3732
	}
hgs
parents:
diff changeset
  3733
hgs
parents:
diff changeset
  3734
	eap_process_tlv_message_data_c session_key_data(m_am_tools);
hgs
parents:
diff changeset
  3735
hgs
parents:
diff changeset
  3736
	if (session_key_data.get_is_valid() == false)
hgs
parents:
diff changeset
  3737
	{
hgs
parents:
diff changeset
  3738
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3739
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3740
	}
hgs
parents:
diff changeset
  3741
hgs
parents:
diff changeset
  3742
	eap_status_e status = session_key_data.set_message_data(
hgs
parents:
diff changeset
  3743
		session_key_header->get_value_length(),
hgs
parents:
diff changeset
  3744
		session_key_header->get_value(session_key_header->get_value_length()));
hgs
parents:
diff changeset
  3745
hgs
parents:
diff changeset
  3746
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3747
	{
hgs
parents:
diff changeset
  3748
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3749
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3750
	}
hgs
parents:
diff changeset
  3751
hgs
parents:
diff changeset
  3752
	eap_array_c<eap_tlv_header_c> session_key_members(m_am_tools);
hgs
parents:
diff changeset
  3753
hgs
parents:
diff changeset
  3754
	status = session_key_data.parse_message_data(&session_key_members);
hgs
parents:
diff changeset
  3755
hgs
parents:
diff changeset
  3756
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3757
	{
hgs
parents:
diff changeset
  3758
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3759
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3760
	}
hgs
parents:
diff changeset
  3761
hgs
parents:
diff changeset
  3762
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  3763
hgs
parents:
diff changeset
  3764
	{
hgs
parents:
diff changeset
  3765
		const eap_tlv_header_c * const a_session_key_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3766
		if (a_session_key_header == 0)
hgs
parents:
diff changeset
  3767
		{
hgs
parents:
diff changeset
  3768
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3769
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3770
		}
hgs
parents:
diff changeset
  3771
hgs
parents:
diff changeset
  3772
		eap_variable_data_c key(
hgs
parents:
diff changeset
  3773
			m_am_tools);
hgs
parents:
diff changeset
  3774
hgs
parents:
diff changeset
  3775
		if (key.get_is_valid() == false)
hgs
parents:
diff changeset
  3776
		{
hgs
parents:
diff changeset
  3777
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3778
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3779
		}
hgs
parents:
diff changeset
  3780
hgs
parents:
diff changeset
  3781
		status = session_key_data.get_parameter_data(a_session_key_header, &key);
hgs
parents:
diff changeset
  3782
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3783
		{
hgs
parents:
diff changeset
  3784
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3785
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3786
		}
hgs
parents:
diff changeset
  3787
hgs
parents:
diff changeset
  3788
		status = session_key->set_key(&key);
hgs
parents:
diff changeset
  3789
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3790
		{
hgs
parents:
diff changeset
  3791
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3792
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3793
		}
hgs
parents:
diff changeset
  3794
	}
hgs
parents:
diff changeset
  3795
hgs
parents:
diff changeset
  3796
	++member_index;
hgs
parents:
diff changeset
  3797
hgs
parents:
diff changeset
  3798
	{
hgs
parents:
diff changeset
  3799
		const eap_tlv_header_c * const sequence_number_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3800
		if (sequence_number_header == 0)
hgs
parents:
diff changeset
  3801
		{
hgs
parents:
diff changeset
  3802
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3803
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3804
		}
hgs
parents:
diff changeset
  3805
hgs
parents:
diff changeset
  3806
		eap_variable_data_c sequence_number(
hgs
parents:
diff changeset
  3807
			m_am_tools);
hgs
parents:
diff changeset
  3808
hgs
parents:
diff changeset
  3809
		if (sequence_number.get_is_valid() == false)
hgs
parents:
diff changeset
  3810
		{
hgs
parents:
diff changeset
  3811
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3812
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3813
		}
hgs
parents:
diff changeset
  3814
hgs
parents:
diff changeset
  3815
		status = session_key_data.get_parameter_data(sequence_number_header, &sequence_number);
hgs
parents:
diff changeset
  3816
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3817
		{
hgs
parents:
diff changeset
  3818
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3819
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3820
		}
hgs
parents:
diff changeset
  3821
hgs
parents:
diff changeset
  3822
		status = session_key->set_sequence_number(&sequence_number);
hgs
parents:
diff changeset
  3823
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3824
		{
hgs
parents:
diff changeset
  3825
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3826
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3827
		}
hgs
parents:
diff changeset
  3828
	}
hgs
parents:
diff changeset
  3829
hgs
parents:
diff changeset
  3830
	++member_index;
hgs
parents:
diff changeset
  3831
hgs
parents:
diff changeset
  3832
	{
hgs
parents:
diff changeset
  3833
		const eap_tlv_header_c * const key_type_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3834
		if (key_type_header == 0)
hgs
parents:
diff changeset
  3835
		{
hgs
parents:
diff changeset
  3836
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3837
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3838
		}
hgs
parents:
diff changeset
  3839
hgs
parents:
diff changeset
  3840
		u32_t value(0ul);
hgs
parents:
diff changeset
  3841
hgs
parents:
diff changeset
  3842
		status = session_key_data.get_parameter_data(key_type_header, &value);
hgs
parents:
diff changeset
  3843
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3844
		{
hgs
parents:
diff changeset
  3845
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3846
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3847
		}
hgs
parents:
diff changeset
  3848
hgs
parents:
diff changeset
  3849
		session_key->set_key_type(static_cast<eapol_key_type_e>(value));
hgs
parents:
diff changeset
  3850
	}
hgs
parents:
diff changeset
  3851
hgs
parents:
diff changeset
  3852
	++member_index;
hgs
parents:
diff changeset
  3853
hgs
parents:
diff changeset
  3854
	{
hgs
parents:
diff changeset
  3855
		const eap_tlv_header_c * const key_index_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3856
		if (key_index_header == 0)
hgs
parents:
diff changeset
  3857
		{
hgs
parents:
diff changeset
  3858
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3859
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3860
		}
hgs
parents:
diff changeset
  3861
hgs
parents:
diff changeset
  3862
		u32_t value(0ul);
hgs
parents:
diff changeset
  3863
hgs
parents:
diff changeset
  3864
		status = session_key_data.get_parameter_data(key_index_header, &value);
hgs
parents:
diff changeset
  3865
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3866
		{
hgs
parents:
diff changeset
  3867
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3868
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3869
		}
hgs
parents:
diff changeset
  3870
hgs
parents:
diff changeset
  3871
		session_key->set_key_index(value);
hgs
parents:
diff changeset
  3872
	}
hgs
parents:
diff changeset
  3873
hgs
parents:
diff changeset
  3874
	++member_index;
hgs
parents:
diff changeset
  3875
hgs
parents:
diff changeset
  3876
	{
hgs
parents:
diff changeset
  3877
		const eap_tlv_header_c * const key_tx_bit_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3878
		if (key_tx_bit_header == 0)
hgs
parents:
diff changeset
  3879
		{
hgs
parents:
diff changeset
  3880
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3881
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3882
		}
hgs
parents:
diff changeset
  3883
hgs
parents:
diff changeset
  3884
		u32_t value(0ul);
hgs
parents:
diff changeset
  3885
hgs
parents:
diff changeset
  3886
		status = session_key_data.get_parameter_data(key_tx_bit_header, &value);
hgs
parents:
diff changeset
  3887
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3888
		{
hgs
parents:
diff changeset
  3889
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3890
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3891
		}
hgs
parents:
diff changeset
  3892
hgs
parents:
diff changeset
  3893
		session_key->set_key_tx_bit((value == 0) ? false : true);
hgs
parents:
diff changeset
  3894
	}
hgs
parents:
diff changeset
  3895
hgs
parents:
diff changeset
  3896
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3897
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  3898
}
hgs
parents:
diff changeset
  3899
hgs
parents:
diff changeset
  3900
//--------------------------------------------------
hgs
parents:
diff changeset
  3901
hgs
parents:
diff changeset
  3902
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  3903
	const eap_tlv_header_c * const state_header,
hgs
parents:
diff changeset
  3904
	eap_state_notification_c * * const state)
hgs
parents:
diff changeset
  3905
hgs
parents:
diff changeset
  3906
{
hgs
parents:
diff changeset
  3907
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3908
hgs
parents:
diff changeset
  3909
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  3910
		m_am_tools,
hgs
parents:
diff changeset
  3911
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3912
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  3913
		state_header->get_type(),
hgs
parents:
diff changeset
  3914
		 get_type_string(static_cast<eap_tlv_message_type_e>(state_header->get_type()))));
hgs
parents:
diff changeset
  3915
hgs
parents:
diff changeset
  3916
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  3917
		m_am_tools,
hgs
parents:
diff changeset
  3918
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  3919
		(EAPL("get_parameter_data(eap_state_notification_c *)"),
hgs
parents:
diff changeset
  3920
		state_header->get_header_buffer(state_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  3921
		state_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  3922
hgs
parents:
diff changeset
  3923
	if (static_cast<eap_tlv_message_type_e>(state_header->get_type())
hgs
parents:
diff changeset
  3924
		!= eap_tlv_message_type_eap_state_notification)
hgs
parents:
diff changeset
  3925
	{
hgs
parents:
diff changeset
  3926
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3927
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  3928
	}
hgs
parents:
diff changeset
  3929
hgs
parents:
diff changeset
  3930
	eap_process_tlv_message_data_c session_key_data(m_am_tools);
hgs
parents:
diff changeset
  3931
hgs
parents:
diff changeset
  3932
	if (session_key_data.get_is_valid() == false)
hgs
parents:
diff changeset
  3933
	{
hgs
parents:
diff changeset
  3934
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3935
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  3936
	}
hgs
parents:
diff changeset
  3937
hgs
parents:
diff changeset
  3938
	eap_status_e status = session_key_data.set_message_data(
hgs
parents:
diff changeset
  3939
		state_header->get_value_length(),
hgs
parents:
diff changeset
  3940
		state_header->get_value(state_header->get_value_length()));
hgs
parents:
diff changeset
  3941
hgs
parents:
diff changeset
  3942
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3943
	{
hgs
parents:
diff changeset
  3944
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3945
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3946
	}
hgs
parents:
diff changeset
  3947
hgs
parents:
diff changeset
  3948
	eap_array_c<eap_tlv_header_c> session_key_members(m_am_tools);
hgs
parents:
diff changeset
  3949
hgs
parents:
diff changeset
  3950
	status = session_key_data.parse_message_data(&session_key_members);
hgs
parents:
diff changeset
  3951
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  3952
	{
hgs
parents:
diff changeset
  3953
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3954
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3955
	}
hgs
parents:
diff changeset
  3956
hgs
parents:
diff changeset
  3957
hgs
parents:
diff changeset
  3958
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  3959
hgs
parents:
diff changeset
  3960
	eap_am_network_id_c send_network_id(m_am_tools);
hgs
parents:
diff changeset
  3961
hgs
parents:
diff changeset
  3962
	{
hgs
parents:
diff changeset
  3963
		const eap_tlv_header_c * const send_network_id_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3964
		if (send_network_id_header == 0)
hgs
parents:
diff changeset
  3965
		{
hgs
parents:
diff changeset
  3966
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3967
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3968
		}
hgs
parents:
diff changeset
  3969
hgs
parents:
diff changeset
  3970
		status = get_parameter_data(send_network_id_header, &send_network_id);
hgs
parents:
diff changeset
  3971
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3972
		{
hgs
parents:
diff changeset
  3973
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3974
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3975
		}
hgs
parents:
diff changeset
  3976
	}
hgs
parents:
diff changeset
  3977
hgs
parents:
diff changeset
  3978
hgs
parents:
diff changeset
  3979
	++member_index;
hgs
parents:
diff changeset
  3980
hgs
parents:
diff changeset
  3981
	eap_protocol_layer_e protocol_layer(eap_protocol_layer_none);
hgs
parents:
diff changeset
  3982
hgs
parents:
diff changeset
  3983
	{
hgs
parents:
diff changeset
  3984
		const eap_tlv_header_c * const protocol_layer_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  3985
		if (protocol_layer_header == 0)
hgs
parents:
diff changeset
  3986
		{
hgs
parents:
diff changeset
  3987
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3988
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  3989
		}
hgs
parents:
diff changeset
  3990
hgs
parents:
diff changeset
  3991
		u32_t value(0ul);
hgs
parents:
diff changeset
  3992
hgs
parents:
diff changeset
  3993
		status = session_key_data.get_parameter_data(protocol_layer_header, &value);
hgs
parents:
diff changeset
  3994
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  3995
		{
hgs
parents:
diff changeset
  3996
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  3997
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  3998
		}
hgs
parents:
diff changeset
  3999
hgs
parents:
diff changeset
  4000
		protocol_layer = static_cast<eap_protocol_layer_e>(value);
hgs
parents:
diff changeset
  4001
	}
hgs
parents:
diff changeset
  4002
hgs
parents:
diff changeset
  4003
hgs
parents:
diff changeset
  4004
	++member_index;
hgs
parents:
diff changeset
  4005
hgs
parents:
diff changeset
  4006
	u32_t protocol(0ul);
hgs
parents:
diff changeset
  4007
hgs
parents:
diff changeset
  4008
	{
hgs
parents:
diff changeset
  4009
		const eap_tlv_header_c * const protocol_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  4010
		if (protocol_header == 0)
hgs
parents:
diff changeset
  4011
		{
hgs
parents:
diff changeset
  4012
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4013
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  4014
		}
hgs
parents:
diff changeset
  4015
hgs
parents:
diff changeset
  4016
		status = session_key_data.get_parameter_data(protocol_header, &protocol);
hgs
parents:
diff changeset
  4017
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4018
		{
hgs
parents:
diff changeset
  4019
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4020
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4021
		}
hgs
parents:
diff changeset
  4022
	}
hgs
parents:
diff changeset
  4023
hgs
parents:
diff changeset
  4024
hgs
parents:
diff changeset
  4025
	++member_index;
hgs
parents:
diff changeset
  4026
hgs
parents:
diff changeset
  4027
	eap_type_value_e eap_type(eap_type_none);
hgs
parents:
diff changeset
  4028
hgs
parents:
diff changeset
  4029
	{
hgs
parents:
diff changeset
  4030
		const eap_tlv_header_c * const eap_type_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  4031
		if (eap_type_header == 0)
hgs
parents:
diff changeset
  4032
		{
hgs
parents:
diff changeset
  4033
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4034
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  4035
		}
hgs
parents:
diff changeset
  4036
hgs
parents:
diff changeset
  4037
		status = session_key_data.get_parameter_data(eap_type_header, &eap_type);
hgs
parents:
diff changeset
  4038
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4039
		{
hgs
parents:
diff changeset
  4040
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4041
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4042
		}
hgs
parents:
diff changeset
  4043
	}
hgs
parents:
diff changeset
  4044
hgs
parents:
diff changeset
  4045
hgs
parents:
diff changeset
  4046
	++member_index;
hgs
parents:
diff changeset
  4047
hgs
parents:
diff changeset
  4048
	u32_t current_state(0ul);
hgs
parents:
diff changeset
  4049
hgs
parents:
diff changeset
  4050
	{
hgs
parents:
diff changeset
  4051
		const eap_tlv_header_c * const current_state_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  4052
		if (current_state_header == 0)
hgs
parents:
diff changeset
  4053
		{
hgs
parents:
diff changeset
  4054
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4055
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  4056
		}
hgs
parents:
diff changeset
  4057
hgs
parents:
diff changeset
  4058
		status = session_key_data.get_parameter_data(current_state_header, &current_state);
hgs
parents:
diff changeset
  4059
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4060
		{
hgs
parents:
diff changeset
  4061
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4062
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4063
		}
hgs
parents:
diff changeset
  4064
	}
hgs
parents:
diff changeset
  4065
hgs
parents:
diff changeset
  4066
hgs
parents:
diff changeset
  4067
	++member_index;
hgs
parents:
diff changeset
  4068
hgs
parents:
diff changeset
  4069
	bool is_client(true);
hgs
parents:
diff changeset
  4070
hgs
parents:
diff changeset
  4071
	{
hgs
parents:
diff changeset
  4072
		const eap_tlv_header_c * const is_client_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  4073
		if (is_client_header == 0)
hgs
parents:
diff changeset
  4074
		{
hgs
parents:
diff changeset
  4075
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4076
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  4077
		}
hgs
parents:
diff changeset
  4078
hgs
parents:
diff changeset
  4079
		u32_t value(0ul);
hgs
parents:
diff changeset
  4080
hgs
parents:
diff changeset
  4081
		status = session_key_data.get_parameter_data(is_client_header, &value);
hgs
parents:
diff changeset
  4082
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4083
		{
hgs
parents:
diff changeset
  4084
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4085
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4086
		}
hgs
parents:
diff changeset
  4087
hgs
parents:
diff changeset
  4088
		is_client = (value == 0ul) ? false : true;
hgs
parents:
diff changeset
  4089
	}
hgs
parents:
diff changeset
  4090
hgs
parents:
diff changeset
  4091
hgs
parents:
diff changeset
  4092
	++member_index;
hgs
parents:
diff changeset
  4093
hgs
parents:
diff changeset
  4094
	eap_status_e authentication_error(eap_status_ok);
hgs
parents:
diff changeset
  4095
hgs
parents:
diff changeset
  4096
	{
hgs
parents:
diff changeset
  4097
		const eap_tlv_header_c * const authentication_error_header = session_key_members.get_object(member_index);
hgs
parents:
diff changeset
  4098
		if (authentication_error_header == 0)
hgs
parents:
diff changeset
  4099
		{
hgs
parents:
diff changeset
  4100
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4101
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  4102
		}
hgs
parents:
diff changeset
  4103
hgs
parents:
diff changeset
  4104
		u32_t value(0ul);
hgs
parents:
diff changeset
  4105
hgs
parents:
diff changeset
  4106
		status = session_key_data.get_parameter_data(authentication_error_header, &value);
hgs
parents:
diff changeset
  4107
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4108
		{
hgs
parents:
diff changeset
  4109
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4110
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4111
		}
hgs
parents:
diff changeset
  4112
hgs
parents:
diff changeset
  4113
		authentication_error = static_cast<eap_status_e>(value);
hgs
parents:
diff changeset
  4114
	}
hgs
parents:
diff changeset
  4115
hgs
parents:
diff changeset
  4116
	if (eap_type != eap_type_none)
hgs
parents:
diff changeset
  4117
	{
hgs
parents:
diff changeset
  4118
		*state = new eap_state_notification_c(
hgs
parents:
diff changeset
  4119
			m_am_tools,
hgs
parents:
diff changeset
  4120
			&send_network_id,
hgs
parents:
diff changeset
  4121
			is_client,
hgs
parents:
diff changeset
  4122
			eap_state_notification_eap,
hgs
parents:
diff changeset
  4123
			protocol_layer,
hgs
parents:
diff changeset
  4124
			eap_type,
hgs
parents:
diff changeset
  4125
			current_state,
hgs
parents:
diff changeset
  4126
			current_state,
hgs
parents:
diff changeset
  4127
			0ul,
hgs
parents:
diff changeset
  4128
			false);
hgs
parents:
diff changeset
  4129
	}
hgs
parents:
diff changeset
  4130
	else
hgs
parents:
diff changeset
  4131
	{
hgs
parents:
diff changeset
  4132
hgs
parents:
diff changeset
  4133
hgs
parents:
diff changeset
  4134
		*state = new eap_state_notification_c(
hgs
parents:
diff changeset
  4135
			m_am_tools,
hgs
parents:
diff changeset
  4136
			&send_network_id,
hgs
parents:
diff changeset
  4137
			is_client,
hgs
parents:
diff changeset
  4138
			eap_state_notification_generic,
hgs
parents:
diff changeset
  4139
			protocol_layer,
hgs
parents:
diff changeset
  4140
			protocol,
hgs
parents:
diff changeset
  4141
			current_state,
hgs
parents:
diff changeset
  4142
			current_state,
hgs
parents:
diff changeset
  4143
			0ul,
hgs
parents:
diff changeset
  4144
			false);
hgs
parents:
diff changeset
  4145
	}
hgs
parents:
diff changeset
  4146
hgs
parents:
diff changeset
  4147
	if ((*state) == 0)
hgs
parents:
diff changeset
  4148
	{
hgs
parents:
diff changeset
  4149
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4150
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  4151
	}
hgs
parents:
diff changeset
  4152
hgs
parents:
diff changeset
  4153
	(*state)->set_authentication_error(authentication_error);
hgs
parents:
diff changeset
  4154
hgs
parents:
diff changeset
  4155
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4156
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  4157
}
hgs
parents:
diff changeset
  4158
hgs
parents:
diff changeset
  4159
//--------------------------------------------------
hgs
parents:
diff changeset
  4160
hgs
parents:
diff changeset
  4161
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  4162
	const eap_tlv_header_c * const eap_type_header,
hgs
parents:
diff changeset
  4163
	eap_type_value_e * const eap_type)
hgs
parents:
diff changeset
  4164
{
hgs
parents:
diff changeset
  4165
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4166
hgs
parents:
diff changeset
  4167
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4168
		m_am_tools,
hgs
parents:
diff changeset
  4169
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4170
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  4171
		eap_type_header->get_type(),
hgs
parents:
diff changeset
  4172
		 get_type_string(static_cast<eap_tlv_message_type_e>(eap_type_header->get_type()))));
hgs
parents:
diff changeset
  4173
hgs
parents:
diff changeset
  4174
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  4175
		m_am_tools,
hgs
parents:
diff changeset
  4176
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4177
		(EAPL("get_parameter_data(eap_type_value_e *)"),
hgs
parents:
diff changeset
  4178
		eap_type_header->get_header_buffer(eap_type_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  4179
		eap_type_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  4180
hgs
parents:
diff changeset
  4181
	if (static_cast<eap_tlv_message_type_e>(eap_type_header->get_type())
hgs
parents:
diff changeset
  4182
		!= eap_tlv_message_type_eap_type)
hgs
parents:
diff changeset
  4183
	{
hgs
parents:
diff changeset
  4184
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4185
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  4186
	}
hgs
parents:
diff changeset
  4187
hgs
parents:
diff changeset
  4188
	eap_status_e status = eap_expanded_type_c::read_type(
hgs
parents:
diff changeset
  4189
		m_am_tools,
hgs
parents:
diff changeset
  4190
		0ul,
hgs
parents:
diff changeset
  4191
		eap_type_header->get_value(eap_type_header->get_value_length()),
hgs
parents:
diff changeset
  4192
		eap_type_header->get_value_length(),
hgs
parents:
diff changeset
  4193
		eap_type);
hgs
parents:
diff changeset
  4194
hgs
parents:
diff changeset
  4195
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4196
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4197
}
hgs
parents:
diff changeset
  4198
hgs
parents:
diff changeset
  4199
//--------------------------------------------------
hgs
parents:
diff changeset
  4200
hgs
parents:
diff changeset
  4201
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  4202
	const eap_tlv_header_c * const settings_header,
hgs
parents:
diff changeset
  4203
	eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
  4204
{
hgs
parents:
diff changeset
  4205
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4206
hgs
parents:
diff changeset
  4207
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4208
		m_am_tools,
hgs
parents:
diff changeset
  4209
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4210
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  4211
		settings_header->get_type(),
hgs
parents:
diff changeset
  4212
		 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4213
hgs
parents:
diff changeset
  4214
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  4215
		m_am_tools,
hgs
parents:
diff changeset
  4216
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4217
		(EAPL("get_parameter_data(eap_method_settings_c *)"),
hgs
parents:
diff changeset
  4218
		settings_header->get_header_buffer(settings_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  4219
		settings_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  4220
hgs
parents:
diff changeset
  4221
	if (static_cast<eap_tlv_message_type_e>(settings_header->get_type())
hgs
parents:
diff changeset
  4222
		!= eap_tlv_message_type_eap_method_settings)
hgs
parents:
diff changeset
  4223
	{
hgs
parents:
diff changeset
  4224
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4225
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  4226
	}
hgs
parents:
diff changeset
  4227
hgs
parents:
diff changeset
  4228
	eap_process_tlv_message_data_c settings_data(m_am_tools);
hgs
parents:
diff changeset
  4229
hgs
parents:
diff changeset
  4230
	if (settings_data.get_is_valid() == false)
hgs
parents:
diff changeset
  4231
	{
hgs
parents:
diff changeset
  4232
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4233
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  4234
	}
hgs
parents:
diff changeset
  4235
hgs
parents:
diff changeset
  4236
	eap_status_e status = settings_data.set_message_data(
hgs
parents:
diff changeset
  4237
		settings_header->get_value_length(),
hgs
parents:
diff changeset
  4238
		settings_header->get_value(settings_header->get_value_length()));
hgs
parents:
diff changeset
  4239
hgs
parents:
diff changeset
  4240
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4241
	{
hgs
parents:
diff changeset
  4242
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4243
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4244
	}
hgs
parents:
diff changeset
  4245
hgs
parents:
diff changeset
  4246
	eap_array_c<eap_tlv_header_c> settings_members(m_am_tools);
hgs
parents:
diff changeset
  4247
hgs
parents:
diff changeset
  4248
	status = settings_data.parse_message_data(&settings_members);
hgs
parents:
diff changeset
  4249
hgs
parents:
diff changeset
  4250
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4251
	{
hgs
parents:
diff changeset
  4252
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4253
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4254
	}
hgs
parents:
diff changeset
  4255
hgs
parents:
diff changeset
  4256
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  4257
hgs
parents:
diff changeset
  4258
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  4259
hgs
parents:
diff changeset
  4260
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4261
		m_am_tools,
hgs
parents:
diff changeset
  4262
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4263
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_completion_status\n"),
hgs
parents:
diff changeset
  4264
		settings_header->get_type(),
hgs
parents:
diff changeset
  4265
		 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4266
hgs
parents:
diff changeset
  4267
	status = read_parameter_data(
hgs
parents:
diff changeset
  4268
		&settings_members,
hgs
parents:
diff changeset
  4269
		member_index,
hgs
parents:
diff changeset
  4270
		eap_tlv_message_type_eap_status,
hgs
parents:
diff changeset
  4271
		&(internal_settings->m_completion_status));
hgs
parents:
diff changeset
  4272
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4273
	{
hgs
parents:
diff changeset
  4274
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4275
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4276
	}
hgs
parents:
diff changeset
  4277
hgs
parents:
diff changeset
  4278
	++member_index;
hgs
parents:
diff changeset
  4279
hgs
parents:
diff changeset
  4280
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4281
		m_am_tools,
hgs
parents:
diff changeset
  4282
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4283
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_EAPType\n"),
hgs
parents:
diff changeset
  4284
		settings_header->get_type(),
hgs
parents:
diff changeset
  4285
		 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4286
hgs
parents:
diff changeset
  4287
	status = read_parameter_data(
hgs
parents:
diff changeset
  4288
		&settings_members,
hgs
parents:
diff changeset
  4289
		member_index,
hgs
parents:
diff changeset
  4290
		&(internal_settings->m_EAPType));
hgs
parents:
diff changeset
  4291
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4292
	{
hgs
parents:
diff changeset
  4293
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4294
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4295
	}
hgs
parents:
diff changeset
  4296
hgs
parents:
diff changeset
  4297
	++member_index;
hgs
parents:
diff changeset
  4298
hgs
parents:
diff changeset
  4299
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4300
		m_am_tools,
hgs
parents:
diff changeset
  4301
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4302
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_IndexType\n"),
hgs
parents:
diff changeset
  4303
		settings_header->get_type(),
hgs
parents:
diff changeset
  4304
		 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4305
hgs
parents:
diff changeset
  4306
	status = read_parameter_data(
hgs
parents:
diff changeset
  4307
		&settings_members,
hgs
parents:
diff changeset
  4308
		member_index,
hgs
parents:
diff changeset
  4309
		&(internal_settings->m_IndexType));
hgs
parents:
diff changeset
  4310
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4311
	{
hgs
parents:
diff changeset
  4312
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4313
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4314
	}
hgs
parents:
diff changeset
  4315
hgs
parents:
diff changeset
  4316
	++member_index;
hgs
parents:
diff changeset
  4317
hgs
parents:
diff changeset
  4318
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4319
		m_am_tools,
hgs
parents:
diff changeset
  4320
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4321
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_Index\n"),
hgs
parents:
diff changeset
  4322
		settings_header->get_type(),
hgs
parents:
diff changeset
  4323
		 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4324
hgs
parents:
diff changeset
  4325
	status = read_parameter_data(
hgs
parents:
diff changeset
  4326
		&settings_members,
hgs
parents:
diff changeset
  4327
		member_index,
hgs
parents:
diff changeset
  4328
		&(internal_settings->m_Index));
hgs
parents:
diff changeset
  4329
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  4330
	{
hgs
parents:
diff changeset
  4331
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4332
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4333
	}
hgs
parents:
diff changeset
  4334
hgs
parents:
diff changeset
  4335
	++member_index;
hgs
parents:
diff changeset
  4336
hgs
parents:
diff changeset
  4337
	{
hgs
parents:
diff changeset
  4338
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4339
			m_am_tools,
hgs
parents:
diff changeset
  4340
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4341
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticCACertificatePresent\n"),
hgs
parents:
diff changeset
  4342
			settings_header->get_type(),
hgs
parents:
diff changeset
  4343
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4344
hgs
parents:
diff changeset
  4345
		// Use automatic CA certificate.
hgs
parents:
diff changeset
  4346
		status = read_parameter_data(
hgs
parents:
diff changeset
  4347
			&settings_members,
hgs
parents:
diff changeset
  4348
			member_index,
hgs
parents:
diff changeset
  4349
			&(internal_settings->m_UseAutomaticCACertificatePresent));
hgs
parents:
diff changeset
  4350
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4351
		{
hgs
parents:
diff changeset
  4352
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4353
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4354
		}
hgs
parents:
diff changeset
  4355
hgs
parents:
diff changeset
  4356
		if (internal_settings->m_UseAutomaticCACertificatePresent == true)
hgs
parents:
diff changeset
  4357
		{
hgs
parents:
diff changeset
  4358
			++member_index;
hgs
parents:
diff changeset
  4359
hgs
parents:
diff changeset
  4360
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4361
				m_am_tools,
hgs
parents:
diff changeset
  4362
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4363
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticCACertificate\n"),
hgs
parents:
diff changeset
  4364
				settings_header->get_type(),
hgs
parents:
diff changeset
  4365
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4366
hgs
parents:
diff changeset
  4367
			status = read_parameter_data(
hgs
parents:
diff changeset
  4368
				&settings_members,
hgs
parents:
diff changeset
  4369
				member_index,
hgs
parents:
diff changeset
  4370
				&(internal_settings->m_UseAutomaticCACertificate));
hgs
parents:
diff changeset
  4371
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4372
			{
hgs
parents:
diff changeset
  4373
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4374
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4375
			}
hgs
parents:
diff changeset
  4376
		}
hgs
parents:
diff changeset
  4377
	}
hgs
parents:
diff changeset
  4378
hgs
parents:
diff changeset
  4379
	++member_index;
hgs
parents:
diff changeset
  4380
hgs
parents:
diff changeset
  4381
	{
hgs
parents:
diff changeset
  4382
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4383
			m_am_tools,
hgs
parents:
diff changeset
  4384
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4385
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticUsernamePresent\n"),
hgs
parents:
diff changeset
  4386
			settings_header->get_type(),
hgs
parents:
diff changeset
  4387
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4388
hgs
parents:
diff changeset
  4389
		// Use automatic username.
hgs
parents:
diff changeset
  4390
		status = read_parameter_data(
hgs
parents:
diff changeset
  4391
			&settings_members,
hgs
parents:
diff changeset
  4392
			member_index,
hgs
parents:
diff changeset
  4393
			&(internal_settings->m_UseAutomaticUsernamePresent));
hgs
parents:
diff changeset
  4394
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4395
		{
hgs
parents:
diff changeset
  4396
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4397
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4398
		}
hgs
parents:
diff changeset
  4399
hgs
parents:
diff changeset
  4400
		if (internal_settings->m_UseAutomaticUsernamePresent == true)
hgs
parents:
diff changeset
  4401
		{
hgs
parents:
diff changeset
  4402
			++member_index;
hgs
parents:
diff changeset
  4403
hgs
parents:
diff changeset
  4404
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4405
				m_am_tools,
hgs
parents:
diff changeset
  4406
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4407
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticUsername\n"),
hgs
parents:
diff changeset
  4408
				settings_header->get_type(),
hgs
parents:
diff changeset
  4409
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4410
hgs
parents:
diff changeset
  4411
			status = read_parameter_data(
hgs
parents:
diff changeset
  4412
				&settings_members,
hgs
parents:
diff changeset
  4413
				member_index,
hgs
parents:
diff changeset
  4414
				&(internal_settings->m_UseAutomaticUsername));
hgs
parents:
diff changeset
  4415
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4416
			{
hgs
parents:
diff changeset
  4417
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4418
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4419
			}
hgs
parents:
diff changeset
  4420
		}
hgs
parents:
diff changeset
  4421
	}
hgs
parents:
diff changeset
  4422
hgs
parents:
diff changeset
  4423
	++member_index;
hgs
parents:
diff changeset
  4424
hgs
parents:
diff changeset
  4425
	{
hgs
parents:
diff changeset
  4426
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4427
			m_am_tools,
hgs
parents:
diff changeset
  4428
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4429
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticRealmPresent\n"),
hgs
parents:
diff changeset
  4430
			settings_header->get_type(),
hgs
parents:
diff changeset
  4431
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4432
hgs
parents:
diff changeset
  4433
		// Use automatic username.
hgs
parents:
diff changeset
  4434
		status = read_parameter_data(
hgs
parents:
diff changeset
  4435
			&settings_members,
hgs
parents:
diff changeset
  4436
			member_index,
hgs
parents:
diff changeset
  4437
			&(internal_settings->m_UseAutomaticRealmPresent));
hgs
parents:
diff changeset
  4438
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4439
		{
hgs
parents:
diff changeset
  4440
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4441
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4442
		}
hgs
parents:
diff changeset
  4443
hgs
parents:
diff changeset
  4444
		if (internal_settings->m_UseAutomaticRealmPresent == true)
hgs
parents:
diff changeset
  4445
		{
hgs
parents:
diff changeset
  4446
			++member_index;
hgs
parents:
diff changeset
  4447
hgs
parents:
diff changeset
  4448
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4449
				m_am_tools,
hgs
parents:
diff changeset
  4450
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4451
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseAutomaticRealm\n"),
hgs
parents:
diff changeset
  4452
				settings_header->get_type(),
hgs
parents:
diff changeset
  4453
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4454
hgs
parents:
diff changeset
  4455
			status = read_parameter_data(
hgs
parents:
diff changeset
  4456
				&settings_members,
hgs
parents:
diff changeset
  4457
				member_index,
hgs
parents:
diff changeset
  4458
				&(internal_settings->m_UseAutomaticRealm));
hgs
parents:
diff changeset
  4459
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4460
			{
hgs
parents:
diff changeset
  4461
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4462
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4463
			}
hgs
parents:
diff changeset
  4464
		}
hgs
parents:
diff changeset
  4465
	}
hgs
parents:
diff changeset
  4466
hgs
parents:
diff changeset
  4467
	++member_index;
hgs
parents:
diff changeset
  4468
hgs
parents:
diff changeset
  4469
	{
hgs
parents:
diff changeset
  4470
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4471
			m_am_tools,
hgs
parents:
diff changeset
  4472
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4473
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UsernamePresent\n"),
hgs
parents:
diff changeset
  4474
			settings_header->get_type(),
hgs
parents:
diff changeset
  4475
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4476
hgs
parents:
diff changeset
  4477
		// Username in ASCII format
hgs
parents:
diff changeset
  4478
		status = read_parameter_data(
hgs
parents:
diff changeset
  4479
			&settings_members,
hgs
parents:
diff changeset
  4480
			member_index,
hgs
parents:
diff changeset
  4481
			&(internal_settings->m_UsernamePresent));
hgs
parents:
diff changeset
  4482
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4483
		{
hgs
parents:
diff changeset
  4484
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4485
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4486
		}
hgs
parents:
diff changeset
  4487
hgs
parents:
diff changeset
  4488
		if (internal_settings->m_UsernamePresent == true)
hgs
parents:
diff changeset
  4489
		{
hgs
parents:
diff changeset
  4490
			++member_index;
hgs
parents:
diff changeset
  4491
hgs
parents:
diff changeset
  4492
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4493
				m_am_tools,
hgs
parents:
diff changeset
  4494
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4495
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_Username_fix\n"),
hgs
parents:
diff changeset
  4496
				settings_header->get_type(),
hgs
parents:
diff changeset
  4497
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4498
hgs
parents:
diff changeset
  4499
			status = read_parameter_data(
hgs
parents:
diff changeset
  4500
				&settings_members,
hgs
parents:
diff changeset
  4501
				member_index,
hgs
parents:
diff changeset
  4502
				&(internal_settings->m_Username_fix));
hgs
parents:
diff changeset
  4503
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4504
			{
hgs
parents:
diff changeset
  4505
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4506
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4507
			}
hgs
parents:
diff changeset
  4508
		}
hgs
parents:
diff changeset
  4509
	}
hgs
parents:
diff changeset
  4510
hgs
parents:
diff changeset
  4511
	++member_index;
hgs
parents:
diff changeset
  4512
hgs
parents:
diff changeset
  4513
	{
hgs
parents:
diff changeset
  4514
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4515
			m_am_tools,
hgs
parents:
diff changeset
  4516
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4517
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PasswordExistPresent\n"),
hgs
parents:
diff changeset
  4518
			settings_header->get_type(),
hgs
parents:
diff changeset
  4519
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4520
hgs
parents:
diff changeset
  4521
		// Password existence
hgs
parents:
diff changeset
  4522
		status = read_parameter_data(
hgs
parents:
diff changeset
  4523
			&settings_members,
hgs
parents:
diff changeset
  4524
			member_index,
hgs
parents:
diff changeset
  4525
			&(internal_settings->m_PasswordExistPresent));
hgs
parents:
diff changeset
  4526
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4527
		{
hgs
parents:
diff changeset
  4528
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4529
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4530
		}
hgs
parents:
diff changeset
  4531
hgs
parents:
diff changeset
  4532
		if (internal_settings->m_PasswordExistPresent == true)
hgs
parents:
diff changeset
  4533
		{
hgs
parents:
diff changeset
  4534
			++member_index;
hgs
parents:
diff changeset
  4535
hgs
parents:
diff changeset
  4536
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4537
				m_am_tools,
hgs
parents:
diff changeset
  4538
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4539
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PasswordExist\n"),
hgs
parents:
diff changeset
  4540
				settings_header->get_type(),
hgs
parents:
diff changeset
  4541
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4542
hgs
parents:
diff changeset
  4543
			status = read_parameter_data(
hgs
parents:
diff changeset
  4544
				&settings_members,
hgs
parents:
diff changeset
  4545
				member_index,
hgs
parents:
diff changeset
  4546
				&(internal_settings->m_PasswordExist));
hgs
parents:
diff changeset
  4547
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4548
			{
hgs
parents:
diff changeset
  4549
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4550
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4551
			}
hgs
parents:
diff changeset
  4552
		}
hgs
parents:
diff changeset
  4553
	}
hgs
parents:
diff changeset
  4554
hgs
parents:
diff changeset
  4555
	++member_index;
hgs
parents:
diff changeset
  4556
hgs
parents:
diff changeset
  4557
	{
hgs
parents:
diff changeset
  4558
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4559
			m_am_tools,
hgs
parents:
diff changeset
  4560
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4561
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PasswordPresent\n"),
hgs
parents:
diff changeset
  4562
			settings_header->get_type(),
hgs
parents:
diff changeset
  4563
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4564
hgs
parents:
diff changeset
  4565
		// Password in ASCII format
hgs
parents:
diff changeset
  4566
		status = read_parameter_data(
hgs
parents:
diff changeset
  4567
			&settings_members,
hgs
parents:
diff changeset
  4568
			member_index,
hgs
parents:
diff changeset
  4569
			&(internal_settings->m_PasswordPresent));
hgs
parents:
diff changeset
  4570
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4571
		{
hgs
parents:
diff changeset
  4572
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4573
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4574
		}
hgs
parents:
diff changeset
  4575
hgs
parents:
diff changeset
  4576
		if (internal_settings->m_PasswordPresent == true)
hgs
parents:
diff changeset
  4577
		{
hgs
parents:
diff changeset
  4578
			++member_index;
hgs
parents:
diff changeset
  4579
hgs
parents:
diff changeset
  4580
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4581
				m_am_tools,
hgs
parents:
diff changeset
  4582
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4583
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_Password\n"),
hgs
parents:
diff changeset
  4584
				settings_header->get_type(),
hgs
parents:
diff changeset
  4585
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4586
hgs
parents:
diff changeset
  4587
			status = read_parameter_data(
hgs
parents:
diff changeset
  4588
				&settings_members,
hgs
parents:
diff changeset
  4589
				member_index,
hgs
parents:
diff changeset
  4590
				&(internal_settings->m_Password));
hgs
parents:
diff changeset
  4591
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4592
			{
hgs
parents:
diff changeset
  4593
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4594
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4595
			}
hgs
parents:
diff changeset
  4596
		}
hgs
parents:
diff changeset
  4597
	}
hgs
parents:
diff changeset
  4598
hgs
parents:
diff changeset
  4599
	++member_index;
hgs
parents:
diff changeset
  4600
hgs
parents:
diff changeset
  4601
	{
hgs
parents:
diff changeset
  4602
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4603
			m_am_tools,
hgs
parents:
diff changeset
  4604
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4605
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_RealmPresent\n"),
hgs
parents:
diff changeset
  4606
			settings_header->get_type(),
hgs
parents:
diff changeset
  4607
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4608
hgs
parents:
diff changeset
  4609
		// Realm in ASCII format
hgs
parents:
diff changeset
  4610
		status = read_parameter_data(
hgs
parents:
diff changeset
  4611
			&settings_members,
hgs
parents:
diff changeset
  4612
			member_index,
hgs
parents:
diff changeset
  4613
			&(internal_settings->m_RealmPresent));
hgs
parents:
diff changeset
  4614
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4615
		{
hgs
parents:
diff changeset
  4616
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4617
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4618
		}
hgs
parents:
diff changeset
  4619
hgs
parents:
diff changeset
  4620
		if (internal_settings->m_RealmPresent == true)
hgs
parents:
diff changeset
  4621
		{
hgs
parents:
diff changeset
  4622
			++member_index;
hgs
parents:
diff changeset
  4623
hgs
parents:
diff changeset
  4624
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4625
				m_am_tools,
hgs
parents:
diff changeset
  4626
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4627
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_Realm\n"),
hgs
parents:
diff changeset
  4628
				settings_header->get_type(),
hgs
parents:
diff changeset
  4629
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4630
hgs
parents:
diff changeset
  4631
			status = read_parameter_data(
hgs
parents:
diff changeset
  4632
				&settings_members,
hgs
parents:
diff changeset
  4633
				member_index,
hgs
parents:
diff changeset
  4634
				&(internal_settings->m_Realm));
hgs
parents:
diff changeset
  4635
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4636
			{
hgs
parents:
diff changeset
  4637
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4638
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4639
			}
hgs
parents:
diff changeset
  4640
		}
hgs
parents:
diff changeset
  4641
	}
hgs
parents:
diff changeset
  4642
hgs
parents:
diff changeset
  4643
	++member_index;
hgs
parents:
diff changeset
  4644
hgs
parents:
diff changeset
  4645
	{
hgs
parents:
diff changeset
  4646
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4647
			m_am_tools,
hgs
parents:
diff changeset
  4648
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4649
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UsePseudonymsPresent\n"),
hgs
parents:
diff changeset
  4650
			settings_header->get_type(),
hgs
parents:
diff changeset
  4651
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4652
hgs
parents:
diff changeset
  4653
		// Use pseudonym identities in EAP-SIM/AKA
hgs
parents:
diff changeset
  4654
		status = read_parameter_data(
hgs
parents:
diff changeset
  4655
			&settings_members,
hgs
parents:
diff changeset
  4656
			member_index,
hgs
parents:
diff changeset
  4657
			&(internal_settings->m_UsePseudonymsPresent));
hgs
parents:
diff changeset
  4658
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4659
		{
hgs
parents:
diff changeset
  4660
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4661
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4662
		}
hgs
parents:
diff changeset
  4663
hgs
parents:
diff changeset
  4664
		if (internal_settings->m_UsePseudonymsPresent == true)
hgs
parents:
diff changeset
  4665
		{
hgs
parents:
diff changeset
  4666
			++member_index;
hgs
parents:
diff changeset
  4667
hgs
parents:
diff changeset
  4668
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4669
				m_am_tools,
hgs
parents:
diff changeset
  4670
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4671
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UsePseudonyms\n"),
hgs
parents:
diff changeset
  4672
				settings_header->get_type(),
hgs
parents:
diff changeset
  4673
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4674
hgs
parents:
diff changeset
  4675
			status = read_parameter_data(
hgs
parents:
diff changeset
  4676
				&settings_members,
hgs
parents:
diff changeset
  4677
				member_index,
hgs
parents:
diff changeset
  4678
				&(internal_settings->m_UsePseudonyms));
hgs
parents:
diff changeset
  4679
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4680
			{
hgs
parents:
diff changeset
  4681
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4682
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4683
			}
hgs
parents:
diff changeset
  4684
		}
hgs
parents:
diff changeset
  4685
	}
hgs
parents:
diff changeset
  4686
hgs
parents:
diff changeset
  4687
	++member_index;
hgs
parents:
diff changeset
  4688
hgs
parents:
diff changeset
  4689
	{
hgs
parents:
diff changeset
  4690
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4691
			m_am_tools,
hgs
parents:
diff changeset
  4692
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4693
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_VerifyServerRealmPresent\n"),
hgs
parents:
diff changeset
  4694
			settings_header->get_type(),
hgs
parents:
diff changeset
  4695
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4696
hgs
parents:
diff changeset
  4697
		// Whether EAP-TLS/TTLS/PEAP should verify server realm
hgs
parents:
diff changeset
  4698
		status = read_parameter_data(
hgs
parents:
diff changeset
  4699
			&settings_members,
hgs
parents:
diff changeset
  4700
			member_index,
hgs
parents:
diff changeset
  4701
			&(internal_settings->m_VerifyServerRealmPresent));
hgs
parents:
diff changeset
  4702
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4703
		{
hgs
parents:
diff changeset
  4704
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4705
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4706
		}
hgs
parents:
diff changeset
  4707
hgs
parents:
diff changeset
  4708
		if (internal_settings->m_VerifyServerRealmPresent == true)
hgs
parents:
diff changeset
  4709
		{
hgs
parents:
diff changeset
  4710
			++member_index;
hgs
parents:
diff changeset
  4711
hgs
parents:
diff changeset
  4712
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4713
				m_am_tools,
hgs
parents:
diff changeset
  4714
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4715
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_VerifyServerRealm\n"),
hgs
parents:
diff changeset
  4716
				settings_header->get_type(),
hgs
parents:
diff changeset
  4717
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4718
hgs
parents:
diff changeset
  4719
			status = read_parameter_data(
hgs
parents:
diff changeset
  4720
				&settings_members,
hgs
parents:
diff changeset
  4721
				member_index,
hgs
parents:
diff changeset
  4722
				&(internal_settings->m_VerifyServerRealm));
hgs
parents:
diff changeset
  4723
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4724
			{
hgs
parents:
diff changeset
  4725
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4726
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4727
			}
hgs
parents:
diff changeset
  4728
		}
hgs
parents:
diff changeset
  4729
	}
hgs
parents:
diff changeset
  4730
hgs
parents:
diff changeset
  4731
	++member_index;
hgs
parents:
diff changeset
  4732
hgs
parents:
diff changeset
  4733
	{
hgs
parents:
diff changeset
  4734
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4735
			m_am_tools,
hgs
parents:
diff changeset
  4736
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4737
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_RequireClientAuthenticationPresent\n"),
hgs
parents:
diff changeset
  4738
			settings_header->get_type(),
hgs
parents:
diff changeset
  4739
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4740
hgs
parents:
diff changeset
  4741
		// Whether EAP-TLS/TTLS/PEAP should require client authentication
hgs
parents:
diff changeset
  4742
		status = read_parameter_data(
hgs
parents:
diff changeset
  4743
			&settings_members,
hgs
parents:
diff changeset
  4744
			member_index,
hgs
parents:
diff changeset
  4745
			&(internal_settings->m_RequireClientAuthenticationPresent));
hgs
parents:
diff changeset
  4746
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4747
		{
hgs
parents:
diff changeset
  4748
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4749
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4750
		}
hgs
parents:
diff changeset
  4751
hgs
parents:
diff changeset
  4752
		if (internal_settings->m_RequireClientAuthenticationPresent == true)
hgs
parents:
diff changeset
  4753
		{
hgs
parents:
diff changeset
  4754
			++member_index;
hgs
parents:
diff changeset
  4755
hgs
parents:
diff changeset
  4756
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4757
				m_am_tools,
hgs
parents:
diff changeset
  4758
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4759
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_RequireClientAuthentication\n"),
hgs
parents:
diff changeset
  4760
				settings_header->get_type(),
hgs
parents:
diff changeset
  4761
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4762
hgs
parents:
diff changeset
  4763
			status = read_parameter_data(
hgs
parents:
diff changeset
  4764
				&settings_members,
hgs
parents:
diff changeset
  4765
				member_index,
hgs
parents:
diff changeset
  4766
				&(internal_settings->m_RequireClientAuthentication));
hgs
parents:
diff changeset
  4767
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4768
			{
hgs
parents:
diff changeset
  4769
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4770
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4771
			}
hgs
parents:
diff changeset
  4772
		}
hgs
parents:
diff changeset
  4773
	}
hgs
parents:
diff changeset
  4774
hgs
parents:
diff changeset
  4775
	++member_index;
hgs
parents:
diff changeset
  4776
hgs
parents:
diff changeset
  4777
	{
hgs
parents:
diff changeset
  4778
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4779
			m_am_tools,
hgs
parents:
diff changeset
  4780
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4781
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_SessionValidityTimePresent\n"),
hgs
parents:
diff changeset
  4782
			settings_header->get_type(),
hgs
parents:
diff changeset
  4783
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4784
hgs
parents:
diff changeset
  4785
		// General session validity time (in minutes)
hgs
parents:
diff changeset
  4786
		status = read_parameter_data(
hgs
parents:
diff changeset
  4787
			&settings_members,
hgs
parents:
diff changeset
  4788
			member_index,
hgs
parents:
diff changeset
  4789
			&(internal_settings->m_SessionValidityTimePresent));
hgs
parents:
diff changeset
  4790
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4791
		{
hgs
parents:
diff changeset
  4792
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4793
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4794
		}
hgs
parents:
diff changeset
  4795
hgs
parents:
diff changeset
  4796
		if (internal_settings->m_SessionValidityTimePresent == true)
hgs
parents:
diff changeset
  4797
		{
hgs
parents:
diff changeset
  4798
			++member_index;
hgs
parents:
diff changeset
  4799
hgs
parents:
diff changeset
  4800
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4801
				m_am_tools,
hgs
parents:
diff changeset
  4802
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4803
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_SessionValidityTime\n"),
hgs
parents:
diff changeset
  4804
				settings_header->get_type(),
hgs
parents:
diff changeset
  4805
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4806
hgs
parents:
diff changeset
  4807
			status = read_parameter_data(
hgs
parents:
diff changeset
  4808
				&settings_members,
hgs
parents:
diff changeset
  4809
				member_index,
hgs
parents:
diff changeset
  4810
				&(internal_settings->m_SessionValidityTime));
hgs
parents:
diff changeset
  4811
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4812
			{
hgs
parents:
diff changeset
  4813
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4814
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4815
			}
hgs
parents:
diff changeset
  4816
		}
hgs
parents:
diff changeset
  4817
	}
hgs
parents:
diff changeset
  4818
hgs
parents:
diff changeset
  4819
	++member_index;
hgs
parents:
diff changeset
  4820
hgs
parents:
diff changeset
  4821
	{
hgs
parents:
diff changeset
  4822
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4823
			m_am_tools,
hgs
parents:
diff changeset
  4824
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4825
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_CipherSuitesPresent\n"),
hgs
parents:
diff changeset
  4826
			settings_header->get_type(),
hgs
parents:
diff changeset
  4827
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4828
hgs
parents:
diff changeset
  4829
		// An array of allowed cipher suites for EAP-TLS/TTLS/PEAP.
hgs
parents:
diff changeset
  4830
		// Refer to RFC2246 chapter A.5 for the values.
hgs
parents:
diff changeset
  4831
		status = read_parameter_data(
hgs
parents:
diff changeset
  4832
			&settings_members,
hgs
parents:
diff changeset
  4833
			member_index,
hgs
parents:
diff changeset
  4834
			&(internal_settings->m_CipherSuitesPresent));
hgs
parents:
diff changeset
  4835
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4836
		{
hgs
parents:
diff changeset
  4837
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4838
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4839
		}
hgs
parents:
diff changeset
  4840
hgs
parents:
diff changeset
  4841
		if (internal_settings->m_CipherSuitesPresent == true)
hgs
parents:
diff changeset
  4842
		{
hgs
parents:
diff changeset
  4843
			++member_index;
hgs
parents:
diff changeset
  4844
hgs
parents:
diff changeset
  4845
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4846
				m_am_tools,
hgs
parents:
diff changeset
  4847
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4848
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_CipherSuites\n"),
hgs
parents:
diff changeset
  4849
				settings_header->get_type(),
hgs
parents:
diff changeset
  4850
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4851
hgs
parents:
diff changeset
  4852
			status = read_parameter_data(
hgs
parents:
diff changeset
  4853
				&settings_members,
hgs
parents:
diff changeset
  4854
				member_index,
hgs
parents:
diff changeset
  4855
				&(internal_settings->m_CipherSuites));
hgs
parents:
diff changeset
  4856
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4857
			{
hgs
parents:
diff changeset
  4858
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4859
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4860
			}
hgs
parents:
diff changeset
  4861
		}
hgs
parents:
diff changeset
  4862
	}
hgs
parents:
diff changeset
  4863
hgs
parents:
diff changeset
  4864
	++member_index;
hgs
parents:
diff changeset
  4865
hgs
parents:
diff changeset
  4866
	{
hgs
parents:
diff changeset
  4867
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4868
			m_am_tools,
hgs
parents:
diff changeset
  4869
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4870
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PEAPVersionsPresent\n"),
hgs
parents:
diff changeset
  4871
			settings_header->get_type(),
hgs
parents:
diff changeset
  4872
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4873
hgs
parents:
diff changeset
  4874
		// Which EAP-PEAP versions are allowed
hgs
parents:
diff changeset
  4875
		status = read_parameter_data(
hgs
parents:
diff changeset
  4876
			&settings_members,
hgs
parents:
diff changeset
  4877
			member_index,
hgs
parents:
diff changeset
  4878
			&(internal_settings->m_PEAPVersionsPresent));
hgs
parents:
diff changeset
  4879
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4880
		{
hgs
parents:
diff changeset
  4881
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4882
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4883
		}
hgs
parents:
diff changeset
  4884
hgs
parents:
diff changeset
  4885
		if (internal_settings->m_PEAPVersionsPresent == true)
hgs
parents:
diff changeset
  4886
		{
hgs
parents:
diff changeset
  4887
			++member_index;
hgs
parents:
diff changeset
  4888
hgs
parents:
diff changeset
  4889
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4890
				m_am_tools,
hgs
parents:
diff changeset
  4891
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4892
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PEAPv0Allowed\n"),
hgs
parents:
diff changeset
  4893
				settings_header->get_type(),
hgs
parents:
diff changeset
  4894
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4895
hgs
parents:
diff changeset
  4896
			status = read_parameter_data(
hgs
parents:
diff changeset
  4897
				&settings_members,
hgs
parents:
diff changeset
  4898
				member_index,
hgs
parents:
diff changeset
  4899
				&(internal_settings->m_PEAPv0Allowed));
hgs
parents:
diff changeset
  4900
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4901
			{
hgs
parents:
diff changeset
  4902
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4903
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4904
			}
hgs
parents:
diff changeset
  4905
hgs
parents:
diff changeset
  4906
			++member_index;
hgs
parents:
diff changeset
  4907
hgs
parents:
diff changeset
  4908
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4909
				m_am_tools,
hgs
parents:
diff changeset
  4910
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4911
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PEAPv1Allowed\n"),
hgs
parents:
diff changeset
  4912
				settings_header->get_type(),
hgs
parents:
diff changeset
  4913
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4914
hgs
parents:
diff changeset
  4915
			status = read_parameter_data(
hgs
parents:
diff changeset
  4916
				&settings_members,
hgs
parents:
diff changeset
  4917
				member_index,
hgs
parents:
diff changeset
  4918
				&(internal_settings->m_PEAPv1Allowed));
hgs
parents:
diff changeset
  4919
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4920
			{
hgs
parents:
diff changeset
  4921
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4922
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4923
			}
hgs
parents:
diff changeset
  4924
hgs
parents:
diff changeset
  4925
			++member_index;
hgs
parents:
diff changeset
  4926
hgs
parents:
diff changeset
  4927
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4928
				m_am_tools,
hgs
parents:
diff changeset
  4929
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4930
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PEAPv2Allowed\n"),
hgs
parents:
diff changeset
  4931
				settings_header->get_type(),
hgs
parents:
diff changeset
  4932
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4933
hgs
parents:
diff changeset
  4934
			status = read_parameter_data(
hgs
parents:
diff changeset
  4935
				&settings_members,
hgs
parents:
diff changeset
  4936
				member_index,
hgs
parents:
diff changeset
  4937
				&(internal_settings->m_PEAPv2Allowed));
hgs
parents:
diff changeset
  4938
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4939
			{
hgs
parents:
diff changeset
  4940
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4941
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4942
			}
hgs
parents:
diff changeset
  4943
		}
hgs
parents:
diff changeset
  4944
	}
hgs
parents:
diff changeset
  4945
hgs
parents:
diff changeset
  4946
	++member_index;
hgs
parents:
diff changeset
  4947
hgs
parents:
diff changeset
  4948
	{
hgs
parents:
diff changeset
  4949
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4950
			m_am_tools,
hgs
parents:
diff changeset
  4951
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4952
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_CertificatesPresent\n"),
hgs
parents:
diff changeset
  4953
			settings_header->get_type(),
hgs
parents:
diff changeset
  4954
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4955
hgs
parents:
diff changeset
  4956
  		// Array listing the allowed certificates for EAP-TLS/TTLS/PEAP.
hgs
parents:
diff changeset
  4957
  		// Subject key ID and Certificate type are the only mandatory certificate
hgs
parents:
diff changeset
  4958
  		// details needed at the moment.
hgs
parents:
diff changeset
  4959
		status = read_parameter_data(
hgs
parents:
diff changeset
  4960
			&settings_members,
hgs
parents:
diff changeset
  4961
			member_index,
hgs
parents:
diff changeset
  4962
			&(internal_settings->m_CertificatesPresent));
hgs
parents:
diff changeset
  4963
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  4964
		{
hgs
parents:
diff changeset
  4965
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4966
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4967
		}
hgs
parents:
diff changeset
  4968
hgs
parents:
diff changeset
  4969
		if (internal_settings->m_CertificatesPresent == true)
hgs
parents:
diff changeset
  4970
		{
hgs
parents:
diff changeset
  4971
			++member_index;
hgs
parents:
diff changeset
  4972
hgs
parents:
diff changeset
  4973
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4974
				m_am_tools,
hgs
parents:
diff changeset
  4975
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4976
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_Certificates\n"),
hgs
parents:
diff changeset
  4977
				settings_header->get_type(),
hgs
parents:
diff changeset
  4978
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  4979
hgs
parents:
diff changeset
  4980
			status = read_parameter_data(
hgs
parents:
diff changeset
  4981
				&settings_members,
hgs
parents:
diff changeset
  4982
				member_index,
hgs
parents:
diff changeset
  4983
				&(internal_settings->m_Certificates));
hgs
parents:
diff changeset
  4984
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  4985
			{
hgs
parents:
diff changeset
  4986
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  4987
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  4988
			}
hgs
parents:
diff changeset
  4989
		}
hgs
parents:
diff changeset
  4990
	}
hgs
parents:
diff changeset
  4991
hgs
parents:
diff changeset
  4992
	++member_index;
hgs
parents:
diff changeset
  4993
hgs
parents:
diff changeset
  4994
	{
hgs
parents:
diff changeset
  4995
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  4996
			m_am_tools,
hgs
parents:
diff changeset
  4997
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  4998
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_EnabledEncapsulatedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  4999
			settings_header->get_type(),
hgs
parents:
diff changeset
  5000
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5001
hgs
parents:
diff changeset
  5002
		// Array listing the encapsulated EAP types (in priority order).
hgs
parents:
diff changeset
  5003
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  5004
		status = read_parameter_data(
hgs
parents:
diff changeset
  5005
			&settings_members,
hgs
parents:
diff changeset
  5006
			member_index,
hgs
parents:
diff changeset
  5007
			&(internal_settings->m_EnabledEncapsulatedEAPTypesPresent));
hgs
parents:
diff changeset
  5008
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5009
		{
hgs
parents:
diff changeset
  5010
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5011
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5012
		}
hgs
parents:
diff changeset
  5013
hgs
parents:
diff changeset
  5014
		if (internal_settings->m_EnabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
  5015
		{
hgs
parents:
diff changeset
  5016
			++member_index;
hgs
parents:
diff changeset
  5017
hgs
parents:
diff changeset
  5018
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5019
				m_am_tools,
hgs
parents:
diff changeset
  5020
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5021
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_EnabledEncapsulatedEAPTypes\n"),
hgs
parents:
diff changeset
  5022
				settings_header->get_type(),
hgs
parents:
diff changeset
  5023
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5024
hgs
parents:
diff changeset
  5025
			status = read_parameter_data(
hgs
parents:
diff changeset
  5026
				&settings_members,
hgs
parents:
diff changeset
  5027
				member_index,
hgs
parents:
diff changeset
  5028
				&(internal_settings->m_EnabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
  5029
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5030
			{
hgs
parents:
diff changeset
  5031
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5032
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5033
			}
hgs
parents:
diff changeset
  5034
		}
hgs
parents:
diff changeset
  5035
	}
hgs
parents:
diff changeset
  5036
hgs
parents:
diff changeset
  5037
	++member_index;
hgs
parents:
diff changeset
  5038
hgs
parents:
diff changeset
  5039
	{
hgs
parents:
diff changeset
  5040
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5041
			m_am_tools,
hgs
parents:
diff changeset
  5042
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5043
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_DisabledEncapsulatedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  5044
			settings_header->get_type(),
hgs
parents:
diff changeset
  5045
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5046
hgs
parents:
diff changeset
  5047
		// Array listing the encapsulated EAP types (in priority order).
hgs
parents:
diff changeset
  5048
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  5049
		status = read_parameter_data(
hgs
parents:
diff changeset
  5050
			&settings_members,
hgs
parents:
diff changeset
  5051
			member_index,
hgs
parents:
diff changeset
  5052
			&(internal_settings->m_DisabledEncapsulatedEAPTypesPresent));
hgs
parents:
diff changeset
  5053
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5054
		{
hgs
parents:
diff changeset
  5055
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5056
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5057
		}
hgs
parents:
diff changeset
  5058
hgs
parents:
diff changeset
  5059
		if (internal_settings->m_DisabledEncapsulatedEAPTypesPresent == true)
hgs
parents:
diff changeset
  5060
		{
hgs
parents:
diff changeset
  5061
			++member_index;
hgs
parents:
diff changeset
  5062
hgs
parents:
diff changeset
  5063
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5064
				m_am_tools,
hgs
parents:
diff changeset
  5065
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5066
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_DisabledEncapsulatedEAPTypes\n"),
hgs
parents:
diff changeset
  5067
				settings_header->get_type(),
hgs
parents:
diff changeset
  5068
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5069
hgs
parents:
diff changeset
  5070
			status = read_parameter_data(
hgs
parents:
diff changeset
  5071
				&settings_members,
hgs
parents:
diff changeset
  5072
				member_index,
hgs
parents:
diff changeset
  5073
				&(internal_settings->m_DisabledEncapsulatedEAPTypes));
hgs
parents:
diff changeset
  5074
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5075
			{
hgs
parents:
diff changeset
  5076
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5077
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5078
			}
hgs
parents:
diff changeset
  5079
		}
hgs
parents:
diff changeset
  5080
	}
hgs
parents:
diff changeset
  5081
hgs
parents:
diff changeset
  5082
	++member_index;
hgs
parents:
diff changeset
  5083
hgs
parents:
diff changeset
  5084
	{
hgs
parents:
diff changeset
  5085
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5086
			m_am_tools,
hgs
parents:
diff changeset
  5087
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5088
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_AuthProvModeAllowedPresent\n"),
hgs
parents:
diff changeset
  5089
			settings_header->get_type(),
hgs
parents:
diff changeset
  5090
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5091
hgs
parents:
diff changeset
  5092
		// Whether Authenticated provisioning mode allowed or not in EAP-FAST.
hgs
parents:
diff changeset
  5093
		status = read_parameter_data(
hgs
parents:
diff changeset
  5094
			&settings_members,
hgs
parents:
diff changeset
  5095
			member_index,
hgs
parents:
diff changeset
  5096
			&(internal_settings->m_AuthProvModeAllowedPresent));
hgs
parents:
diff changeset
  5097
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5098
		{
hgs
parents:
diff changeset
  5099
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5100
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5101
		}
hgs
parents:
diff changeset
  5102
hgs
parents:
diff changeset
  5103
		if (internal_settings->m_AuthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
  5104
		{
hgs
parents:
diff changeset
  5105
			++member_index;
hgs
parents:
diff changeset
  5106
hgs
parents:
diff changeset
  5107
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5108
				m_am_tools,
hgs
parents:
diff changeset
  5109
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5110
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_AuthProvModeAllowed\n"),
hgs
parents:
diff changeset
  5111
				settings_header->get_type(),
hgs
parents:
diff changeset
  5112
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5113
hgs
parents:
diff changeset
  5114
			status = read_parameter_data(
hgs
parents:
diff changeset
  5115
				&settings_members,
hgs
parents:
diff changeset
  5116
				member_index,
hgs
parents:
diff changeset
  5117
				&(internal_settings->m_AuthProvModeAllowed));
hgs
parents:
diff changeset
  5118
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5119
			{
hgs
parents:
diff changeset
  5120
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5121
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5122
			}
hgs
parents:
diff changeset
  5123
		}
hgs
parents:
diff changeset
  5124
	}
hgs
parents:
diff changeset
  5125
hgs
parents:
diff changeset
  5126
	++member_index;
hgs
parents:
diff changeset
  5127
hgs
parents:
diff changeset
  5128
	{
hgs
parents:
diff changeset
  5129
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5130
			m_am_tools,
hgs
parents:
diff changeset
  5131
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5132
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UnauthProvModeAllowedPresent\n"),
hgs
parents:
diff changeset
  5133
			settings_header->get_type(),
hgs
parents:
diff changeset
  5134
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5135
hgs
parents:
diff changeset
  5136
		// Whether Unauthenticated provisioning mode allowed or not in EAP-FAST.
hgs
parents:
diff changeset
  5137
		status = read_parameter_data(
hgs
parents:
diff changeset
  5138
			&settings_members,
hgs
parents:
diff changeset
  5139
			member_index,
hgs
parents:
diff changeset
  5140
			&(internal_settings->m_UnauthProvModeAllowedPresent));
hgs
parents:
diff changeset
  5141
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5142
		{
hgs
parents:
diff changeset
  5143
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5144
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5145
		}
hgs
parents:
diff changeset
  5146
hgs
parents:
diff changeset
  5147
		if (internal_settings->m_UnauthProvModeAllowedPresent == true)
hgs
parents:
diff changeset
  5148
		{
hgs
parents:
diff changeset
  5149
			++member_index;
hgs
parents:
diff changeset
  5150
hgs
parents:
diff changeset
  5151
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5152
				m_am_tools,
hgs
parents:
diff changeset
  5153
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5154
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UnauthProvModeAllowed\n"),
hgs
parents:
diff changeset
  5155
				settings_header->get_type(),
hgs
parents:
diff changeset
  5156
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5157
hgs
parents:
diff changeset
  5158
			status = read_parameter_data(
hgs
parents:
diff changeset
  5159
				&settings_members,
hgs
parents:
diff changeset
  5160
				member_index,
hgs
parents:
diff changeset
  5161
				&(internal_settings->m_UnauthProvModeAllowed));
hgs
parents:
diff changeset
  5162
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5163
			{
hgs
parents:
diff changeset
  5164
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5165
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5166
			}
hgs
parents:
diff changeset
  5167
		}
hgs
parents:
diff changeset
  5168
	}
hgs
parents:
diff changeset
  5169
hgs
parents:
diff changeset
  5170
	++member_index;
hgs
parents:
diff changeset
  5171
hgs
parents:
diff changeset
  5172
	{
hgs
parents:
diff changeset
  5173
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5174
			m_am_tools,
hgs
parents:
diff changeset
  5175
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5176
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PACGroupReferencePresent\n"),
hgs
parents:
diff changeset
  5177
			settings_header->get_type(),
hgs
parents:
diff changeset
  5178
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5179
hgs
parents:
diff changeset
  5180
		// PAC group reference in ASCII format for EAP-FAST.
hgs
parents:
diff changeset
  5181
		status = read_parameter_data(
hgs
parents:
diff changeset
  5182
			&settings_members,
hgs
parents:
diff changeset
  5183
			member_index,
hgs
parents:
diff changeset
  5184
			&(internal_settings->m_PACGroupReferencePresent));
hgs
parents:
diff changeset
  5185
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5186
		{
hgs
parents:
diff changeset
  5187
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5188
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5189
		}
hgs
parents:
diff changeset
  5190
hgs
parents:
diff changeset
  5191
		if (internal_settings->m_PACGroupReferencePresent == true)
hgs
parents:
diff changeset
  5192
		{
hgs
parents:
diff changeset
  5193
			++member_index;
hgs
parents:
diff changeset
  5194
hgs
parents:
diff changeset
  5195
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5196
				m_am_tools,
hgs
parents:
diff changeset
  5197
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5198
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_PACGroupReference\n"),
hgs
parents:
diff changeset
  5199
				settings_header->get_type(),
hgs
parents:
diff changeset
  5200
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5201
hgs
parents:
diff changeset
  5202
			status = read_parameter_data(
hgs
parents:
diff changeset
  5203
				&settings_members,
hgs
parents:
diff changeset
  5204
				member_index,
hgs
parents:
diff changeset
  5205
				&(internal_settings->m_PACGroupReference));
hgs
parents:
diff changeset
  5206
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5207
			{
hgs
parents:
diff changeset
  5208
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5209
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5210
			}
hgs
parents:
diff changeset
  5211
		}
hgs
parents:
diff changeset
  5212
	}
hgs
parents:
diff changeset
  5213
hgs
parents:
diff changeset
  5214
	++member_index;
hgs
parents:
diff changeset
  5215
hgs
parents:
diff changeset
  5216
	{
hgs
parents:
diff changeset
  5217
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5218
			m_am_tools,
hgs
parents:
diff changeset
  5219
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5220
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnADHPNoPACPresent\n"),
hgs
parents:
diff changeset
  5221
			settings_header->get_type(),
hgs
parents:
diff changeset
  5222
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5223
hgs
parents:
diff changeset
  5224
		// Whether to Warn (or Prompt) for ADHP (Authenticated Diffie-Hellman Protocol)
hgs
parents:
diff changeset
  5225
		// auto-provisioning when there is no PAC at all. EAP-FAST specific.
hgs
parents:
diff changeset
  5226
		status = read_parameter_data(
hgs
parents:
diff changeset
  5227
			&settings_members,
hgs
parents:
diff changeset
  5228
			member_index,
hgs
parents:
diff changeset
  5229
			&(internal_settings->m_WarnADHPNoPACPresent));
hgs
parents:
diff changeset
  5230
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5231
		{
hgs
parents:
diff changeset
  5232
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5233
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5234
		}
hgs
parents:
diff changeset
  5235
hgs
parents:
diff changeset
  5236
		if (internal_settings->m_WarnADHPNoPACPresent == true)
hgs
parents:
diff changeset
  5237
		{
hgs
parents:
diff changeset
  5238
			++member_index;
hgs
parents:
diff changeset
  5239
hgs
parents:
diff changeset
  5240
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5241
				m_am_tools,
hgs
parents:
diff changeset
  5242
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5243
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnADHPNoPAC\n"),
hgs
parents:
diff changeset
  5244
				settings_header->get_type(),
hgs
parents:
diff changeset
  5245
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5246
hgs
parents:
diff changeset
  5247
			status = read_parameter_data(
hgs
parents:
diff changeset
  5248
				&settings_members,
hgs
parents:
diff changeset
  5249
				member_index,
hgs
parents:
diff changeset
  5250
				&(internal_settings->m_WarnADHPNoPAC));
hgs
parents:
diff changeset
  5251
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5252
			{
hgs
parents:
diff changeset
  5253
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5254
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5255
			}
hgs
parents:
diff changeset
  5256
		}
hgs
parents:
diff changeset
  5257
	}
hgs
parents:
diff changeset
  5258
hgs
parents:
diff changeset
  5259
	++member_index;
hgs
parents:
diff changeset
  5260
hgs
parents:
diff changeset
  5261
	{
hgs
parents:
diff changeset
  5262
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5263
			m_am_tools,
hgs
parents:
diff changeset
  5264
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5265
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnADHPNoMatchingPACPresent\n"),
hgs
parents:
diff changeset
  5266
			settings_header->get_type(),
hgs
parents:
diff changeset
  5267
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5268
hgs
parents:
diff changeset
  5269
		// Whether to Warn (or Prompt) for ADHP auto-provisioning when
hgs
parents:
diff changeset
  5270
		// there is no PAC that matches the A-ID sent by server. EAP-FAST specific.
hgs
parents:
diff changeset
  5271
		status = read_parameter_data(
hgs
parents:
diff changeset
  5272
			&settings_members,
hgs
parents:
diff changeset
  5273
			member_index,
hgs
parents:
diff changeset
  5274
			&(internal_settings->m_WarnADHPNoMatchingPACPresent));
hgs
parents:
diff changeset
  5275
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5276
		{
hgs
parents:
diff changeset
  5277
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5278
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5279
		}
hgs
parents:
diff changeset
  5280
hgs
parents:
diff changeset
  5281
		if (internal_settings->m_WarnADHPNoMatchingPACPresent == true)
hgs
parents:
diff changeset
  5282
		{
hgs
parents:
diff changeset
  5283
			++member_index;
hgs
parents:
diff changeset
  5284
hgs
parents:
diff changeset
  5285
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5286
				m_am_tools,
hgs
parents:
diff changeset
  5287
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5288
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnADHPNoMatchingPAC\n"),
hgs
parents:
diff changeset
  5289
				settings_header->get_type(),
hgs
parents:
diff changeset
  5290
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5291
hgs
parents:
diff changeset
  5292
			status = read_parameter_data(
hgs
parents:
diff changeset
  5293
				&settings_members,
hgs
parents:
diff changeset
  5294
				member_index,
hgs
parents:
diff changeset
  5295
				&(internal_settings->m_WarnADHPNoMatchingPAC));
hgs
parents:
diff changeset
  5296
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5297
			{
hgs
parents:
diff changeset
  5298
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5299
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5300
			}
hgs
parents:
diff changeset
  5301
		}
hgs
parents:
diff changeset
  5302
	}
hgs
parents:
diff changeset
  5303
hgs
parents:
diff changeset
  5304
	++member_index;
hgs
parents:
diff changeset
  5305
hgs
parents:
diff changeset
  5306
	{
hgs
parents:
diff changeset
  5307
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5308
			m_am_tools,
hgs
parents:
diff changeset
  5309
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5310
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnNotDefaultServerPresent\n"),
hgs
parents:
diff changeset
  5311
			settings_header->get_type(),
hgs
parents:
diff changeset
  5312
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5313
hgs
parents:
diff changeset
  5314
		// Whether to Warn (or Prompt) when client encouters a server that has provisioned
hgs
parents:
diff changeset
  5315
		// the client with a PAC before but is not currently selected as the default server.
hgs
parents:
diff changeset
  5316
		// EAP-FAST specific.
hgs
parents:
diff changeset
  5317
		status = read_parameter_data(
hgs
parents:
diff changeset
  5318
			&settings_members,
hgs
parents:
diff changeset
  5319
			member_index,
hgs
parents:
diff changeset
  5320
			&(internal_settings->m_WarnNotDefaultServerPresent));
hgs
parents:
diff changeset
  5321
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5322
		{
hgs
parents:
diff changeset
  5323
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5324
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5325
		}
hgs
parents:
diff changeset
  5326
hgs
parents:
diff changeset
  5327
		if (internal_settings->m_WarnNotDefaultServerPresent == true)
hgs
parents:
diff changeset
  5328
		{
hgs
parents:
diff changeset
  5329
			++member_index;
hgs
parents:
diff changeset
  5330
hgs
parents:
diff changeset
  5331
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5332
				m_am_tools,
hgs
parents:
diff changeset
  5333
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5334
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_WarnNotDefaultServer\n"),
hgs
parents:
diff changeset
  5335
				settings_header->get_type(),
hgs
parents:
diff changeset
  5336
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5337
hgs
parents:
diff changeset
  5338
			status = read_parameter_data(
hgs
parents:
diff changeset
  5339
				&settings_members,
hgs
parents:
diff changeset
  5340
				member_index,
hgs
parents:
diff changeset
  5341
				&(internal_settings->m_WarnNotDefaultServer));
hgs
parents:
diff changeset
  5342
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5343
			{
hgs
parents:
diff changeset
  5344
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5345
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5346
			}
hgs
parents:
diff changeset
  5347
		}
hgs
parents:
diff changeset
  5348
	}
hgs
parents:
diff changeset
  5349
hgs
parents:
diff changeset
  5350
	++member_index;
hgs
parents:
diff changeset
  5351
hgs
parents:
diff changeset
  5352
	{
hgs
parents:
diff changeset
  5353
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5354
			m_am_tools,
hgs
parents:
diff changeset
  5355
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5356
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_SelectedEAPTypesPresent\n"),
hgs
parents:
diff changeset
  5357
			settings_header->get_type(),
hgs
parents:
diff changeset
  5358
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5359
hgs
parents:
diff changeset
  5360
		// Array listing the active and disabled EAP types (in priority order).
hgs
parents:
diff changeset
  5361
		// Use EAP type values from eap_type_value_e.
hgs
parents:
diff changeset
  5362
		status = read_parameter_data(
hgs
parents:
diff changeset
  5363
			&settings_members,
hgs
parents:
diff changeset
  5364
			member_index,
hgs
parents:
diff changeset
  5365
			&(internal_settings->m_SelectedEAPTypesPresent));
hgs
parents:
diff changeset
  5366
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5367
		{
hgs
parents:
diff changeset
  5368
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5369
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5370
		}
hgs
parents:
diff changeset
  5371
hgs
parents:
diff changeset
  5372
		if (internal_settings->m_SelectedEAPTypesPresent == true)
hgs
parents:
diff changeset
  5373
		{
hgs
parents:
diff changeset
  5374
			++member_index;
hgs
parents:
diff changeset
  5375
hgs
parents:
diff changeset
  5376
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5377
				m_am_tools,
hgs
parents:
diff changeset
  5378
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5379
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_active_eap_methods\n"),
hgs
parents:
diff changeset
  5380
				settings_header->get_type(),
hgs
parents:
diff changeset
  5381
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5382
hgs
parents:
diff changeset
  5383
			status = read_parameter_data(
hgs
parents:
diff changeset
  5384
				&settings_members,
hgs
parents:
diff changeset
  5385
				member_index,
hgs
parents:
diff changeset
  5386
				&(internal_settings->m_active_eap_methods));
hgs
parents:
diff changeset
  5387
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5388
			{
hgs
parents:
diff changeset
  5389
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5390
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5391
			}
hgs
parents:
diff changeset
  5392
hgs
parents:
diff changeset
  5393
			++member_index;
hgs
parents:
diff changeset
  5394
hgs
parents:
diff changeset
  5395
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5396
				m_am_tools,
hgs
parents:
diff changeset
  5397
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5398
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_disabled_eap_methods\n"),
hgs
parents:
diff changeset
  5399
				settings_header->get_type(),
hgs
parents:
diff changeset
  5400
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5401
hgs
parents:
diff changeset
  5402
			status = read_parameter_data(
hgs
parents:
diff changeset
  5403
				&settings_members,
hgs
parents:
diff changeset
  5404
				member_index,
hgs
parents:
diff changeset
  5405
				&(internal_settings->m_disabled_eap_methods));
hgs
parents:
diff changeset
  5406
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5407
			{
hgs
parents:
diff changeset
  5408
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5409
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5410
			}
hgs
parents:
diff changeset
  5411
		}
hgs
parents:
diff changeset
  5412
	}
hgs
parents:
diff changeset
  5413
hgs
parents:
diff changeset
  5414
	++member_index;
hgs
parents:
diff changeset
  5415
hgs
parents:
diff changeset
  5416
	{
hgs
parents:
diff changeset
  5417
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5418
			m_am_tools,
hgs
parents:
diff changeset
  5419
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5420
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_TunnelingTypePresent\n"),
hgs
parents:
diff changeset
  5421
			settings_header->get_type(),
hgs
parents:
diff changeset
  5422
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5423
hgs
parents:
diff changeset
  5424
		status = read_parameter_data(
hgs
parents:
diff changeset
  5425
			&settings_members,
hgs
parents:
diff changeset
  5426
			member_index,
hgs
parents:
diff changeset
  5427
			&(internal_settings->m_TunnelingTypePresent));
hgs
parents:
diff changeset
  5428
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5429
		{
hgs
parents:
diff changeset
  5430
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5431
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5432
		}
hgs
parents:
diff changeset
  5433
hgs
parents:
diff changeset
  5434
		if (internal_settings->m_TunnelingTypePresent == true)
hgs
parents:
diff changeset
  5435
		{
hgs
parents:
diff changeset
  5436
			++member_index;
hgs
parents:
diff changeset
  5437
hgs
parents:
diff changeset
  5438
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5439
				m_am_tools,
hgs
parents:
diff changeset
  5440
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5441
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_TunnelingType\n"),
hgs
parents:
diff changeset
  5442
				settings_header->get_type(),
hgs
parents:
diff changeset
  5443
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5444
hgs
parents:
diff changeset
  5445
			status = read_parameter_data(
hgs
parents:
diff changeset
  5446
				&settings_members,
hgs
parents:
diff changeset
  5447
				member_index,
hgs
parents:
diff changeset
  5448
				&(internal_settings->m_TunnelingType));
hgs
parents:
diff changeset
  5449
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5450
			{
hgs
parents:
diff changeset
  5451
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5452
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5453
			}
hgs
parents:
diff changeset
  5454
		}
hgs
parents:
diff changeset
  5455
	}
hgs
parents:
diff changeset
  5456
hgs
parents:
diff changeset
  5457
	++member_index;
hgs
parents:
diff changeset
  5458
hgs
parents:
diff changeset
  5459
	{
hgs
parents:
diff changeset
  5460
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5461
			m_am_tools,
hgs
parents:
diff changeset
  5462
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5463
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_DestinationIndexAndTypePresent\n"),
hgs
parents:
diff changeset
  5464
			settings_header->get_type(),
hgs
parents:
diff changeset
  5465
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5466
hgs
parents:
diff changeset
  5467
		status = read_parameter_data(
hgs
parents:
diff changeset
  5468
			&settings_members,
hgs
parents:
diff changeset
  5469
			member_index,
hgs
parents:
diff changeset
  5470
			&(internal_settings->m_DestinationIndexAndTypePresent));
hgs
parents:
diff changeset
  5471
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5472
		{
hgs
parents:
diff changeset
  5473
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5474
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5475
		}
hgs
parents:
diff changeset
  5476
hgs
parents:
diff changeset
  5477
		if (internal_settings->m_DestinationIndexAndTypePresent == true)
hgs
parents:
diff changeset
  5478
		{
hgs
parents:
diff changeset
  5479
			++member_index;
hgs
parents:
diff changeset
  5480
hgs
parents:
diff changeset
  5481
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5482
				m_am_tools,
hgs
parents:
diff changeset
  5483
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5484
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_DestinationIndexType\n"),
hgs
parents:
diff changeset
  5485
				settings_header->get_type(),
hgs
parents:
diff changeset
  5486
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5487
hgs
parents:
diff changeset
  5488
			status = read_parameter_data(
hgs
parents:
diff changeset
  5489
				&settings_members,
hgs
parents:
diff changeset
  5490
				member_index,
hgs
parents:
diff changeset
  5491
				&(internal_settings->m_DestinationIndexType));
hgs
parents:
diff changeset
  5492
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5493
			{
hgs
parents:
diff changeset
  5494
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5495
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5496
			}
hgs
parents:
diff changeset
  5497
hgs
parents:
diff changeset
  5498
			++member_index;
hgs
parents:
diff changeset
  5499
hgs
parents:
diff changeset
  5500
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5501
				m_am_tools,
hgs
parents:
diff changeset
  5502
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5503
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_DestinationIndex\n"),
hgs
parents:
diff changeset
  5504
				settings_header->get_type(),
hgs
parents:
diff changeset
  5505
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5506
hgs
parents:
diff changeset
  5507
			status = read_parameter_data(
hgs
parents:
diff changeset
  5508
				&settings_members,
hgs
parents:
diff changeset
  5509
				member_index,
hgs
parents:
diff changeset
  5510
				&(internal_settings->m_DestinationIndex));
hgs
parents:
diff changeset
  5511
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5512
			{
hgs
parents:
diff changeset
  5513
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5514
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5515
			}
hgs
parents:
diff changeset
  5516
		}
hgs
parents:
diff changeset
  5517
	}
hgs
parents:
diff changeset
  5518
hgs
parents:
diff changeset
  5519
	++member_index;
hgs
parents:
diff changeset
  5520
hgs
parents:
diff changeset
  5521
	{
hgs
parents:
diff changeset
  5522
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5523
			m_am_tools,
hgs
parents:
diff changeset
  5524
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5525
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_MethodInfoPresent\n"),
hgs
parents:
diff changeset
  5526
			settings_header->get_type(),
hgs
parents:
diff changeset
  5527
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5528
hgs
parents:
diff changeset
  5529
		status = read_parameter_data(
hgs
parents:
diff changeset
  5530
			&settings_members,
hgs
parents:
diff changeset
  5531
			member_index,
hgs
parents:
diff changeset
  5532
			&(internal_settings->m_MethodInfoPresent));
hgs
parents:
diff changeset
  5533
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5534
		{
hgs
parents:
diff changeset
  5535
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5536
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5537
		}
hgs
parents:
diff changeset
  5538
hgs
parents:
diff changeset
  5539
		if (internal_settings->m_MethodInfoPresent == true)
hgs
parents:
diff changeset
  5540
		{
hgs
parents:
diff changeset
  5541
			++member_index;
hgs
parents:
diff changeset
  5542
hgs
parents:
diff changeset
  5543
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5544
				m_am_tools,
hgs
parents:
diff changeset
  5545
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5546
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_KReleaseDate\n"),
hgs
parents:
diff changeset
  5547
				settings_header->get_type(),
hgs
parents:
diff changeset
  5548
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5549
hgs
parents:
diff changeset
  5550
			status = read_parameter_data(
hgs
parents:
diff changeset
  5551
				&settings_members,
hgs
parents:
diff changeset
  5552
				member_index,
hgs
parents:
diff changeset
  5553
				&(internal_settings->m_KReleaseDate));
hgs
parents:
diff changeset
  5554
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5555
			{
hgs
parents:
diff changeset
  5556
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5557
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5558
			}
hgs
parents:
diff changeset
  5559
hgs
parents:
diff changeset
  5560
			++member_index;
hgs
parents:
diff changeset
  5561
hgs
parents:
diff changeset
  5562
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5563
				m_am_tools,
hgs
parents:
diff changeset
  5564
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5565
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_KEapTypeVersion\n"),
hgs
parents:
diff changeset
  5566
				settings_header->get_type(),
hgs
parents:
diff changeset
  5567
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5568
hgs
parents:
diff changeset
  5569
			status = read_parameter_data(
hgs
parents:
diff changeset
  5570
				&settings_members,
hgs
parents:
diff changeset
  5571
				member_index,
hgs
parents:
diff changeset
  5572
				&(internal_settings->m_KEapTypeVersion));
hgs
parents:
diff changeset
  5573
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5574
			{
hgs
parents:
diff changeset
  5575
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5576
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5577
			}
hgs
parents:
diff changeset
  5578
hgs
parents:
diff changeset
  5579
			++member_index;
hgs
parents:
diff changeset
  5580
hgs
parents:
diff changeset
  5581
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5582
				m_am_tools,
hgs
parents:
diff changeset
  5583
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5584
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_KManufacturer\n"),
hgs
parents:
diff changeset
  5585
				settings_header->get_type(),
hgs
parents:
diff changeset
  5586
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5587
hgs
parents:
diff changeset
  5588
			status = read_parameter_data(
hgs
parents:
diff changeset
  5589
				&settings_members,
hgs
parents:
diff changeset
  5590
				member_index,
hgs
parents:
diff changeset
  5591
				&(internal_settings->m_KManufacturer));
hgs
parents:
diff changeset
  5592
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5593
			{
hgs
parents:
diff changeset
  5594
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5595
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5596
			}
hgs
parents:
diff changeset
  5597
		}
hgs
parents:
diff changeset
  5598
	}
hgs
parents:
diff changeset
  5599
hgs
parents:
diff changeset
  5600
	++member_index;
hgs
parents:
diff changeset
  5601
hgs
parents:
diff changeset
  5602
	{
hgs
parents:
diff changeset
  5603
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5604
			m_am_tools,
hgs
parents:
diff changeset
  5605
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5606
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_ButtonIdPresent\n"),
hgs
parents:
diff changeset
  5607
			settings_header->get_type(),
hgs
parents:
diff changeset
  5608
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5609
hgs
parents:
diff changeset
  5610
		status = read_parameter_data(
hgs
parents:
diff changeset
  5611
			&settings_members,
hgs
parents:
diff changeset
  5612
			member_index,
hgs
parents:
diff changeset
  5613
			&(internal_settings->m_ButtonIdPresent));
hgs
parents:
diff changeset
  5614
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5615
		{
hgs
parents:
diff changeset
  5616
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5617
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5618
		}
hgs
parents:
diff changeset
  5619
hgs
parents:
diff changeset
  5620
		if (internal_settings->m_ButtonIdPresent == true)
hgs
parents:
diff changeset
  5621
		{
hgs
parents:
diff changeset
  5622
			++member_index;
hgs
parents:
diff changeset
  5623
hgs
parents:
diff changeset
  5624
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5625
				m_am_tools,
hgs
parents:
diff changeset
  5626
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5627
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_ButtonId\n"),
hgs
parents:
diff changeset
  5628
				settings_header->get_type(),
hgs
parents:
diff changeset
  5629
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5630
hgs
parents:
diff changeset
  5631
			status = read_parameter_data(
hgs
parents:
diff changeset
  5632
				&settings_members,
hgs
parents:
diff changeset
  5633
				member_index,
hgs
parents:
diff changeset
  5634
				&(internal_settings->m_ButtonId));
hgs
parents:
diff changeset
  5635
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5636
			{
hgs
parents:
diff changeset
  5637
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5638
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5639
			}
hgs
parents:
diff changeset
  5640
		}
hgs
parents:
diff changeset
  5641
	}
hgs
parents:
diff changeset
  5642
hgs
parents:
diff changeset
  5643
	++member_index;
hgs
parents:
diff changeset
  5644
hgs
parents:
diff changeset
  5645
	{
hgs
parents:
diff changeset
  5646
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5647
			m_am_tools,
hgs
parents:
diff changeset
  5648
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5649
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_ShowPassWordPromptPresent\n"),
hgs
parents:
diff changeset
  5650
			settings_header->get_type(),
hgs
parents:
diff changeset
  5651
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5652
hgs
parents:
diff changeset
  5653
		status = read_parameter_data(
hgs
parents:
diff changeset
  5654
			&settings_members,
hgs
parents:
diff changeset
  5655
			member_index,
hgs
parents:
diff changeset
  5656
			&(internal_settings->m_ShowPassWordPromptPresent));
hgs
parents:
diff changeset
  5657
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5658
		{
hgs
parents:
diff changeset
  5659
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5660
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5661
		}
hgs
parents:
diff changeset
  5662
hgs
parents:
diff changeset
  5663
		if (internal_settings->m_ShowPassWordPromptPresent == true)
hgs
parents:
diff changeset
  5664
		{
hgs
parents:
diff changeset
  5665
			++member_index;
hgs
parents:
diff changeset
  5666
hgs
parents:
diff changeset
  5667
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5668
				m_am_tools,
hgs
parents:
diff changeset
  5669
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5670
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_ShowPassWordPrompt\n"),
hgs
parents:
diff changeset
  5671
				settings_header->get_type(),
hgs
parents:
diff changeset
  5672
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5673
hgs
parents:
diff changeset
  5674
			status = read_parameter_data(
hgs
parents:
diff changeset
  5675
				&settings_members,
hgs
parents:
diff changeset
  5676
				member_index,
hgs
parents:
diff changeset
  5677
				&(internal_settings->m_ShowPassWordPrompt));
hgs
parents:
diff changeset
  5678
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5679
			{
hgs
parents:
diff changeset
  5680
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5681
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5682
			}
hgs
parents:
diff changeset
  5683
		}
hgs
parents:
diff changeset
  5684
	}
hgs
parents:
diff changeset
  5685
hgs
parents:
diff changeset
  5686
	++member_index;
hgs
parents:
diff changeset
  5687
hgs
parents:
diff changeset
  5688
	{
hgs
parents:
diff changeset
  5689
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5690
			m_am_tools,
hgs
parents:
diff changeset
  5691
			EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5692
			(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseIdentityPrivacyPresent\n"),
hgs
parents:
diff changeset
  5693
			settings_header->get_type(),
hgs
parents:
diff changeset
  5694
			 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5695
hgs
parents:
diff changeset
  5696
		status = read_parameter_data(
hgs
parents:
diff changeset
  5697
			&settings_members,
hgs
parents:
diff changeset
  5698
			member_index,
hgs
parents:
diff changeset
  5699
			&(internal_settings->m_UseIdentityPrivacyPresent));
hgs
parents:
diff changeset
  5700
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5701
		{
hgs
parents:
diff changeset
  5702
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5703
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5704
		}
hgs
parents:
diff changeset
  5705
hgs
parents:
diff changeset
  5706
		if (internal_settings->m_UseIdentityPrivacyPresent == true)
hgs
parents:
diff changeset
  5707
		{
hgs
parents:
diff changeset
  5708
			++member_index;
hgs
parents:
diff changeset
  5709
hgs
parents:
diff changeset
  5710
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5711
				m_am_tools,
hgs
parents:
diff changeset
  5712
				EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5713
				(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s, m_UseIdentityPrivacy\n"),
hgs
parents:
diff changeset
  5714
				settings_header->get_type(),
hgs
parents:
diff changeset
  5715
				 get_type_string(static_cast<eap_tlv_message_type_e>(settings_header->get_type()))));
hgs
parents:
diff changeset
  5716
hgs
parents:
diff changeset
  5717
			status = read_parameter_data(
hgs
parents:
diff changeset
  5718
				&settings_members,
hgs
parents:
diff changeset
  5719
				member_index,
hgs
parents:
diff changeset
  5720
				&(internal_settings->m_UseIdentityPrivacy));
hgs
parents:
diff changeset
  5721
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5722
			{
hgs
parents:
diff changeset
  5723
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5724
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5725
			}
hgs
parents:
diff changeset
  5726
		}
hgs
parents:
diff changeset
  5727
	}
hgs
parents:
diff changeset
  5728
hgs
parents:
diff changeset
  5729
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5730
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5731
}
hgs
parents:
diff changeset
  5732
hgs
parents:
diff changeset
  5733
//--------------------------------------------------
hgs
parents:
diff changeset
  5734
hgs
parents:
diff changeset
  5735
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  5736
	const eap_tlv_header_c * const cert_entry_header,
hgs
parents:
diff changeset
  5737
	eap_certificate_entry_c * const cert_entry)
hgs
parents:
diff changeset
  5738
{
hgs
parents:
diff changeset
  5739
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5740
hgs
parents:
diff changeset
  5741
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  5742
		m_am_tools,
hgs
parents:
diff changeset
  5743
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5744
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  5745
		cert_entry_header->get_type(),
hgs
parents:
diff changeset
  5746
		 get_type_string(static_cast<eap_tlv_message_type_e>(cert_entry_header->get_type()))));
hgs
parents:
diff changeset
  5747
hgs
parents:
diff changeset
  5748
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  5749
		m_am_tools,
hgs
parents:
diff changeset
  5750
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  5751
		(EAPL("get_parameter_data(eap_certificate_entry_c *)"),
hgs
parents:
diff changeset
  5752
		cert_entry_header->get_header_buffer(cert_entry_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  5753
		cert_entry_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  5754
hgs
parents:
diff changeset
  5755
	if (static_cast<eap_tlv_message_type_e>(cert_entry_header->get_type())
hgs
parents:
diff changeset
  5756
		!= eap_tlv_message_type_eap_certificate_entry)
hgs
parents:
diff changeset
  5757
	{
hgs
parents:
diff changeset
  5758
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5759
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  5760
	}
hgs
parents:
diff changeset
  5761
hgs
parents:
diff changeset
  5762
	eap_process_tlv_message_data_c settings_data(m_am_tools);
hgs
parents:
diff changeset
  5763
hgs
parents:
diff changeset
  5764
	if (settings_data.get_is_valid() == false)
hgs
parents:
diff changeset
  5765
	{
hgs
parents:
diff changeset
  5766
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5767
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  5768
	}
hgs
parents:
diff changeset
  5769
hgs
parents:
diff changeset
  5770
	eap_status_e status = settings_data.set_message_data(
hgs
parents:
diff changeset
  5771
		cert_entry_header->get_value_length(),
hgs
parents:
diff changeset
  5772
		cert_entry_header->get_value(cert_entry_header->get_value_length()));
hgs
parents:
diff changeset
  5773
hgs
parents:
diff changeset
  5774
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  5775
	{
hgs
parents:
diff changeset
  5776
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5777
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5778
	}
hgs
parents:
diff changeset
  5779
hgs
parents:
diff changeset
  5780
	eap_array_c<eap_tlv_header_c> settings_members(m_am_tools);
hgs
parents:
diff changeset
  5781
hgs
parents:
diff changeset
  5782
	status = settings_data.parse_message_data(&settings_members);
hgs
parents:
diff changeset
  5783
hgs
parents:
diff changeset
  5784
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  5785
	{
hgs
parents:
diff changeset
  5786
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5787
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5788
	}
hgs
parents:
diff changeset
  5789
hgs
parents:
diff changeset
  5790
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  5791
hgs
parents:
diff changeset
  5792
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  5793
hgs
parents:
diff changeset
  5794
	{
hgs
parents:
diff changeset
  5795
		// Specifies whether this entry describes user or CA certificate (mandatory)
hgs
parents:
diff changeset
  5796
		status = read_parameter_data(
hgs
parents:
diff changeset
  5797
			&settings_members,
hgs
parents:
diff changeset
  5798
			member_index,
hgs
parents:
diff changeset
  5799
			&(cert_entry->m_CertType));
hgs
parents:
diff changeset
  5800
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5801
		{
hgs
parents:
diff changeset
  5802
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5803
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5804
		}
hgs
parents:
diff changeset
  5805
	}
hgs
parents:
diff changeset
  5806
hgs
parents:
diff changeset
  5807
	++member_index;
hgs
parents:
diff changeset
  5808
hgs
parents:
diff changeset
  5809
	{
hgs
parents:
diff changeset
  5810
		// Subject name in distinguished name ASCII form. This is optional.
hgs
parents:
diff changeset
  5811
		// For example "/C=US/O=Some organization/CN=Some common name".
hgs
parents:
diff changeset
  5812
		status = read_parameter_data(
hgs
parents:
diff changeset
  5813
			&settings_members,
hgs
parents:
diff changeset
  5814
			member_index,
hgs
parents:
diff changeset
  5815
			&(cert_entry->m_SubjectNamePresent));
hgs
parents:
diff changeset
  5816
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5817
		{
hgs
parents:
diff changeset
  5818
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5819
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5820
		}
hgs
parents:
diff changeset
  5821
hgs
parents:
diff changeset
  5822
		if (cert_entry->m_SubjectNamePresent == true)
hgs
parents:
diff changeset
  5823
		{
hgs
parents:
diff changeset
  5824
			++member_index;
hgs
parents:
diff changeset
  5825
hgs
parents:
diff changeset
  5826
			status = read_parameter_data(
hgs
parents:
diff changeset
  5827
				&settings_members,
hgs
parents:
diff changeset
  5828
				member_index,
hgs
parents:
diff changeset
  5829
				&(cert_entry->m_SubjectName));
hgs
parents:
diff changeset
  5830
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5831
			{
hgs
parents:
diff changeset
  5832
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5833
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5834
			}
hgs
parents:
diff changeset
  5835
		}
hgs
parents:
diff changeset
  5836
	}
hgs
parents:
diff changeset
  5837
hgs
parents:
diff changeset
  5838
	++member_index;
hgs
parents:
diff changeset
  5839
hgs
parents:
diff changeset
  5840
	{
hgs
parents:
diff changeset
  5841
		// Issuer name in distinguished name ASCII form. This is optional.
hgs
parents:
diff changeset
  5842
		// For example "/C=US/O=Some organization/CN=Some common name".
hgs
parents:
diff changeset
  5843
		status = read_parameter_data(
hgs
parents:
diff changeset
  5844
			&settings_members,
hgs
parents:
diff changeset
  5845
			member_index,
hgs
parents:
diff changeset
  5846
			&(cert_entry->m_IssuerNamePresent));
hgs
parents:
diff changeset
  5847
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5848
		{
hgs
parents:
diff changeset
  5849
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5850
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5851
		}
hgs
parents:
diff changeset
  5852
hgs
parents:
diff changeset
  5853
		if (cert_entry->m_IssuerNamePresent == true)
hgs
parents:
diff changeset
  5854
		{
hgs
parents:
diff changeset
  5855
			++member_index;
hgs
parents:
diff changeset
  5856
hgs
parents:
diff changeset
  5857
			status = read_parameter_data(
hgs
parents:
diff changeset
  5858
				&settings_members,
hgs
parents:
diff changeset
  5859
				member_index,
hgs
parents:
diff changeset
  5860
				&(cert_entry->m_IssuerName));
hgs
parents:
diff changeset
  5861
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5862
			{
hgs
parents:
diff changeset
  5863
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5864
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5865
			}
hgs
parents:
diff changeset
  5866
		}
hgs
parents:
diff changeset
  5867
	}
hgs
parents:
diff changeset
  5868
hgs
parents:
diff changeset
  5869
	++member_index;
hgs
parents:
diff changeset
  5870
hgs
parents:
diff changeset
  5871
	{
hgs
parents:
diff changeset
  5872
		// Serial number in ASCII form. This is optional.
hgs
parents:
diff changeset
  5873
		status = read_parameter_data(
hgs
parents:
diff changeset
  5874
			&settings_members,
hgs
parents:
diff changeset
  5875
			member_index,
hgs
parents:
diff changeset
  5876
			&(cert_entry->m_SerialNumberPresent));
hgs
parents:
diff changeset
  5877
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5878
		{
hgs
parents:
diff changeset
  5879
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5880
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5881
		}
hgs
parents:
diff changeset
  5882
hgs
parents:
diff changeset
  5883
		if (cert_entry->m_SerialNumberPresent == true)
hgs
parents:
diff changeset
  5884
		{
hgs
parents:
diff changeset
  5885
			++member_index;
hgs
parents:
diff changeset
  5886
hgs
parents:
diff changeset
  5887
			status = read_parameter_data(
hgs
parents:
diff changeset
  5888
				&settings_members,
hgs
parents:
diff changeset
  5889
				member_index,
hgs
parents:
diff changeset
  5890
				&(cert_entry->m_SerialNumber));
hgs
parents:
diff changeset
  5891
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5892
			{
hgs
parents:
diff changeset
  5893
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5894
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5895
			}
hgs
parents:
diff changeset
  5896
		}
hgs
parents:
diff changeset
  5897
	}
hgs
parents:
diff changeset
  5898
hgs
parents:
diff changeset
  5899
	++member_index;
hgs
parents:
diff changeset
  5900
hgs
parents:
diff changeset
  5901
	{
hgs
parents:
diff changeset
  5902
		// Subject key in binary form. This is mandatory.
hgs
parents:
diff changeset
  5903
		status = read_parameter_data(
hgs
parents:
diff changeset
  5904
			&settings_members,
hgs
parents:
diff changeset
  5905
			member_index,
hgs
parents:
diff changeset
  5906
			&(cert_entry->m_SubjectKeyIDPresent));
hgs
parents:
diff changeset
  5907
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5908
		{
hgs
parents:
diff changeset
  5909
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5910
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5911
		}
hgs
parents:
diff changeset
  5912
hgs
parents:
diff changeset
  5913
		if (cert_entry->m_SubjectKeyIDPresent == true)
hgs
parents:
diff changeset
  5914
		{
hgs
parents:
diff changeset
  5915
			++member_index;
hgs
parents:
diff changeset
  5916
hgs
parents:
diff changeset
  5917
			status = read_parameter_data(
hgs
parents:
diff changeset
  5918
				&settings_members,
hgs
parents:
diff changeset
  5919
				member_index,
hgs
parents:
diff changeset
  5920
				&(cert_entry->m_SubjectKeyID));
hgs
parents:
diff changeset
  5921
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5922
			{
hgs
parents:
diff changeset
  5923
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5924
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5925
			}
hgs
parents:
diff changeset
  5926
		}
hgs
parents:
diff changeset
  5927
	}
hgs
parents:
diff changeset
  5928
hgs
parents:
diff changeset
  5929
	++member_index;
hgs
parents:
diff changeset
  5930
hgs
parents:
diff changeset
  5931
	{
hgs
parents:
diff changeset
  5932
		// Subject key in binary form. This is mandatory.
hgs
parents:
diff changeset
  5933
		status = read_parameter_data(
hgs
parents:
diff changeset
  5934
			&settings_members,
hgs
parents:
diff changeset
  5935
			member_index,
hgs
parents:
diff changeset
  5936
			&(cert_entry->m_ThumbprintPresent));
hgs
parents:
diff changeset
  5937
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5938
		{
hgs
parents:
diff changeset
  5939
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5940
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5941
		}
hgs
parents:
diff changeset
  5942
hgs
parents:
diff changeset
  5943
		if (cert_entry->m_ThumbprintPresent == true)
hgs
parents:
diff changeset
  5944
		{
hgs
parents:
diff changeset
  5945
			++member_index;
hgs
parents:
diff changeset
  5946
hgs
parents:
diff changeset
  5947
			status = read_parameter_data(
hgs
parents:
diff changeset
  5948
				&settings_members,
hgs
parents:
diff changeset
  5949
				member_index,
hgs
parents:
diff changeset
  5950
				&(cert_entry->m_Thumbprint));
hgs
parents:
diff changeset
  5951
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5952
			{
hgs
parents:
diff changeset
  5953
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5954
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5955
			}
hgs
parents:
diff changeset
  5956
		}
hgs
parents:
diff changeset
  5957
	}
hgs
parents:
diff changeset
  5958
hgs
parents:
diff changeset
  5959
	++member_index;
hgs
parents:
diff changeset
  5960
hgs
parents:
diff changeset
  5961
	{
hgs
parents:
diff changeset
  5962
		// This holds only the certificate label. This is the text UI will show.
hgs
parents:
diff changeset
  5963
		status = read_parameter_data(
hgs
parents:
diff changeset
  5964
			&settings_members,
hgs
parents:
diff changeset
  5965
			member_index,
hgs
parents:
diff changeset
  5966
			&(cert_entry->m_LabelPresent));
hgs
parents:
diff changeset
  5967
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5968
		{
hgs
parents:
diff changeset
  5969
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5970
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5971
		}
hgs
parents:
diff changeset
  5972
hgs
parents:
diff changeset
  5973
		if (cert_entry->m_LabelPresent == true)
hgs
parents:
diff changeset
  5974
		{
hgs
parents:
diff changeset
  5975
			++member_index;
hgs
parents:
diff changeset
  5976
hgs
parents:
diff changeset
  5977
			status = read_parameter_data(
hgs
parents:
diff changeset
  5978
				&settings_members,
hgs
parents:
diff changeset
  5979
				member_index,
hgs
parents:
diff changeset
  5980
				&(cert_entry->m_Label));
hgs
parents:
diff changeset
  5981
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  5982
			{
hgs
parents:
diff changeset
  5983
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  5984
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  5985
			}
hgs
parents:
diff changeset
  5986
		}
hgs
parents:
diff changeset
  5987
	}
hgs
parents:
diff changeset
  5988
hgs
parents:
diff changeset
  5989
	++member_index;
hgs
parents:
diff changeset
  5990
hgs
parents:
diff changeset
  5991
	{
hgs
parents:
diff changeset
  5992
		// Primary name of the certificate if any, UI uses this.
hgs
parents:
diff changeset
  5993
		status = read_parameter_data(
hgs
parents:
diff changeset
  5994
			&settings_members,
hgs
parents:
diff changeset
  5995
			member_index,
hgs
parents:
diff changeset
  5996
			&(cert_entry->m_PrimaryNamePresent));
hgs
parents:
diff changeset
  5997
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  5998
		{
hgs
parents:
diff changeset
  5999
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6000
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6001
		}
hgs
parents:
diff changeset
  6002
hgs
parents:
diff changeset
  6003
		if (cert_entry->m_PrimaryNamePresent == true)
hgs
parents:
diff changeset
  6004
		{
hgs
parents:
diff changeset
  6005
			++member_index;
hgs
parents:
diff changeset
  6006
hgs
parents:
diff changeset
  6007
			status = read_parameter_data(
hgs
parents:
diff changeset
  6008
				&settings_members,
hgs
parents:
diff changeset
  6009
				member_index,
hgs
parents:
diff changeset
  6010
				&(cert_entry->m_PrimaryName));
hgs
parents:
diff changeset
  6011
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6012
			{
hgs
parents:
diff changeset
  6013
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6014
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6015
			}
hgs
parents:
diff changeset
  6016
		}
hgs
parents:
diff changeset
  6017
	}
hgs
parents:
diff changeset
  6018
hgs
parents:
diff changeset
  6019
	++member_index;
hgs
parents:
diff changeset
  6020
hgs
parents:
diff changeset
  6021
	{
hgs
parents:
diff changeset
  6022
		// Secondary name of the certificate if any, UI uses this.
hgs
parents:
diff changeset
  6023
		status = read_parameter_data(
hgs
parents:
diff changeset
  6024
			&settings_members,
hgs
parents:
diff changeset
  6025
			member_index,
hgs
parents:
diff changeset
  6026
			&(cert_entry->m_SecondaryNamePresent));
hgs
parents:
diff changeset
  6027
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  6028
		{
hgs
parents:
diff changeset
  6029
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6030
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6031
		}
hgs
parents:
diff changeset
  6032
hgs
parents:
diff changeset
  6033
		if (cert_entry->m_SecondaryNamePresent == true)
hgs
parents:
diff changeset
  6034
		{
hgs
parents:
diff changeset
  6035
			++member_index;
hgs
parents:
diff changeset
  6036
hgs
parents:
diff changeset
  6037
			status = read_parameter_data(
hgs
parents:
diff changeset
  6038
				&settings_members,
hgs
parents:
diff changeset
  6039
				member_index,
hgs
parents:
diff changeset
  6040
				&(cert_entry->m_SecondaryName));
hgs
parents:
diff changeset
  6041
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6042
			{
hgs
parents:
diff changeset
  6043
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6044
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6045
			}
hgs
parents:
diff changeset
  6046
		}
hgs
parents:
diff changeset
  6047
	}
hgs
parents:
diff changeset
  6048
hgs
parents:
diff changeset
  6049
	++member_index;
hgs
parents:
diff changeset
  6050
hgs
parents:
diff changeset
  6051
	{
hgs
parents:
diff changeset
  6052
		// UI uses this to indicate enabled certificate.
hgs
parents:
diff changeset
  6053
		status = read_parameter_data(
hgs
parents:
diff changeset
  6054
			&settings_members,
hgs
parents:
diff changeset
  6055
			member_index,
hgs
parents:
diff changeset
  6056
			&(cert_entry->m_iIsEnabledPresent));
hgs
parents:
diff changeset
  6057
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  6058
		{
hgs
parents:
diff changeset
  6059
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6060
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6061
		}
hgs
parents:
diff changeset
  6062
hgs
parents:
diff changeset
  6063
		if (cert_entry->m_iIsEnabledPresent == true)
hgs
parents:
diff changeset
  6064
		{
hgs
parents:
diff changeset
  6065
			++member_index;
hgs
parents:
diff changeset
  6066
hgs
parents:
diff changeset
  6067
			status = read_parameter_data(
hgs
parents:
diff changeset
  6068
				&settings_members,
hgs
parents:
diff changeset
  6069
				member_index,
hgs
parents:
diff changeset
  6070
				&(cert_entry->m_iIsEnabled));
hgs
parents:
diff changeset
  6071
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6072
			{
hgs
parents:
diff changeset
  6073
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6074
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6075
			}
hgs
parents:
diff changeset
  6076
		}
hgs
parents:
diff changeset
  6077
	}
hgs
parents:
diff changeset
  6078
hgs
parents:
diff changeset
  6079
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6080
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6081
}
hgs
parents:
diff changeset
  6082
hgs
parents:
diff changeset
  6083
//--------------------------------------------------
hgs
parents:
diff changeset
  6084
hgs
parents:
diff changeset
  6085
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6086
	const eap_tlv_header_c * const ushort_array_header,
hgs
parents:
diff changeset
  6087
	eap_array_c<u16_t> * const ushort_array)
hgs
parents:
diff changeset
  6088
{
hgs
parents:
diff changeset
  6089
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6090
hgs
parents:
diff changeset
  6091
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6092
		m_am_tools,
hgs
parents:
diff changeset
  6093
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6094
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6095
		ushort_array_header->get_type(),
hgs
parents:
diff changeset
  6096
		 get_type_string(static_cast<eap_tlv_message_type_e>(ushort_array_header->get_type()))));
hgs
parents:
diff changeset
  6097
hgs
parents:
diff changeset
  6098
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6099
		m_am_tools,
hgs
parents:
diff changeset
  6100
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6101
		(EAPL("get_parameter_data(eap_array_c<u16_t> *)"),
hgs
parents:
diff changeset
  6102
		ushort_array_header->get_header_buffer(ushort_array_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6103
		ushort_array_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6104
hgs
parents:
diff changeset
  6105
	if (static_cast<eap_tlv_message_type_e>(ushort_array_header->get_type())
hgs
parents:
diff changeset
  6106
		!= eap_tlv_message_type_array)
hgs
parents:
diff changeset
  6107
	{
hgs
parents:
diff changeset
  6108
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6109
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6110
	}
hgs
parents:
diff changeset
  6111
hgs
parents:
diff changeset
  6112
	eap_process_tlv_message_data_c ushort_array_data(m_am_tools);
hgs
parents:
diff changeset
  6113
hgs
parents:
diff changeset
  6114
	if (ushort_array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6115
	{
hgs
parents:
diff changeset
  6116
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6117
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6118
	}
hgs
parents:
diff changeset
  6119
hgs
parents:
diff changeset
  6120
	eap_status_e status = ushort_array_data.set_message_data(
hgs
parents:
diff changeset
  6121
		ushort_array_header->get_value_length(),
hgs
parents:
diff changeset
  6122
		ushort_array_header->get_value(ushort_array_header->get_value_length()));
hgs
parents:
diff changeset
  6123
hgs
parents:
diff changeset
  6124
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6125
	{
hgs
parents:
diff changeset
  6126
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6127
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6128
	}
hgs
parents:
diff changeset
  6129
hgs
parents:
diff changeset
  6130
	eap_array_c<eap_tlv_header_c> ushort_array_members(m_am_tools);
hgs
parents:
diff changeset
  6131
hgs
parents:
diff changeset
  6132
	status = ushort_array_data.parse_message_data(&ushort_array_members);
hgs
parents:
diff changeset
  6133
hgs
parents:
diff changeset
  6134
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6135
	{
hgs
parents:
diff changeset
  6136
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6137
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6138
	}
hgs
parents:
diff changeset
  6139
hgs
parents:
diff changeset
  6140
hgs
parents:
diff changeset
  6141
	for (u32_t ind_member = 0ul; ind_member < ushort_array_members.get_object_count(); ind_member++)
hgs
parents:
diff changeset
  6142
	{
hgs
parents:
diff changeset
  6143
		u16_t * const ushort_value = new u16_t;
hgs
parents:
diff changeset
  6144
hgs
parents:
diff changeset
  6145
		eap_automatic_variable_c<u16_t> automatic_ushort_value(m_am_tools, ushort_value);
hgs
parents:
diff changeset
  6146
hgs
parents:
diff changeset
  6147
		if (ushort_value == 0)
hgs
parents:
diff changeset
  6148
		{
hgs
parents:
diff changeset
  6149
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6150
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6151
		}
hgs
parents:
diff changeset
  6152
hgs
parents:
diff changeset
  6153
		{
hgs
parents:
diff changeset
  6154
			const eap_tlv_header_c * const ushort_header = ushort_array_members.get_object(ind_member);
hgs
parents:
diff changeset
  6155
			if (ushort_header == 0)
hgs
parents:
diff changeset
  6156
			{
hgs
parents:
diff changeset
  6157
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6158
				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6159
			}
hgs
parents:
diff changeset
  6160
hgs
parents:
diff changeset
  6161
			status = ushort_array_data.get_parameter_data(ushort_header, ushort_value);
hgs
parents:
diff changeset
  6162
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6163
			{
hgs
parents:
diff changeset
  6164
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6165
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6166
			}
hgs
parents:
diff changeset
  6167
hgs
parents:
diff changeset
  6168
			automatic_ushort_value.do_not_free_variable();
hgs
parents:
diff changeset
  6169
hgs
parents:
diff changeset
  6170
			status = ushort_array->add_object(ushort_value, true);
hgs
parents:
diff changeset
  6171
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6172
			{
hgs
parents:
diff changeset
  6173
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6174
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6175
			}
hgs
parents:
diff changeset
  6176
		}
hgs
parents:
diff changeset
  6177
	} // for ()
hgs
parents:
diff changeset
  6178
hgs
parents:
diff changeset
  6179
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6180
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6181
}
hgs
parents:
diff changeset
  6182
hgs
parents:
diff changeset
  6183
//--------------------------------------------------
hgs
parents:
diff changeset
  6184
hgs
parents:
diff changeset
  6185
EAP_FUNC_EXPORT u32_t eap_process_tlv_message_data_c::get_payload_size(
hgs
parents:
diff changeset
  6186
	EAP_TEMPLATE_CONST eap_array_c<eap_type_value_e> * const eap_type_array) const
hgs
parents:
diff changeset
  6187
{
hgs
parents:
diff changeset
  6188
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6189
		m_am_tools,
hgs
parents:
diff changeset
  6190
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6191
		(EAPL("eap_process_tlv_message_data_c::get_payload_size(eap_array_c<eap_type_value_e> * )\n")));
hgs
parents:
diff changeset
  6192
hgs
parents:
diff changeset
  6193
	u32_t size = eap_type_array->get_object_count()
hgs
parents:
diff changeset
  6194
				* (eap_tlv_header_c::get_header_length()
hgs
parents:
diff changeset
  6195
					+ eap_expanded_type_c::get_eap_expanded_type_size()); // Size of eap_type_value_e
hgs
parents:
diff changeset
  6196
hgs
parents:
diff changeset
  6197
	return (size);
hgs
parents:
diff changeset
  6198
}
hgs
parents:
diff changeset
  6199
hgs
parents:
diff changeset
  6200
//--------------------------------------------------
hgs
parents:
diff changeset
  6201
hgs
parents:
diff changeset
  6202
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::add_parameter_data(
hgs
parents:
diff changeset
  6203
	EAP_TEMPLATE_CONST eap_array_c<eap_type_value_e> * const eap_type_array)
hgs
parents:
diff changeset
  6204
{
hgs
parents:
diff changeset
  6205
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6206
		m_am_tools,
hgs
parents:
diff changeset
  6207
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6208
		(EAPL("eap_process_tlv_message_data_c::add_parameter_data(eap_array_c<eap_type_value_e> * )\n")));
hgs
parents:
diff changeset
  6209
hgs
parents:
diff changeset
  6210
	const u32_t size_of_eap_type_array(get_payload_size(eap_type_array));
hgs
parents:
diff changeset
  6211
hgs
parents:
diff changeset
  6212
	eap_status_e status = add_structured_parameter_header(
hgs
parents:
diff changeset
  6213
		eap_tlv_message_type_array,
hgs
parents:
diff changeset
  6214
		size_of_eap_type_array);
hgs
parents:
diff changeset
  6215
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6216
	{
hgs
parents:
diff changeset
  6217
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6218
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6219
	}
hgs
parents:
diff changeset
  6220
hgs
parents:
diff changeset
  6221
	for (u32_t ind = 0ul; ind < eap_type_array->get_object_count(); ind++)
hgs
parents:
diff changeset
  6222
	{
hgs
parents:
diff changeset
  6223
		const eap_type_value_e * const value = eap_type_array->get_object(ind);
hgs
parents:
diff changeset
  6224
		if (value != 0)
hgs
parents:
diff changeset
  6225
		{
hgs
parents:
diff changeset
  6226
			status = add_parameter_data(*value);
hgs
parents:
diff changeset
  6227
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6228
			{
hgs
parents:
diff changeset
  6229
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6230
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6231
			}
hgs
parents:
diff changeset
  6232
		}
hgs
parents:
diff changeset
  6233
	}
hgs
parents:
diff changeset
  6234
hgs
parents:
diff changeset
  6235
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6236
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6237
}
hgs
parents:
diff changeset
  6238
hgs
parents:
diff changeset
  6239
//--------------------------------------------------
hgs
parents:
diff changeset
  6240
hgs
parents:
diff changeset
  6241
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6242
	const eap_tlv_header_c * const eap_type_array_header,
hgs
parents:
diff changeset
  6243
	eap_array_c<eap_type_value_e> * const eap_type_array)
hgs
parents:
diff changeset
  6244
{
hgs
parents:
diff changeset
  6245
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6246
hgs
parents:
diff changeset
  6247
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6248
		m_am_tools,
hgs
parents:
diff changeset
  6249
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6250
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6251
		eap_type_array_header->get_type(),
hgs
parents:
diff changeset
  6252
		 get_type_string(static_cast<eap_tlv_message_type_e>(eap_type_array_header->get_type()))));
hgs
parents:
diff changeset
  6253
hgs
parents:
diff changeset
  6254
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6255
		m_am_tools,
hgs
parents:
diff changeset
  6256
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6257
		(EAPL("get_parameter_data(eap_array_c<eap_type_value_e> *)"),
hgs
parents:
diff changeset
  6258
		eap_type_array_header->get_header_buffer(eap_type_array_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6259
		eap_type_array_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6260
hgs
parents:
diff changeset
  6261
	if (static_cast<eap_tlv_message_type_e>(eap_type_array_header->get_type())
hgs
parents:
diff changeset
  6262
		!= eap_tlv_message_type_array)
hgs
parents:
diff changeset
  6263
	{
hgs
parents:
diff changeset
  6264
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6265
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6266
	}
hgs
parents:
diff changeset
  6267
hgs
parents:
diff changeset
  6268
	eap_process_tlv_message_data_c ushort_array_data(m_am_tools);
hgs
parents:
diff changeset
  6269
hgs
parents:
diff changeset
  6270
	if (ushort_array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6271
	{
hgs
parents:
diff changeset
  6272
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6273
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6274
	}
hgs
parents:
diff changeset
  6275
hgs
parents:
diff changeset
  6276
	eap_status_e status = ushort_array_data.set_message_data(
hgs
parents:
diff changeset
  6277
		eap_type_array_header->get_value_length(),
hgs
parents:
diff changeset
  6278
		eap_type_array_header->get_value(eap_type_array_header->get_value_length()));
hgs
parents:
diff changeset
  6279
hgs
parents:
diff changeset
  6280
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6281
	{
hgs
parents:
diff changeset
  6282
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6283
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6284
	}
hgs
parents:
diff changeset
  6285
hgs
parents:
diff changeset
  6286
	eap_array_c<eap_tlv_header_c> ushort_array_members(m_am_tools);
hgs
parents:
diff changeset
  6287
hgs
parents:
diff changeset
  6288
	status = ushort_array_data.parse_message_data(&ushort_array_members);
hgs
parents:
diff changeset
  6289
hgs
parents:
diff changeset
  6290
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6291
	{
hgs
parents:
diff changeset
  6292
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6293
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6294
	}
hgs
parents:
diff changeset
  6295
hgs
parents:
diff changeset
  6296
hgs
parents:
diff changeset
  6297
	for (u32_t ind_member = 0ul; ind_member < ushort_array_members.get_object_count(); ind_member++)
hgs
parents:
diff changeset
  6298
	{
hgs
parents:
diff changeset
  6299
		eap_type_value_e * const eap_type_value = new eap_type_value_e();
hgs
parents:
diff changeset
  6300
hgs
parents:
diff changeset
  6301
		eap_automatic_variable_c<eap_type_value_e> automatic_eap_type_value(m_am_tools, eap_type_value);
hgs
parents:
diff changeset
  6302
hgs
parents:
diff changeset
  6303
		if (eap_type_value == 0)
hgs
parents:
diff changeset
  6304
		{
hgs
parents:
diff changeset
  6305
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6306
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6307
		}
hgs
parents:
diff changeset
  6308
hgs
parents:
diff changeset
  6309
		{
hgs
parents:
diff changeset
  6310
			const eap_tlv_header_c * const eap_type_value_header = ushort_array_members.get_object(ind_member);
hgs
parents:
diff changeset
  6311
			if (eap_type_value_header == 0)
hgs
parents:
diff changeset
  6312
			{
hgs
parents:
diff changeset
  6313
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6314
				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6315
			}
hgs
parents:
diff changeset
  6316
hgs
parents:
diff changeset
  6317
			status = ushort_array_data.get_parameter_data(eap_type_value_header, eap_type_value);
hgs
parents:
diff changeset
  6318
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6319
			{
hgs
parents:
diff changeset
  6320
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6321
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6322
			}
hgs
parents:
diff changeset
  6323
hgs
parents:
diff changeset
  6324
			automatic_eap_type_value.do_not_free_variable();
hgs
parents:
diff changeset
  6325
hgs
parents:
diff changeset
  6326
			status = eap_type_array->add_object(eap_type_value, true);
hgs
parents:
diff changeset
  6327
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6328
			{
hgs
parents:
diff changeset
  6329
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6330
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6331
			}
hgs
parents:
diff changeset
  6332
		}
hgs
parents:
diff changeset
  6333
	} // for ()
hgs
parents:
diff changeset
  6334
hgs
parents:
diff changeset
  6335
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6336
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6337
}
hgs
parents:
diff changeset
  6338
hgs
parents:
diff changeset
  6339
//--------------------------------------------------
hgs
parents:
diff changeset
  6340
hgs
parents:
diff changeset
  6341
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6342
	const eap_tlv_header_c * const cert_array_header,
hgs
parents:
diff changeset
  6343
	eap_array_c<eap_certificate_entry_c> * const cert_array)
hgs
parents:
diff changeset
  6344
{
hgs
parents:
diff changeset
  6345
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6346
hgs
parents:
diff changeset
  6347
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6348
		m_am_tools,
hgs
parents:
diff changeset
  6349
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6350
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6351
		cert_array_header->get_type(),
hgs
parents:
diff changeset
  6352
		 get_type_string(static_cast<eap_tlv_message_type_e>(cert_array_header->get_type()))));
hgs
parents:
diff changeset
  6353
hgs
parents:
diff changeset
  6354
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6355
		m_am_tools,
hgs
parents:
diff changeset
  6356
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6357
		(EAPL("get_parameter_data(eap_array_c<eap_certificate_entry_c> *)"),
hgs
parents:
diff changeset
  6358
		cert_array_header->get_header_buffer(cert_array_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6359
		cert_array_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6360
hgs
parents:
diff changeset
  6361
	if (static_cast<eap_tlv_message_type_e>(cert_array_header->get_type())
hgs
parents:
diff changeset
  6362
		!= eap_tlv_message_type_array)
hgs
parents:
diff changeset
  6363
	{
hgs
parents:
diff changeset
  6364
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6365
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6366
	}
hgs
parents:
diff changeset
  6367
hgs
parents:
diff changeset
  6368
	eap_process_tlv_message_data_c cert_array_data(m_am_tools);
hgs
parents:
diff changeset
  6369
hgs
parents:
diff changeset
  6370
	if (cert_array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6371
	{
hgs
parents:
diff changeset
  6372
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6373
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6374
	}
hgs
parents:
diff changeset
  6375
hgs
parents:
diff changeset
  6376
	eap_status_e status = cert_array_data.set_message_data(
hgs
parents:
diff changeset
  6377
		cert_array_header->get_value_length(),
hgs
parents:
diff changeset
  6378
		cert_array_header->get_value(cert_array_header->get_value_length()));
hgs
parents:
diff changeset
  6379
hgs
parents:
diff changeset
  6380
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6381
	{
hgs
parents:
diff changeset
  6382
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6383
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6384
	}
hgs
parents:
diff changeset
  6385
hgs
parents:
diff changeset
  6386
	eap_array_c<eap_tlv_header_c> cert_array_members(m_am_tools);
hgs
parents:
diff changeset
  6387
hgs
parents:
diff changeset
  6388
	status = cert_array_data.parse_message_data(&cert_array_members);
hgs
parents:
diff changeset
  6389
hgs
parents:
diff changeset
  6390
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6391
	{
hgs
parents:
diff changeset
  6392
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6393
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6394
	}
hgs
parents:
diff changeset
  6395
hgs
parents:
diff changeset
  6396
hgs
parents:
diff changeset
  6397
	for (u32_t ind_member = 0ul; ind_member < cert_array_members.get_object_count(); ind_member++)
hgs
parents:
diff changeset
  6398
	{
hgs
parents:
diff changeset
  6399
		eap_certificate_entry_c * const cert_entry = new eap_certificate_entry_c(m_am_tools);
hgs
parents:
diff changeset
  6400
hgs
parents:
diff changeset
  6401
		eap_automatic_variable_c<eap_certificate_entry_c> automatic_cert_entry(m_am_tools, cert_entry);
hgs
parents:
diff changeset
  6402
hgs
parents:
diff changeset
  6403
		if (cert_entry == 0)
hgs
parents:
diff changeset
  6404
		{
hgs
parents:
diff changeset
  6405
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6406
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6407
		}
hgs
parents:
diff changeset
  6408
hgs
parents:
diff changeset
  6409
		{
hgs
parents:
diff changeset
  6410
			const eap_tlv_header_c * const cert_entry_header = cert_array_members.get_object(ind_member);
hgs
parents:
diff changeset
  6411
			if (cert_entry_header == 0)
hgs
parents:
diff changeset
  6412
			{
hgs
parents:
diff changeset
  6413
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6414
				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6415
			}
hgs
parents:
diff changeset
  6416
hgs
parents:
diff changeset
  6417
			status = cert_array_data.get_parameter_data(cert_entry_header, cert_entry);
hgs
parents:
diff changeset
  6418
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6419
			{
hgs
parents:
diff changeset
  6420
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6421
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6422
			}
hgs
parents:
diff changeset
  6423
hgs
parents:
diff changeset
  6424
			automatic_cert_entry.do_not_free_variable();
hgs
parents:
diff changeset
  6425
hgs
parents:
diff changeset
  6426
			status = cert_array->add_object(cert_entry, true);
hgs
parents:
diff changeset
  6427
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6428
			{
hgs
parents:
diff changeset
  6429
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6430
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6431
			}
hgs
parents:
diff changeset
  6432
		}
hgs
parents:
diff changeset
  6433
	} // for ()
hgs
parents:
diff changeset
  6434
hgs
parents:
diff changeset
  6435
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6436
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6437
}
hgs
parents:
diff changeset
  6438
hgs
parents:
diff changeset
  6439
//--------------------------------------------------
hgs
parents:
diff changeset
  6440
hgs
parents:
diff changeset
  6441
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6442
hgs
parents:
diff changeset
  6443
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6444
	const eap_tlv_header_c * const network_key_header,
hgs
parents:
diff changeset
  6445
	network_key_and_index_c * const network_key)
hgs
parents:
diff changeset
  6446
{
hgs
parents:
diff changeset
  6447
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6448
hgs
parents:
diff changeset
  6449
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6450
		m_am_tools,
hgs
parents:
diff changeset
  6451
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6452
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6453
		network_key_header->get_type(),
hgs
parents:
diff changeset
  6454
		 get_type_string(static_cast<eap_tlv_message_type_e>(network_key_header->get_type()))));
hgs
parents:
diff changeset
  6455
hgs
parents:
diff changeset
  6456
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6457
		m_am_tools,
hgs
parents:
diff changeset
  6458
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6459
		(EAPL("get_parameter_data(network_key_and_index_c *)"),
hgs
parents:
diff changeset
  6460
		network_key_header->get_header_buffer(network_key_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6461
		network_key_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6462
hgs
parents:
diff changeset
  6463
	if (static_cast<eap_tlv_message_type_e>(network_key_header->get_type())
hgs
parents:
diff changeset
  6464
		!= eap_tlv_message_type_network_key)
hgs
parents:
diff changeset
  6465
	{
hgs
parents:
diff changeset
  6466
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6467
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6468
	}
hgs
parents:
diff changeset
  6469
hgs
parents:
diff changeset
  6470
	eap_process_tlv_message_data_c credential_data(m_am_tools);
hgs
parents:
diff changeset
  6471
hgs
parents:
diff changeset
  6472
	if (credential_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6473
	{
hgs
parents:
diff changeset
  6474
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6475
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6476
	}
hgs
parents:
diff changeset
  6477
hgs
parents:
diff changeset
  6478
	eap_status_e status = credential_data.set_message_data(
hgs
parents:
diff changeset
  6479
		network_key_header->get_value_length(),
hgs
parents:
diff changeset
  6480
		network_key_header->get_value(network_key_header->get_value_length()));
hgs
parents:
diff changeset
  6481
hgs
parents:
diff changeset
  6482
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6483
	{
hgs
parents:
diff changeset
  6484
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6485
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6486
	}
hgs
parents:
diff changeset
  6487
hgs
parents:
diff changeset
  6488
	eap_array_c<eap_tlv_header_c> credential_members(m_am_tools);
hgs
parents:
diff changeset
  6489
hgs
parents:
diff changeset
  6490
	status = credential_data.parse_message_data(&credential_members);
hgs
parents:
diff changeset
  6491
hgs
parents:
diff changeset
  6492
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6493
	{
hgs
parents:
diff changeset
  6494
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6495
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6496
	}
hgs
parents:
diff changeset
  6497
hgs
parents:
diff changeset
  6498
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  6499
hgs
parents:
diff changeset
  6500
	u8_t network_key_index(0ul);
hgs
parents:
diff changeset
  6501
hgs
parents:
diff changeset
  6502
	{
hgs
parents:
diff changeset
  6503
		const eap_tlv_header_c * const network_key_index_header = credential_members.get_object(member_index);
hgs
parents:
diff changeset
  6504
		if (network_key_index_header == 0)
hgs
parents:
diff changeset
  6505
		{
hgs
parents:
diff changeset
  6506
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6507
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6508
		}
hgs
parents:
diff changeset
  6509
hgs
parents:
diff changeset
  6510
		status = credential_data.get_parameter_data(network_key_index_header, &network_key_index);
hgs
parents:
diff changeset
  6511
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  6512
		{
hgs
parents:
diff changeset
  6513
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6514
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6515
		}
hgs
parents:
diff changeset
  6516
	}
hgs
parents:
diff changeset
  6517
hgs
parents:
diff changeset
  6518
	++member_index;
hgs
parents:
diff changeset
  6519
hgs
parents:
diff changeset
  6520
	eap_variable_data_c key(m_am_tools);
hgs
parents:
diff changeset
  6521
hgs
parents:
diff changeset
  6522
	{
hgs
parents:
diff changeset
  6523
		const eap_tlv_header_c * const key_header = credential_members.get_object(member_index);
hgs
parents:
diff changeset
  6524
		if (key_header == 0)
hgs
parents:
diff changeset
  6525
		{
hgs
parents:
diff changeset
  6526
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6527
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6528
		}
hgs
parents:
diff changeset
  6529
hgs
parents:
diff changeset
  6530
		status = credential_data.get_parameter_data(key_header, &key);
hgs
parents:
diff changeset
  6531
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  6532
		{
hgs
parents:
diff changeset
  6533
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6534
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6535
		}
hgs
parents:
diff changeset
  6536
	}
hgs
parents:
diff changeset
  6537
hgs
parents:
diff changeset
  6538
	++member_index;
hgs
parents:
diff changeset
  6539
hgs
parents:
diff changeset
  6540
	network_key->set_network_key_index(network_key_index);
hgs
parents:
diff changeset
  6541
hgs
parents:
diff changeset
  6542
	status = network_key->get_network_key()->set_copy_of_buffer(&key);
hgs
parents:
diff changeset
  6543
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6544
	{
hgs
parents:
diff changeset
  6545
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6546
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6547
	}
hgs
parents:
diff changeset
  6548
hgs
parents:
diff changeset
  6549
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6550
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6551
}
hgs
parents:
diff changeset
  6552
hgs
parents:
diff changeset
  6553
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6554
hgs
parents:
diff changeset
  6555
//--------------------------------------------------
hgs
parents:
diff changeset
  6556
hgs
parents:
diff changeset
  6557
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6558
hgs
parents:
diff changeset
  6559
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6560
	const eap_tlv_header_c * const network_keys_array_header,
hgs
parents:
diff changeset
  6561
	eap_array_c<network_key_and_index_c> * const network_keys_array)
hgs
parents:
diff changeset
  6562
{
hgs
parents:
diff changeset
  6563
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6564
hgs
parents:
diff changeset
  6565
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6566
		m_am_tools,
hgs
parents:
diff changeset
  6567
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6568
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6569
		network_keys_array_header->get_type(),
hgs
parents:
diff changeset
  6570
		 get_type_string(static_cast<eap_tlv_message_type_e>(network_keys_array_header->get_type()))));
hgs
parents:
diff changeset
  6571
hgs
parents:
diff changeset
  6572
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6573
		m_am_tools,
hgs
parents:
diff changeset
  6574
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6575
		(EAPL("get_parameter_data(eap_array_c<network_key_and_index_c> *)"),
hgs
parents:
diff changeset
  6576
		network_keys_array_header->get_header_buffer(network_keys_array_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6577
		network_keys_array_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6578
hgs
parents:
diff changeset
  6579
	if (static_cast<eap_tlv_message_type_e>(network_keys_array_header->get_type())
hgs
parents:
diff changeset
  6580
		!= eap_tlv_message_type_array)
hgs
parents:
diff changeset
  6581
	{
hgs
parents:
diff changeset
  6582
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6583
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6584
	}
hgs
parents:
diff changeset
  6585
hgs
parents:
diff changeset
  6586
	eap_process_tlv_message_data_c credential_array_data(m_am_tools);
hgs
parents:
diff changeset
  6587
hgs
parents:
diff changeset
  6588
	if (credential_array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6589
	{
hgs
parents:
diff changeset
  6590
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6591
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6592
	}
hgs
parents:
diff changeset
  6593
hgs
parents:
diff changeset
  6594
	eap_status_e status = credential_array_data.set_message_data(
hgs
parents:
diff changeset
  6595
		network_keys_array_header->get_value_length(),
hgs
parents:
diff changeset
  6596
		network_keys_array_header->get_value(network_keys_array_header->get_value_length()));
hgs
parents:
diff changeset
  6597
hgs
parents:
diff changeset
  6598
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6599
	{
hgs
parents:
diff changeset
  6600
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6601
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6602
	}
hgs
parents:
diff changeset
  6603
hgs
parents:
diff changeset
  6604
	eap_array_c<eap_tlv_header_c> credential_array_members(m_am_tools);
hgs
parents:
diff changeset
  6605
hgs
parents:
diff changeset
  6606
	status = credential_array_data.parse_message_data(&credential_array_members);
hgs
parents:
diff changeset
  6607
hgs
parents:
diff changeset
  6608
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6609
	{
hgs
parents:
diff changeset
  6610
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6611
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6612
	}
hgs
parents:
diff changeset
  6613
hgs
parents:
diff changeset
  6614
hgs
parents:
diff changeset
  6615
	for (u32_t ind_member = 0ul; ind_member < credential_array_members.get_object_count(); ind_member++)
hgs
parents:
diff changeset
  6616
	{
hgs
parents:
diff changeset
  6617
		network_key_and_index_c * const network_key = new network_key_and_index_c(m_am_tools);
hgs
parents:
diff changeset
  6618
hgs
parents:
diff changeset
  6619
		eap_automatic_variable_c<network_key_and_index_c> automatic_network_key(m_am_tools, network_key);
hgs
parents:
diff changeset
  6620
hgs
parents:
diff changeset
  6621
		if (network_key == 0
hgs
parents:
diff changeset
  6622
			|| network_key->get_is_valid() == false)
hgs
parents:
diff changeset
  6623
		{
hgs
parents:
diff changeset
  6624
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6625
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6626
		}
hgs
parents:
diff changeset
  6627
hgs
parents:
diff changeset
  6628
		{
hgs
parents:
diff changeset
  6629
			const eap_tlv_header_c * const simple_config_credential_header = credential_array_members.get_object(ind_member);
hgs
parents:
diff changeset
  6630
			if (simple_config_credential_header == 0)
hgs
parents:
diff changeset
  6631
			{
hgs
parents:
diff changeset
  6632
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6633
				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6634
			}
hgs
parents:
diff changeset
  6635
hgs
parents:
diff changeset
  6636
			status = credential_array_data.get_parameter_data(simple_config_credential_header, network_key);
hgs
parents:
diff changeset
  6637
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6638
			{
hgs
parents:
diff changeset
  6639
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6640
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6641
			}
hgs
parents:
diff changeset
  6642
hgs
parents:
diff changeset
  6643
			automatic_network_key.do_not_free_variable();
hgs
parents:
diff changeset
  6644
hgs
parents:
diff changeset
  6645
			status = network_keys_array->add_object(network_key, true);
hgs
parents:
diff changeset
  6646
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6647
			{
hgs
parents:
diff changeset
  6648
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6649
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6650
			}
hgs
parents:
diff changeset
  6651
		}
hgs
parents:
diff changeset
  6652
	} // for ()
hgs
parents:
diff changeset
  6653
hgs
parents:
diff changeset
  6654
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6655
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6656
}
hgs
parents:
diff changeset
  6657
hgs
parents:
diff changeset
  6658
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6659
hgs
parents:
diff changeset
  6660
//--------------------------------------------------
hgs
parents:
diff changeset
  6661
hgs
parents:
diff changeset
  6662
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6663
hgs
parents:
diff changeset
  6664
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6665
	const eap_tlv_header_c * const credential_header,
hgs
parents:
diff changeset
  6666
	simple_config_credential_c * const credential)
hgs
parents:
diff changeset
  6667
{
hgs
parents:
diff changeset
  6668
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6669
hgs
parents:
diff changeset
  6670
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6671
		m_am_tools,
hgs
parents:
diff changeset
  6672
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6673
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6674
		credential_header->get_type(),
hgs
parents:
diff changeset
  6675
		 get_type_string(static_cast<eap_tlv_message_type_e>(credential_header->get_type()))));
hgs
parents:
diff changeset
  6676
hgs
parents:
diff changeset
  6677
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6678
		m_am_tools,
hgs
parents:
diff changeset
  6679
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6680
		(EAPL("get_parameter_data(simple_config_credential_c *)"),
hgs
parents:
diff changeset
  6681
		credential_header->get_header_buffer(credential_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6682
		credential_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6683
hgs
parents:
diff changeset
  6684
	if (static_cast<eap_tlv_message_type_e>(credential_header->get_type())
hgs
parents:
diff changeset
  6685
		!= eap_tlv_message_type_protected_setup_credential)
hgs
parents:
diff changeset
  6686
	{
hgs
parents:
diff changeset
  6687
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6688
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6689
	}
hgs
parents:
diff changeset
  6690
hgs
parents:
diff changeset
  6691
	eap_process_tlv_message_data_c credential_data(m_am_tools);
hgs
parents:
diff changeset
  6692
hgs
parents:
diff changeset
  6693
	if (credential_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6694
	{
hgs
parents:
diff changeset
  6695
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6696
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6697
	}
hgs
parents:
diff changeset
  6698
hgs
parents:
diff changeset
  6699
	eap_status_e status = credential_data.set_message_data(
hgs
parents:
diff changeset
  6700
		credential_header->get_value_length(),
hgs
parents:
diff changeset
  6701
		credential_header->get_value(credential_header->get_value_length()));
hgs
parents:
diff changeset
  6702
hgs
parents:
diff changeset
  6703
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6704
	{
hgs
parents:
diff changeset
  6705
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6706
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6707
	}
hgs
parents:
diff changeset
  6708
hgs
parents:
diff changeset
  6709
	eap_array_c<eap_tlv_header_c> credential_members(m_am_tools);
hgs
parents:
diff changeset
  6710
hgs
parents:
diff changeset
  6711
	status = credential_data.parse_message_data(&credential_members);
hgs
parents:
diff changeset
  6712
hgs
parents:
diff changeset
  6713
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6714
	{
hgs
parents:
diff changeset
  6715
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6716
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6717
	}
hgs
parents:
diff changeset
  6718
hgs
parents:
diff changeset
  6719
	u32_t member_index(0ul);
hgs
parents:
diff changeset
  6720
hgs
parents:
diff changeset
  6721
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6722
hgs
parents:
diff changeset
  6723
	u8_t network_index(0ul);
hgs
parents:
diff changeset
  6724
hgs
parents:
diff changeset
  6725
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6726
			&credential_members,
hgs
parents:
diff changeset
  6727
			member_index,
hgs
parents:
diff changeset
  6728
			&network_index);
hgs
parents:
diff changeset
  6729
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6730
	{
hgs
parents:
diff changeset
  6731
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6732
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6733
	}
hgs
parents:
diff changeset
  6734
hgs
parents:
diff changeset
  6735
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6736
hgs
parents:
diff changeset
  6737
	++member_index;
hgs
parents:
diff changeset
  6738
hgs
parents:
diff changeset
  6739
	eap_variable_data_c SSID(m_am_tools);
hgs
parents:
diff changeset
  6740
hgs
parents:
diff changeset
  6741
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6742
			&credential_members,
hgs
parents:
diff changeset
  6743
			member_index,
hgs
parents:
diff changeset
  6744
			&SSID);
hgs
parents:
diff changeset
  6745
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6746
	{
hgs
parents:
diff changeset
  6747
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6748
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6749
	}
hgs
parents:
diff changeset
  6750
hgs
parents:
diff changeset
  6751
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6752
hgs
parents:
diff changeset
  6753
	++member_index;
hgs
parents:
diff changeset
  6754
hgs
parents:
diff changeset
  6755
	simple_config_Authentication_Type_e authentication_type(simple_config_Authentication_Type_None);
hgs
parents:
diff changeset
  6756
hgs
parents:
diff changeset
  6757
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6758
			&credential_members,
hgs
parents:
diff changeset
  6759
			member_index,
hgs
parents:
diff changeset
  6760
			&authentication_type);
hgs
parents:
diff changeset
  6761
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6762
	{
hgs
parents:
diff changeset
  6763
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6764
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6765
	}
hgs
parents:
diff changeset
  6766
hgs
parents:
diff changeset
  6767
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6768
hgs
parents:
diff changeset
  6769
	++member_index;
hgs
parents:
diff changeset
  6770
hgs
parents:
diff changeset
  6771
	simple_config_Encryption_Type_e encryption_type(simple_config_Encryption_Type_None);
hgs
parents:
diff changeset
  6772
hgs
parents:
diff changeset
  6773
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6774
			&credential_members,
hgs
parents:
diff changeset
  6775
			member_index,
hgs
parents:
diff changeset
  6776
			&encryption_type);
hgs
parents:
diff changeset
  6777
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6778
	{
hgs
parents:
diff changeset
  6779
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6780
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6781
	}
hgs
parents:
diff changeset
  6782
hgs
parents:
diff changeset
  6783
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6784
hgs
parents:
diff changeset
  6785
	++member_index;
hgs
parents:
diff changeset
  6786
hgs
parents:
diff changeset
  6787
	 eap_array_c<network_key_and_index_c> network_keys_array(m_am_tools);
hgs
parents:
diff changeset
  6788
hgs
parents:
diff changeset
  6789
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6790
			&credential_members,
hgs
parents:
diff changeset
  6791
			member_index,
hgs
parents:
diff changeset
  6792
			&network_keys_array);
hgs
parents:
diff changeset
  6793
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6794
	{
hgs
parents:
diff changeset
  6795
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6796
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6797
	}
hgs
parents:
diff changeset
  6798
hgs
parents:
diff changeset
  6799
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6800
hgs
parents:
diff changeset
  6801
	++member_index;
hgs
parents:
diff changeset
  6802
hgs
parents:
diff changeset
  6803
	 eap_variable_data_c MAC_address(m_am_tools);
hgs
parents:
diff changeset
  6804
hgs
parents:
diff changeset
  6805
	status = credential_data.read_parameter_data(
hgs
parents:
diff changeset
  6806
			&credential_members,
hgs
parents:
diff changeset
  6807
			member_index,
hgs
parents:
diff changeset
  6808
			&MAC_address);
hgs
parents:
diff changeset
  6809
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6810
	{
hgs
parents:
diff changeset
  6811
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6812
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6813
	}
hgs
parents:
diff changeset
  6814
hgs
parents:
diff changeset
  6815
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  6816
hgs
parents:
diff changeset
  6817
	credential->set_network_index(network_index);
hgs
parents:
diff changeset
  6818
hgs
parents:
diff changeset
  6819
	status = credential->get_SSID()->set_copy_of_buffer(&SSID);
hgs
parents:
diff changeset
  6820
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6821
	{
hgs
parents:
diff changeset
  6822
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6823
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6824
	}
hgs
parents:
diff changeset
  6825
hgs
parents:
diff changeset
  6826
	credential->set_Authentication_Type(authentication_type);
hgs
parents:
diff changeset
  6827
hgs
parents:
diff changeset
  6828
	credential->set_Encryption_Type(encryption_type);
hgs
parents:
diff changeset
  6829
hgs
parents:
diff changeset
  6830
	status = copy(
hgs
parents:
diff changeset
  6831
		&network_keys_array,
hgs
parents:
diff changeset
  6832
		credential->get_network_keys(),
hgs
parents:
diff changeset
  6833
		m_am_tools,
hgs
parents:
diff changeset
  6834
		false);
hgs
parents:
diff changeset
  6835
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6836
	{
hgs
parents:
diff changeset
  6837
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6838
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6839
	}
hgs
parents:
diff changeset
  6840
hgs
parents:
diff changeset
  6841
	status = credential->get_MAC_address()->set_copy_of_buffer(&MAC_address);
hgs
parents:
diff changeset
  6842
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6843
	{
hgs
parents:
diff changeset
  6844
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6845
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6846
	}
hgs
parents:
diff changeset
  6847
hgs
parents:
diff changeset
  6848
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6849
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6850
}
hgs
parents:
diff changeset
  6851
hgs
parents:
diff changeset
  6852
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6853
hgs
parents:
diff changeset
  6854
//--------------------------------------------------
hgs
parents:
diff changeset
  6855
hgs
parents:
diff changeset
  6856
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6857
hgs
parents:
diff changeset
  6858
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::get_parameter_data(
hgs
parents:
diff changeset
  6859
	const eap_tlv_header_c * const credential_array_header,
hgs
parents:
diff changeset
  6860
	eap_array_c<simple_config_credential_c> * const credential_array)
hgs
parents:
diff changeset
  6861
{
hgs
parents:
diff changeset
  6862
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6863
hgs
parents:
diff changeset
  6864
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  6865
		m_am_tools,
hgs
parents:
diff changeset
  6866
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6867
		(EAPL("eap_process_tlv_message_data_c::get_parameter_data(): type=%d=%s\n"),
hgs
parents:
diff changeset
  6868
		credential_array_header->get_type(),
hgs
parents:
diff changeset
  6869
		 get_type_string(static_cast<eap_tlv_message_type_e>(credential_array_header->get_type()))));
hgs
parents:
diff changeset
  6870
hgs
parents:
diff changeset
  6871
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
  6872
		m_am_tools,
hgs
parents:
diff changeset
  6873
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
  6874
		(EAPL("get_parameter_data(eap_array_c<simple_config_credential_c> *)"),
hgs
parents:
diff changeset
  6875
		credential_array_header->get_header_buffer(credential_array_header->get_header_buffer_length()),
hgs
parents:
diff changeset
  6876
		credential_array_header->get_header_buffer_length()));
hgs
parents:
diff changeset
  6877
hgs
parents:
diff changeset
  6878
	if (static_cast<eap_tlv_message_type_e>(credential_array_header->get_type())
hgs
parents:
diff changeset
  6879
		!= eap_tlv_message_type_array)
hgs
parents:
diff changeset
  6880
	{
hgs
parents:
diff changeset
  6881
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6882
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload);
hgs
parents:
diff changeset
  6883
	}
hgs
parents:
diff changeset
  6884
hgs
parents:
diff changeset
  6885
	eap_process_tlv_message_data_c credential_array_data(m_am_tools);
hgs
parents:
diff changeset
  6886
hgs
parents:
diff changeset
  6887
	if (credential_array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  6888
	{
hgs
parents:
diff changeset
  6889
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6890
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6891
	}
hgs
parents:
diff changeset
  6892
hgs
parents:
diff changeset
  6893
	eap_status_e status = credential_array_data.set_message_data(
hgs
parents:
diff changeset
  6894
		credential_array_header->get_value_length(),
hgs
parents:
diff changeset
  6895
		credential_array_header->get_value(credential_array_header->get_value_length()));
hgs
parents:
diff changeset
  6896
hgs
parents:
diff changeset
  6897
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6898
	{
hgs
parents:
diff changeset
  6899
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6900
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6901
	}
hgs
parents:
diff changeset
  6902
hgs
parents:
diff changeset
  6903
	eap_array_c<eap_tlv_header_c> credential_array_members(m_am_tools);
hgs
parents:
diff changeset
  6904
hgs
parents:
diff changeset
  6905
	status = credential_array_data.parse_message_data(&credential_array_members);
hgs
parents:
diff changeset
  6906
hgs
parents:
diff changeset
  6907
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  6908
	{
hgs
parents:
diff changeset
  6909
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6910
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6911
	}
hgs
parents:
diff changeset
  6912
hgs
parents:
diff changeset
  6913
hgs
parents:
diff changeset
  6914
	for (u32_t ind_member = 0ul; ind_member < credential_array_members.get_object_count(); ind_member++)
hgs
parents:
diff changeset
  6915
	{
hgs
parents:
diff changeset
  6916
		simple_config_credential_c * const simple_config_credential = new simple_config_credential_c(m_am_tools);
hgs
parents:
diff changeset
  6917
hgs
parents:
diff changeset
  6918
		eap_automatic_variable_c<simple_config_credential_c> automatic_simple_config_credential(m_am_tools, simple_config_credential);
hgs
parents:
diff changeset
  6919
hgs
parents:
diff changeset
  6920
		if (simple_config_credential == 0
hgs
parents:
diff changeset
  6921
			|| simple_config_credential->get_is_valid() == false)
hgs
parents:
diff changeset
  6922
		{
hgs
parents:
diff changeset
  6923
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6924
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  6925
		}
hgs
parents:
diff changeset
  6926
hgs
parents:
diff changeset
  6927
		{
hgs
parents:
diff changeset
  6928
			const eap_tlv_header_c * const simple_config_credential_header = credential_array_members.get_object(ind_member);
hgs
parents:
diff changeset
  6929
			if (simple_config_credential_header == 0)
hgs
parents:
diff changeset
  6930
			{
hgs
parents:
diff changeset
  6931
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6932
				return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6933
			}
hgs
parents:
diff changeset
  6934
hgs
parents:
diff changeset
  6935
			status = credential_array_data.get_parameter_data(simple_config_credential_header, simple_config_credential);
hgs
parents:
diff changeset
  6936
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6937
			{
hgs
parents:
diff changeset
  6938
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6939
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6940
			}
hgs
parents:
diff changeset
  6941
hgs
parents:
diff changeset
  6942
			automatic_simple_config_credential.do_not_free_variable();
hgs
parents:
diff changeset
  6943
hgs
parents:
diff changeset
  6944
			status = credential_array->add_object(simple_config_credential, true);
hgs
parents:
diff changeset
  6945
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  6946
			{
hgs
parents:
diff changeset
  6947
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6948
				return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6949
			}
hgs
parents:
diff changeset
  6950
		}
hgs
parents:
diff changeset
  6951
	} // for ()
hgs
parents:
diff changeset
  6952
hgs
parents:
diff changeset
  6953
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6954
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
  6955
}
hgs
parents:
diff changeset
  6956
hgs
parents:
diff changeset
  6957
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  6958
hgs
parents:
diff changeset
  6959
//--------------------------------------------------
hgs
parents:
diff changeset
  6960
hgs
parents:
diff changeset
  6961
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  6962
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  6963
	const u32_t parameter_index,
hgs
parents:
diff changeset
  6964
	eap_am_network_id_c * const out_data)
hgs
parents:
diff changeset
  6965
{
hgs
parents:
diff changeset
  6966
	if (parameters == 0
hgs
parents:
diff changeset
  6967
		|| out_data == 0)
hgs
parents:
diff changeset
  6968
	{
hgs
parents:
diff changeset
  6969
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6970
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6971
	}
hgs
parents:
diff changeset
  6972
hgs
parents:
diff changeset
  6973
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  6974
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  6975
hgs
parents:
diff changeset
  6976
	if (positional_parameter == 0
hgs
parents:
diff changeset
  6977
		|| positional_parameter->get_type() != eap_tlv_message_type_network_id)
hgs
parents:
diff changeset
  6978
	{
hgs
parents:
diff changeset
  6979
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6980
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  6981
	}
hgs
parents:
diff changeset
  6982
hgs
parents:
diff changeset
  6983
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  6984
hgs
parents:
diff changeset
  6985
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  6986
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  6987
}
hgs
parents:
diff changeset
  6988
hgs
parents:
diff changeset
  6989
//--------------------------------------------------
hgs
parents:
diff changeset
  6990
hgs
parents:
diff changeset
  6991
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  6992
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  6993
	const u32_t parameter_index,
hgs
parents:
diff changeset
  6994
	eap_variable_data_c * const out_data)
hgs
parents:
diff changeset
  6995
{
hgs
parents:
diff changeset
  6996
	if (parameters == 0
hgs
parents:
diff changeset
  6997
		|| out_data == 0)
hgs
parents:
diff changeset
  6998
	{
hgs
parents:
diff changeset
  6999
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7000
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7001
	}
hgs
parents:
diff changeset
  7002
hgs
parents:
diff changeset
  7003
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7004
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7005
hgs
parents:
diff changeset
  7006
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7007
		|| positional_parameter->get_type() != eap_tlv_message_type_variable_data)
hgs
parents:
diff changeset
  7008
	{
hgs
parents:
diff changeset
  7009
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7010
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7011
	}
hgs
parents:
diff changeset
  7012
hgs
parents:
diff changeset
  7013
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7014
hgs
parents:
diff changeset
  7015
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7016
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7017
}
hgs
parents:
diff changeset
  7018
hgs
parents:
diff changeset
  7019
//--------------------------------------------------
hgs
parents:
diff changeset
  7020
hgs
parents:
diff changeset
  7021
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7022
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7023
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7024
	const eap_tlv_message_type_e type,
hgs
parents:
diff changeset
  7025
	eap_status_e * const out_data)
hgs
parents:
diff changeset
  7026
{
hgs
parents:
diff changeset
  7027
	if (parameters == 0
hgs
parents:
diff changeset
  7028
		|| out_data == 0)
hgs
parents:
diff changeset
  7029
	{
hgs
parents:
diff changeset
  7030
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7031
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7032
	}
hgs
parents:
diff changeset
  7033
hgs
parents:
diff changeset
  7034
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7035
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7036
hgs
parents:
diff changeset
  7037
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7038
		|| positional_parameter->get_type() != static_cast<eap_tlv_type_t>(type))
hgs
parents:
diff changeset
  7039
	{
hgs
parents:
diff changeset
  7040
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7041
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7042
	}
hgs
parents:
diff changeset
  7043
hgs
parents:
diff changeset
  7044
	u32_t value(0ul);
hgs
parents:
diff changeset
  7045
hgs
parents:
diff changeset
  7046
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7047
hgs
parents:
diff changeset
  7048
	*out_data = static_cast<eap_status_e>(value);
hgs
parents:
diff changeset
  7049
hgs
parents:
diff changeset
  7050
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7051
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7052
}
hgs
parents:
diff changeset
  7053
hgs
parents:
diff changeset
  7054
//--------------------------------------------------
hgs
parents:
diff changeset
  7055
hgs
parents:
diff changeset
  7056
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7057
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7058
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7059
	eap_array_c<eap_am_network_id_c> * const out_data)
hgs
parents:
diff changeset
  7060
{
hgs
parents:
diff changeset
  7061
	if (parameters == 0
hgs
parents:
diff changeset
  7062
		|| out_data == 0)
hgs
parents:
diff changeset
  7063
	{
hgs
parents:
diff changeset
  7064
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7065
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7066
	}
hgs
parents:
diff changeset
  7067
hgs
parents:
diff changeset
  7068
	const eap_tlv_header_c * const array_of_network_ids
hgs
parents:
diff changeset
  7069
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7070
hgs
parents:
diff changeset
  7071
	if (array_of_network_ids == 0
hgs
parents:
diff changeset
  7072
		|| array_of_network_ids->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7073
	{
hgs
parents:
diff changeset
  7074
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7075
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7076
	}
hgs
parents:
diff changeset
  7077
hgs
parents:
diff changeset
  7078
	eap_process_tlv_message_data_c array_data(m_am_tools);
hgs
parents:
diff changeset
  7079
hgs
parents:
diff changeset
  7080
	if (array_data.get_is_valid() == false)
hgs
parents:
diff changeset
  7081
	{
hgs
parents:
diff changeset
  7082
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7083
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  7084
	}
hgs
parents:
diff changeset
  7085
hgs
parents:
diff changeset
  7086
	eap_status_e status = array_data.set_message_data(
hgs
parents:
diff changeset
  7087
		array_of_network_ids->get_value_length(),
hgs
parents:
diff changeset
  7088
		array_of_network_ids->get_value(array_of_network_ids->get_value_length()));
hgs
parents:
diff changeset
  7089
hgs
parents:
diff changeset
  7090
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  7091
	{
hgs
parents:
diff changeset
  7092
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7093
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7094
	}
hgs
parents:
diff changeset
  7095
hgs
parents:
diff changeset
  7096
	eap_array_c<eap_tlv_header_c> network_ids(m_am_tools);
hgs
parents:
diff changeset
  7097
hgs
parents:
diff changeset
  7098
	status = array_data.parse_message_data(
hgs
parents:
diff changeset
  7099
		&network_ids);
hgs
parents:
diff changeset
  7100
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  7101
	{
hgs
parents:
diff changeset
  7102
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7103
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7104
	}
hgs
parents:
diff changeset
  7105
hgs
parents:
diff changeset
  7106
	for (u32_t ind = 0ul; ind < network_ids.get_object_count(); ++ind)
hgs
parents:
diff changeset
  7107
	{
hgs
parents:
diff changeset
  7108
		const eap_tlv_header_c * const header = network_ids.get_object(ind);
hgs
parents:
diff changeset
  7109
hgs
parents:
diff changeset
  7110
		if (header == 0)
hgs
parents:
diff changeset
  7111
		{
hgs
parents:
diff changeset
  7112
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7113
			return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7114
		}
hgs
parents:
diff changeset
  7115
hgs
parents:
diff changeset
  7116
		eap_am_network_id_c * const new_network_id = new eap_am_network_id_c(m_am_tools);
hgs
parents:
diff changeset
  7117
		if (new_network_id == 0)
hgs
parents:
diff changeset
  7118
		{
hgs
parents:
diff changeset
  7119
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7120
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
  7121
		}
hgs
parents:
diff changeset
  7122
hgs
parents:
diff changeset
  7123
		eap_automatic_variable_c<eap_am_network_id_c> automatic_new_network_id(m_am_tools, new_network_id);
hgs
parents:
diff changeset
  7124
hgs
parents:
diff changeset
  7125
		status = array_data.get_parameter_data(header, new_network_id);
hgs
parents:
diff changeset
  7126
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  7127
		{
hgs
parents:
diff changeset
  7128
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7129
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7130
		}
hgs
parents:
diff changeset
  7131
hgs
parents:
diff changeset
  7132
		automatic_new_network_id.do_not_free_variable();
hgs
parents:
diff changeset
  7133
hgs
parents:
diff changeset
  7134
		status = out_data->add_object(
hgs
parents:
diff changeset
  7135
			new_network_id,
hgs
parents:
diff changeset
  7136
			true);
hgs
parents:
diff changeset
  7137
		if (status != eap_status_ok)
hgs
parents:
diff changeset
  7138
		{
hgs
parents:
diff changeset
  7139
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7140
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7141
		}
hgs
parents:
diff changeset
  7142
hgs
parents:
diff changeset
  7143
	} // for()
hgs
parents:
diff changeset
  7144
hgs
parents:
diff changeset
  7145
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7146
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7147
}
hgs
parents:
diff changeset
  7148
hgs
parents:
diff changeset
  7149
//--------------------------------------------------
hgs
parents:
diff changeset
  7150
hgs
parents:
diff changeset
  7151
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7152
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7153
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7154
	eap_state_notification_c * * const out_data)
hgs
parents:
diff changeset
  7155
{
hgs
parents:
diff changeset
  7156
	if (parameters == 0
hgs
parents:
diff changeset
  7157
		|| out_data == 0)
hgs
parents:
diff changeset
  7158
	{
hgs
parents:
diff changeset
  7159
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7160
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7161
	}
hgs
parents:
diff changeset
  7162
hgs
parents:
diff changeset
  7163
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7164
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7165
hgs
parents:
diff changeset
  7166
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7167
		|| positional_parameter->get_type() != eap_tlv_message_type_eap_state_notification)
hgs
parents:
diff changeset
  7168
	{
hgs
parents:
diff changeset
  7169
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7170
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7171
	}
hgs
parents:
diff changeset
  7172
hgs
parents:
diff changeset
  7173
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7174
hgs
parents:
diff changeset
  7175
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7176
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7177
}
hgs
parents:
diff changeset
  7178
hgs
parents:
diff changeset
  7179
//--------------------------------------------------
hgs
parents:
diff changeset
  7180
hgs
parents:
diff changeset
  7181
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7182
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7183
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7184
	eapol_RSNA_key_header_c::eapol_RSNA_cipher_e * const out_data)
hgs
parents:
diff changeset
  7185
{
hgs
parents:
diff changeset
  7186
	if (parameters == 0
hgs
parents:
diff changeset
  7187
		|| out_data == 0)
hgs
parents:
diff changeset
  7188
	{
hgs
parents:
diff changeset
  7189
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7190
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7191
	}
hgs
parents:
diff changeset
  7192
hgs
parents:
diff changeset
  7193
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7194
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7195
hgs
parents:
diff changeset
  7196
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7197
		|| positional_parameter->get_type() != eap_tlv_message_type_RSNA_cipher)
hgs
parents:
diff changeset
  7198
	{
hgs
parents:
diff changeset
  7199
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7200
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7201
	}
hgs
parents:
diff changeset
  7202
hgs
parents:
diff changeset
  7203
	u32_t value(0ul);
hgs
parents:
diff changeset
  7204
hgs
parents:
diff changeset
  7205
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7206
hgs
parents:
diff changeset
  7207
	*out_data = static_cast<eapol_RSNA_key_header_c::eapol_RSNA_cipher_e>(value);
hgs
parents:
diff changeset
  7208
hgs
parents:
diff changeset
  7209
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7210
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7211
}
hgs
parents:
diff changeset
  7212
hgs
parents:
diff changeset
  7213
//--------------------------------------------------
hgs
parents:
diff changeset
  7214
hgs
parents:
diff changeset
  7215
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7216
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7217
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7218
	bool * const out_data)
hgs
parents:
diff changeset
  7219
{
hgs
parents:
diff changeset
  7220
	if (parameters == 0
hgs
parents:
diff changeset
  7221
		|| out_data == 0)
hgs
parents:
diff changeset
  7222
	{
hgs
parents:
diff changeset
  7223
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7224
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7225
	}
hgs
parents:
diff changeset
  7226
hgs
parents:
diff changeset
  7227
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7228
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7229
hgs
parents:
diff changeset
  7230
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7231
		|| positional_parameter->get_type() != eap_tlv_message_type_boolean)
hgs
parents:
diff changeset
  7232
	{
hgs
parents:
diff changeset
  7233
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7234
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7235
	}
hgs
parents:
diff changeset
  7236
hgs
parents:
diff changeset
  7237
	u32_t value(0ul);
hgs
parents:
diff changeset
  7238
hgs
parents:
diff changeset
  7239
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7240
hgs
parents:
diff changeset
  7241
	*out_data = (value == 0) ? false: true;
hgs
parents:
diff changeset
  7242
hgs
parents:
diff changeset
  7243
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7244
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7245
}
hgs
parents:
diff changeset
  7246
hgs
parents:
diff changeset
  7247
//--------------------------------------------------
hgs
parents:
diff changeset
  7248
hgs
parents:
diff changeset
  7249
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7250
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7251
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7252
	eap_type_value_e * const out_data)
hgs
parents:
diff changeset
  7253
{
hgs
parents:
diff changeset
  7254
	if (parameters == 0
hgs
parents:
diff changeset
  7255
		|| out_data == 0)
hgs
parents:
diff changeset
  7256
	{
hgs
parents:
diff changeset
  7257
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7258
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7259
	}
hgs
parents:
diff changeset
  7260
hgs
parents:
diff changeset
  7261
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7262
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7263
hgs
parents:
diff changeset
  7264
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7265
		|| positional_parameter->get_type() != eap_tlv_message_type_eap_type)
hgs
parents:
diff changeset
  7266
	{
hgs
parents:
diff changeset
  7267
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7268
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7269
	}
hgs
parents:
diff changeset
  7270
hgs
parents:
diff changeset
  7271
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7272
hgs
parents:
diff changeset
  7273
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7274
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7275
}
hgs
parents:
diff changeset
  7276
hgs
parents:
diff changeset
  7277
//--------------------------------------------------
hgs
parents:
diff changeset
  7278
hgs
parents:
diff changeset
  7279
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7280
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7281
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7282
	eapol_key_authentication_type_e * const out_data)
hgs
parents:
diff changeset
  7283
{
hgs
parents:
diff changeset
  7284
	if (parameters == 0
hgs
parents:
diff changeset
  7285
		|| out_data == 0)
hgs
parents:
diff changeset
  7286
	{
hgs
parents:
diff changeset
  7287
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7288
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7289
	}
hgs
parents:
diff changeset
  7290
hgs
parents:
diff changeset
  7291
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7292
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7293
hgs
parents:
diff changeset
  7294
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7295
		|| positional_parameter->get_type() != eap_tlv_message_type_eapol_key_authentication_type)
hgs
parents:
diff changeset
  7296
	{
hgs
parents:
diff changeset
  7297
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7298
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7299
	}
hgs
parents:
diff changeset
  7300
hgs
parents:
diff changeset
  7301
	u32_t value(0ul);
hgs
parents:
diff changeset
  7302
hgs
parents:
diff changeset
  7303
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7304
hgs
parents:
diff changeset
  7305
	*out_data = static_cast<eapol_key_authentication_type_e>(value);
hgs
parents:
diff changeset
  7306
hgs
parents:
diff changeset
  7307
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7308
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7309
}
hgs
parents:
diff changeset
  7310
hgs
parents:
diff changeset
  7311
//--------------------------------------------------
hgs
parents:
diff changeset
  7312
hgs
parents:
diff changeset
  7313
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7314
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7315
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7316
	eapol_session_key_c * const out_data)
hgs
parents:
diff changeset
  7317
{
hgs
parents:
diff changeset
  7318
	if (parameters == 0
hgs
parents:
diff changeset
  7319
		|| out_data == 0)
hgs
parents:
diff changeset
  7320
	{
hgs
parents:
diff changeset
  7321
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7322
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7323
	}
hgs
parents:
diff changeset
  7324
hgs
parents:
diff changeset
  7325
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7326
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7327
hgs
parents:
diff changeset
  7328
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7329
		|| positional_parameter->get_type() != eap_tlv_message_type_session_key)
hgs
parents:
diff changeset
  7330
	{
hgs
parents:
diff changeset
  7331
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7332
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7333
	}
hgs
parents:
diff changeset
  7334
hgs
parents:
diff changeset
  7335
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7336
hgs
parents:
diff changeset
  7337
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7338
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7339
}
hgs
parents:
diff changeset
  7340
hgs
parents:
diff changeset
  7341
//--------------------------------------------------
hgs
parents:
diff changeset
  7342
hgs
parents:
diff changeset
  7343
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7344
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7345
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7346
	eap_tlv_message_type_function_e * const out_data)
hgs
parents:
diff changeset
  7347
{
hgs
parents:
diff changeset
  7348
	if (parameters == 0
hgs
parents:
diff changeset
  7349
		|| out_data == 0)
hgs
parents:
diff changeset
  7350
	{
hgs
parents:
diff changeset
  7351
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7352
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7353
	}
hgs
parents:
diff changeset
  7354
hgs
parents:
diff changeset
  7355
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7356
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7357
hgs
parents:
diff changeset
  7358
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7359
		|| positional_parameter->get_type() != eap_tlv_message_type_function)
hgs
parents:
diff changeset
  7360
	{
hgs
parents:
diff changeset
  7361
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7362
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7363
	}
hgs
parents:
diff changeset
  7364
hgs
parents:
diff changeset
  7365
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7366
hgs
parents:
diff changeset
  7367
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7368
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7369
}
hgs
parents:
diff changeset
  7370
hgs
parents:
diff changeset
  7371
//--------------------------------------------------
hgs
parents:
diff changeset
  7372
hgs
parents:
diff changeset
  7373
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7374
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7375
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7376
	eapol_key_802_11_authentication_mode_e * const out_data)
hgs
parents:
diff changeset
  7377
{
hgs
parents:
diff changeset
  7378
	if (parameters == 0
hgs
parents:
diff changeset
  7379
		|| out_data == 0)
hgs
parents:
diff changeset
  7380
	{
hgs
parents:
diff changeset
  7381
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7382
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7383
	}
hgs
parents:
diff changeset
  7384
hgs
parents:
diff changeset
  7385
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7386
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7387
hgs
parents:
diff changeset
  7388
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7389
		|| positional_parameter->get_type() != eap_tlv_message_type_eapol_key_802_11_authentication_mode)
hgs
parents:
diff changeset
  7390
	{
hgs
parents:
diff changeset
  7391
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7392
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7393
	}
hgs
parents:
diff changeset
  7394
hgs
parents:
diff changeset
  7395
	u32_t value(0ul);
hgs
parents:
diff changeset
  7396
hgs
parents:
diff changeset
  7397
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7398
hgs
parents:
diff changeset
  7399
	*out_data = static_cast<eapol_key_802_11_authentication_mode_e>(value);
hgs
parents:
diff changeset
  7400
hgs
parents:
diff changeset
  7401
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7402
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7403
}
hgs
parents:
diff changeset
  7404
hgs
parents:
diff changeset
  7405
//--------------------------------------------------
hgs
parents:
diff changeset
  7406
hgs
parents:
diff changeset
  7407
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7408
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7409
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7410
	eapol_RSNA_key_header_c::eapol_tkip_mic_failure_type_e * const out_data)
hgs
parents:
diff changeset
  7411
{
hgs
parents:
diff changeset
  7412
	if (parameters == 0
hgs
parents:
diff changeset
  7413
		|| out_data == 0)
hgs
parents:
diff changeset
  7414
	{
hgs
parents:
diff changeset
  7415
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7416
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7417
	}
hgs
parents:
diff changeset
  7418
hgs
parents:
diff changeset
  7419
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7420
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7421
hgs
parents:
diff changeset
  7422
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7423
		|| positional_parameter->get_type() != eap_tlv_message_type_eapol_tkip_mic_failure_type)
hgs
parents:
diff changeset
  7424
	{
hgs
parents:
diff changeset
  7425
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7426
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7427
	}
hgs
parents:
diff changeset
  7428
hgs
parents:
diff changeset
  7429
	u32_t value(0ul);
hgs
parents:
diff changeset
  7430
hgs
parents:
diff changeset
  7431
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7432
hgs
parents:
diff changeset
  7433
	*out_data = static_cast<eapol_RSNA_key_header_c::eapol_tkip_mic_failure_type_e>(value);
hgs
parents:
diff changeset
  7434
hgs
parents:
diff changeset
  7435
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7436
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7437
}
hgs
parents:
diff changeset
  7438
hgs
parents:
diff changeset
  7439
//--------------------------------------------------
hgs
parents:
diff changeset
  7440
hgs
parents:
diff changeset
  7441
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7442
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7443
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7444
	eapol_wlan_authentication_state_e * const out_data)
hgs
parents:
diff changeset
  7445
{
hgs
parents:
diff changeset
  7446
	if (parameters == 0
hgs
parents:
diff changeset
  7447
		|| out_data == 0)
hgs
parents:
diff changeset
  7448
	{
hgs
parents:
diff changeset
  7449
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7450
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7451
	}
hgs
parents:
diff changeset
  7452
hgs
parents:
diff changeset
  7453
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7454
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7455
hgs
parents:
diff changeset
  7456
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7457
		|| positional_parameter->get_type() != eap_tlv_message_type_eapol_wlan_authentication_state)
hgs
parents:
diff changeset
  7458
	{
hgs
parents:
diff changeset
  7459
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7460
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7461
	}
hgs
parents:
diff changeset
  7462
hgs
parents:
diff changeset
  7463
	u32_t value(0ul);
hgs
parents:
diff changeset
  7464
hgs
parents:
diff changeset
  7465
	eap_status_e status = get_parameter_data(positional_parameter, &value);
hgs
parents:
diff changeset
  7466
hgs
parents:
diff changeset
  7467
	*out_data = static_cast<eapol_wlan_authentication_state_e>(value);
hgs
parents:
diff changeset
  7468
hgs
parents:
diff changeset
  7469
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7470
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7471
}
hgs
parents:
diff changeset
  7472
hgs
parents:
diff changeset
  7473
//--------------------------------------------------
hgs
parents:
diff changeset
  7474
hgs
parents:
diff changeset
  7475
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7476
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7477
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7478
	u64_t * const out_data)
hgs
parents:
diff changeset
  7479
{
hgs
parents:
diff changeset
  7480
	if (parameters == 0
hgs
parents:
diff changeset
  7481
		|| out_data == 0)
hgs
parents:
diff changeset
  7482
	{
hgs
parents:
diff changeset
  7483
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7484
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7485
	}
hgs
parents:
diff changeset
  7486
hgs
parents:
diff changeset
  7487
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7488
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7489
hgs
parents:
diff changeset
  7490
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7491
		|| positional_parameter->get_type() != eap_tlv_message_type_u64_t)
hgs
parents:
diff changeset
  7492
	{
hgs
parents:
diff changeset
  7493
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7494
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7495
	}
hgs
parents:
diff changeset
  7496
hgs
parents:
diff changeset
  7497
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7498
hgs
parents:
diff changeset
  7499
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7500
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7501
}
hgs
parents:
diff changeset
  7502
hgs
parents:
diff changeset
  7503
//--------------------------------------------------
hgs
parents:
diff changeset
  7504
hgs
parents:
diff changeset
  7505
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7506
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7507
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7508
	u32_t * const out_data)
hgs
parents:
diff changeset
  7509
{
hgs
parents:
diff changeset
  7510
	if (parameters == 0
hgs
parents:
diff changeset
  7511
		|| out_data == 0)
hgs
parents:
diff changeset
  7512
	{
hgs
parents:
diff changeset
  7513
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7514
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7515
	}
hgs
parents:
diff changeset
  7516
hgs
parents:
diff changeset
  7517
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7518
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7519
hgs
parents:
diff changeset
  7520
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7521
		|| positional_parameter->get_type() != eap_tlv_message_type_u32_t)
hgs
parents:
diff changeset
  7522
	{
hgs
parents:
diff changeset
  7523
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7524
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7525
	}
hgs
parents:
diff changeset
  7526
hgs
parents:
diff changeset
  7527
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7528
hgs
parents:
diff changeset
  7529
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7530
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7531
}
hgs
parents:
diff changeset
  7532
hgs
parents:
diff changeset
  7533
//--------------------------------------------------
hgs
parents:
diff changeset
  7534
hgs
parents:
diff changeset
  7535
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7536
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7537
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7538
	u16_t * const out_data)
hgs
parents:
diff changeset
  7539
{
hgs
parents:
diff changeset
  7540
	if (parameters == 0
hgs
parents:
diff changeset
  7541
		|| out_data == 0)
hgs
parents:
diff changeset
  7542
	{
hgs
parents:
diff changeset
  7543
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7544
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7545
	}
hgs
parents:
diff changeset
  7546
hgs
parents:
diff changeset
  7547
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7548
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7549
hgs
parents:
diff changeset
  7550
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7551
		|| positional_parameter->get_type() != eap_tlv_message_type_u16_t)
hgs
parents:
diff changeset
  7552
	{
hgs
parents:
diff changeset
  7553
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7554
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7555
	}
hgs
parents:
diff changeset
  7556
hgs
parents:
diff changeset
  7557
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7558
hgs
parents:
diff changeset
  7559
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7560
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7561
}
hgs
parents:
diff changeset
  7562
hgs
parents:
diff changeset
  7563
//--------------------------------------------------
hgs
parents:
diff changeset
  7564
hgs
parents:
diff changeset
  7565
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7566
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7567
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7568
	u8_t * const out_data)
hgs
parents:
diff changeset
  7569
{
hgs
parents:
diff changeset
  7570
	if (parameters == 0
hgs
parents:
diff changeset
  7571
		|| out_data == 0)
hgs
parents:
diff changeset
  7572
	{
hgs
parents:
diff changeset
  7573
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7574
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7575
	}
hgs
parents:
diff changeset
  7576
hgs
parents:
diff changeset
  7577
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7578
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7579
hgs
parents:
diff changeset
  7580
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7581
		|| positional_parameter->get_type() != eap_tlv_message_type_u8_t)
hgs
parents:
diff changeset
  7582
	{
hgs
parents:
diff changeset
  7583
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7584
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7585
	}
hgs
parents:
diff changeset
  7586
hgs
parents:
diff changeset
  7587
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7588
hgs
parents:
diff changeset
  7589
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7590
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7591
}
hgs
parents:
diff changeset
  7592
hgs
parents:
diff changeset
  7593
//--------------------------------------------------
hgs
parents:
diff changeset
  7594
hgs
parents:
diff changeset
  7595
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7596
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7597
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7598
	i32_t * const out_data)
hgs
parents:
diff changeset
  7599
{
hgs
parents:
diff changeset
  7600
	if (parameters == 0
hgs
parents:
diff changeset
  7601
		|| out_data == 0)
hgs
parents:
diff changeset
  7602
	{
hgs
parents:
diff changeset
  7603
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7604
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7605
	}
hgs
parents:
diff changeset
  7606
hgs
parents:
diff changeset
  7607
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7608
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7609
hgs
parents:
diff changeset
  7610
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7611
		|| positional_parameter->get_type() != eap_tlv_message_type_i32_t)
hgs
parents:
diff changeset
  7612
	{
hgs
parents:
diff changeset
  7613
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7614
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7615
	}
hgs
parents:
diff changeset
  7616
hgs
parents:
diff changeset
  7617
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7618
hgs
parents:
diff changeset
  7619
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7620
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7621
}
hgs
parents:
diff changeset
  7622
hgs
parents:
diff changeset
  7623
//--------------------------------------------------
hgs
parents:
diff changeset
  7624
hgs
parents:
diff changeset
  7625
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7626
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7627
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7628
	i16_t * const out_data)
hgs
parents:
diff changeset
  7629
{
hgs
parents:
diff changeset
  7630
	if (parameters == 0
hgs
parents:
diff changeset
  7631
		|| out_data == 0)
hgs
parents:
diff changeset
  7632
	{
hgs
parents:
diff changeset
  7633
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7634
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7635
	}
hgs
parents:
diff changeset
  7636
hgs
parents:
diff changeset
  7637
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7638
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7639
hgs
parents:
diff changeset
  7640
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7641
		|| positional_parameter->get_type() != eap_tlv_message_type_i16_t)
hgs
parents:
diff changeset
  7642
	{
hgs
parents:
diff changeset
  7643
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7644
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7645
	}
hgs
parents:
diff changeset
  7646
hgs
parents:
diff changeset
  7647
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7648
hgs
parents:
diff changeset
  7649
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7650
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7651
}
hgs
parents:
diff changeset
  7652
hgs
parents:
diff changeset
  7653
//--------------------------------------------------
hgs
parents:
diff changeset
  7654
hgs
parents:
diff changeset
  7655
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7656
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7657
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7658
	i8_t * const out_data)
hgs
parents:
diff changeset
  7659
{
hgs
parents:
diff changeset
  7660
	if (parameters == 0
hgs
parents:
diff changeset
  7661
		|| out_data == 0)
hgs
parents:
diff changeset
  7662
	{
hgs
parents:
diff changeset
  7663
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7664
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7665
	}
hgs
parents:
diff changeset
  7666
hgs
parents:
diff changeset
  7667
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7668
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7669
hgs
parents:
diff changeset
  7670
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7671
		|| positional_parameter->get_type() != eap_tlv_message_type_i8_t)
hgs
parents:
diff changeset
  7672
	{
hgs
parents:
diff changeset
  7673
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7674
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7675
	}
hgs
parents:
diff changeset
  7676
hgs
parents:
diff changeset
  7677
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7678
hgs
parents:
diff changeset
  7679
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7680
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7681
}
hgs
parents:
diff changeset
  7682
hgs
parents:
diff changeset
  7683
//--------------------------------------------------
hgs
parents:
diff changeset
  7684
hgs
parents:
diff changeset
  7685
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7686
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7687
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7688
	eap_method_settings_c * const out_data)
hgs
parents:
diff changeset
  7689
{
hgs
parents:
diff changeset
  7690
	if (parameters == 0
hgs
parents:
diff changeset
  7691
		|| out_data == 0)
hgs
parents:
diff changeset
  7692
	{
hgs
parents:
diff changeset
  7693
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7694
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7695
	}
hgs
parents:
diff changeset
  7696
hgs
parents:
diff changeset
  7697
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7698
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7699
hgs
parents:
diff changeset
  7700
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7701
		|| positional_parameter->get_type() != eap_tlv_message_type_eap_method_settings)
hgs
parents:
diff changeset
  7702
	{
hgs
parents:
diff changeset
  7703
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7704
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7705
	}
hgs
parents:
diff changeset
  7706
hgs
parents:
diff changeset
  7707
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7708
34
hgs
parents: 26
diff changeset
  7709
	out_data->trace();
hgs
parents: 26
diff changeset
  7710
26
hgs
parents:
diff changeset
  7711
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7712
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7713
}
hgs
parents:
diff changeset
  7714
hgs
parents:
diff changeset
  7715
//--------------------------------------------------
hgs
parents:
diff changeset
  7716
hgs
parents:
diff changeset
  7717
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7718
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7719
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7720
	eap_array_c<u16_t> * const out_data)
hgs
parents:
diff changeset
  7721
{
hgs
parents:
diff changeset
  7722
	if (parameters == 0
hgs
parents:
diff changeset
  7723
		|| out_data == 0)
hgs
parents:
diff changeset
  7724
	{
hgs
parents:
diff changeset
  7725
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7726
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7727
	}
hgs
parents:
diff changeset
  7728
hgs
parents:
diff changeset
  7729
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7730
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7731
hgs
parents:
diff changeset
  7732
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7733
		|| positional_parameter->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7734
	{
hgs
parents:
diff changeset
  7735
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7736
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7737
	}
hgs
parents:
diff changeset
  7738
hgs
parents:
diff changeset
  7739
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7740
hgs
parents:
diff changeset
  7741
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7742
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7743
}
hgs
parents:
diff changeset
  7744
hgs
parents:
diff changeset
  7745
//--------------------------------------------------
hgs
parents:
diff changeset
  7746
hgs
parents:
diff changeset
  7747
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7748
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7749
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7750
	eap_array_c<eap_type_value_e> * const out_data)
hgs
parents:
diff changeset
  7751
{
hgs
parents:
diff changeset
  7752
	if (parameters == 0
hgs
parents:
diff changeset
  7753
		|| out_data == 0)
hgs
parents:
diff changeset
  7754
	{
hgs
parents:
diff changeset
  7755
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7756
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7757
	}
hgs
parents:
diff changeset
  7758
hgs
parents:
diff changeset
  7759
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7760
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7761
hgs
parents:
diff changeset
  7762
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7763
		|| positional_parameter->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7764
	{
hgs
parents:
diff changeset
  7765
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7766
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7767
	}
hgs
parents:
diff changeset
  7768
hgs
parents:
diff changeset
  7769
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7770
hgs
parents:
diff changeset
  7771
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7772
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7773
}
hgs
parents:
diff changeset
  7774
hgs
parents:
diff changeset
  7775
//--------------------------------------------------
hgs
parents:
diff changeset
  7776
hgs
parents:
diff changeset
  7777
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7778
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7779
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7780
	eap_array_c<eap_certificate_entry_c> * const out_data)
hgs
parents:
diff changeset
  7781
{
hgs
parents:
diff changeset
  7782
	if (parameters == 0
hgs
parents:
diff changeset
  7783
		|| out_data == 0)
hgs
parents:
diff changeset
  7784
	{
hgs
parents:
diff changeset
  7785
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7786
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7787
	}
hgs
parents:
diff changeset
  7788
hgs
parents:
diff changeset
  7789
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7790
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7791
hgs
parents:
diff changeset
  7792
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7793
		|| positional_parameter->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7794
	{
hgs
parents:
diff changeset
  7795
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7796
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7797
	}
hgs
parents:
diff changeset
  7798
hgs
parents:
diff changeset
  7799
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7800
hgs
parents:
diff changeset
  7801
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7802
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7803
}
hgs
parents:
diff changeset
  7804
hgs
parents:
diff changeset
  7805
//--------------------------------------------------
hgs
parents:
diff changeset
  7806
hgs
parents:
diff changeset
  7807
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7808
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7809
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7810
	eap_certificate_entry_c::eap_certificate_type_e * const out_data)
hgs
parents:
diff changeset
  7811
{
hgs
parents:
diff changeset
  7812
	if (parameters == 0
hgs
parents:
diff changeset
  7813
		|| out_data == 0)
hgs
parents:
diff changeset
  7814
	{
hgs
parents:
diff changeset
  7815
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7816
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7817
	}
hgs
parents:
diff changeset
  7818
hgs
parents:
diff changeset
  7819
	u32_t integer_value(0ul);
hgs
parents:
diff changeset
  7820
hgs
parents:
diff changeset
  7821
	eap_status_e status = read_parameter_data(
hgs
parents:
diff changeset
  7822
		parameters,
hgs
parents:
diff changeset
  7823
		parameter_index,
hgs
parents:
diff changeset
  7824
		&integer_value);
hgs
parents:
diff changeset
  7825
hgs
parents:
diff changeset
  7826
	*out_data = static_cast<eap_certificate_entry_c::eap_certificate_type_e>(integer_value);
hgs
parents:
diff changeset
  7827
hgs
parents:
diff changeset
  7828
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7829
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7830
}
hgs
parents:
diff changeset
  7831
hgs
parents:
diff changeset
  7832
//--------------------------------------------------
hgs
parents:
diff changeset
  7833
hgs
parents:
diff changeset
  7834
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7835
hgs
parents:
diff changeset
  7836
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7837
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7838
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7839
	simple_config_Encryption_Type_e * const out_data)
hgs
parents:
diff changeset
  7840
{
hgs
parents:
diff changeset
  7841
	if (parameters == 0
hgs
parents:
diff changeset
  7842
		|| out_data == 0)
hgs
parents:
diff changeset
  7843
	{
hgs
parents:
diff changeset
  7844
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7845
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7846
	}
hgs
parents:
diff changeset
  7847
hgs
parents:
diff changeset
  7848
	u16_t integer_value(0ul);
hgs
parents:
diff changeset
  7849
hgs
parents:
diff changeset
  7850
	eap_status_e status = read_parameter_data(
hgs
parents:
diff changeset
  7851
		parameters,
hgs
parents:
diff changeset
  7852
		parameter_index,
hgs
parents:
diff changeset
  7853
		&integer_value);
hgs
parents:
diff changeset
  7854
hgs
parents:
diff changeset
  7855
	*out_data = static_cast<simple_config_Encryption_Type_e>(integer_value);
hgs
parents:
diff changeset
  7856
hgs
parents:
diff changeset
  7857
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7858
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7859
}
hgs
parents:
diff changeset
  7860
hgs
parents:
diff changeset
  7861
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7862
hgs
parents:
diff changeset
  7863
//--------------------------------------------------
hgs
parents:
diff changeset
  7864
hgs
parents:
diff changeset
  7865
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7866
hgs
parents:
diff changeset
  7867
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7868
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7869
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7870
	simple_config_Authentication_Type_e * const out_data)
hgs
parents:
diff changeset
  7871
{
hgs
parents:
diff changeset
  7872
	if (parameters == 0
hgs
parents:
diff changeset
  7873
		|| out_data == 0)
hgs
parents:
diff changeset
  7874
	{
hgs
parents:
diff changeset
  7875
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7876
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7877
	}
hgs
parents:
diff changeset
  7878
hgs
parents:
diff changeset
  7879
	u16_t integer_value(0ul);
hgs
parents:
diff changeset
  7880
hgs
parents:
diff changeset
  7881
	eap_status_e status = read_parameter_data(
hgs
parents:
diff changeset
  7882
		parameters,
hgs
parents:
diff changeset
  7883
		parameter_index,
hgs
parents:
diff changeset
  7884
		&integer_value);
hgs
parents:
diff changeset
  7885
hgs
parents:
diff changeset
  7886
	*out_data = static_cast<simple_config_Authentication_Type_e>(integer_value);
hgs
parents:
diff changeset
  7887
hgs
parents:
diff changeset
  7888
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7889
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7890
}
hgs
parents:
diff changeset
  7891
hgs
parents:
diff changeset
  7892
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7893
hgs
parents:
diff changeset
  7894
//--------------------------------------------------
hgs
parents:
diff changeset
  7895
hgs
parents:
diff changeset
  7896
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7897
hgs
parents:
diff changeset
  7898
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7899
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7900
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7901
	eap_array_c<simple_config_credential_c> * const out_data)
hgs
parents:
diff changeset
  7902
{
hgs
parents:
diff changeset
  7903
	if (parameters == 0
hgs
parents:
diff changeset
  7904
		|| out_data == 0)
hgs
parents:
diff changeset
  7905
	{
hgs
parents:
diff changeset
  7906
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7907
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7908
	}
hgs
parents:
diff changeset
  7909
hgs
parents:
diff changeset
  7910
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7911
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7912
hgs
parents:
diff changeset
  7913
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7914
		|| positional_parameter->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7915
	{
hgs
parents:
diff changeset
  7916
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7917
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7918
	}
hgs
parents:
diff changeset
  7919
hgs
parents:
diff changeset
  7920
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7921
hgs
parents:
diff changeset
  7922
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7923
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7924
}
hgs
parents:
diff changeset
  7925
hgs
parents:
diff changeset
  7926
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7927
hgs
parents:
diff changeset
  7928
//--------------------------------------------------
hgs
parents:
diff changeset
  7929
hgs
parents:
diff changeset
  7930
#if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7931
hgs
parents:
diff changeset
  7932
EAP_FUNC_EXPORT eap_status_e eap_process_tlv_message_data_c::read_parameter_data(
hgs
parents:
diff changeset
  7933
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters,
hgs
parents:
diff changeset
  7934
	const u32_t parameter_index,
hgs
parents:
diff changeset
  7935
	eap_array_c<network_key_and_index_c> * const out_data)
hgs
parents:
diff changeset
  7936
{
hgs
parents:
diff changeset
  7937
	if (parameters == 0
hgs
parents:
diff changeset
  7938
		|| out_data == 0)
hgs
parents:
diff changeset
  7939
	{
hgs
parents:
diff changeset
  7940
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7941
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7942
	}
hgs
parents:
diff changeset
  7943
hgs
parents:
diff changeset
  7944
	const eap_tlv_header_c * const positional_parameter
hgs
parents:
diff changeset
  7945
		= parameters->get_object(parameter_index);
hgs
parents:
diff changeset
  7946
hgs
parents:
diff changeset
  7947
	if (positional_parameter == 0
hgs
parents:
diff changeset
  7948
		|| positional_parameter->get_type() != eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7949
	{
hgs
parents:
diff changeset
  7950
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7951
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
  7952
	}
hgs
parents:
diff changeset
  7953
hgs
parents:
diff changeset
  7954
	eap_status_e status = get_parameter_data(positional_parameter, out_data);
hgs
parents:
diff changeset
  7955
hgs
parents:
diff changeset
  7956
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  7957
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
  7958
}
hgs
parents:
diff changeset
  7959
hgs
parents:
diff changeset
  7960
#endif // #if defined(USE_EAP_SIMPLE_CONFIG)
hgs
parents:
diff changeset
  7961
hgs
parents:
diff changeset
  7962
//--------------------------------------------------
hgs
parents:
diff changeset
  7963
hgs
parents:
diff changeset
  7964
EAP_FUNC_EXPORT eap_const_string eap_process_tlv_message_data_c::get_type_string(const eap_tlv_message_type_e type)
hgs
parents:
diff changeset
  7965
{
hgs
parents:
diff changeset
  7966
#if defined(USE_EAP_TRACE_STRINGS)
hgs
parents:
diff changeset
  7967
	EAP_IF_RETURN_STRING(type, eap_tlv_message_type_none)
hgs
parents:
diff changeset
  7968
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_array)
hgs
parents:
diff changeset
  7969
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_boolean)
hgs
parents:
diff changeset
  7970
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_protocol_layer)
hgs
parents:
diff changeset
  7971
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_state_notification)
hgs
parents:
diff changeset
  7972
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_status)
hgs
parents:
diff changeset
  7973
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_type)
hgs
parents:
diff changeset
  7974
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eapol_key_802_11_authentication_mode)
hgs
parents:
diff changeset
  7975
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eapol_key_authentication_type)
hgs
parents:
diff changeset
  7976
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eapol_key_type)
hgs
parents:
diff changeset
  7977
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eapol_tkip_mic_failure_type)
hgs
parents:
diff changeset
  7978
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eapol_wlan_authentication_state)
hgs
parents:
diff changeset
  7979
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_error)
hgs
parents:
diff changeset
  7980
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_function)
hgs
parents:
diff changeset
  7981
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_network_id)
hgs
parents:
diff changeset
  7982
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_network_key)
hgs
parents:
diff changeset
  7983
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_protected_setup_credential)
hgs
parents:
diff changeset
  7984
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_RSNA_cipher)
hgs
parents:
diff changeset
  7985
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_session_key)
hgs
parents:
diff changeset
  7986
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_u8_t)
hgs
parents:
diff changeset
  7987
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_u16_t)
hgs
parents:
diff changeset
  7988
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_u32_t)
hgs
parents:
diff changeset
  7989
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_u64_t)
hgs
parents:
diff changeset
  7990
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_variable_data)
hgs
parents:
diff changeset
  7991
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_method_settings)
hgs
parents:
diff changeset
  7992
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_eap_certificate_entry)
hgs
parents:
diff changeset
  7993
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_i8_t)
hgs
parents:
diff changeset
  7994
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_i16_t)
hgs
parents:
diff changeset
  7995
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_i32_t)
hgs
parents:
diff changeset
  7996
	else EAP_IF_RETURN_STRING(type, eap_tlv_message_type_configuration_option)
hgs
parents:
diff changeset
  7997
	else
hgs
parents:
diff changeset
  7998
#endif // #if defined(USE_EAP_TRACE_STRINGS)
hgs
parents:
diff changeset
  7999
	{
hgs
parents:
diff changeset
  8000
		EAP_UNREFERENCED_PARAMETER(type);
hgs
parents:
diff changeset
  8001
hgs
parents:
diff changeset
  8002
		return EAPL("Unknown EAPOL-TLV message type");
hgs
parents:
diff changeset
  8003
	}
hgs
parents:
diff changeset
  8004
}
hgs
parents:
diff changeset
  8005
hgs
parents:
diff changeset
  8006
//--------------------------------------------------
hgs
parents:
diff changeset
  8007
hgs
parents:
diff changeset
  8008
EAP_FUNC_EXPORT eap_const_string eap_process_tlv_message_data_c::get_function_string(const eap_tlv_message_type_function_e function)
hgs
parents:
diff changeset
  8009
{
hgs
parents:
diff changeset
  8010
#if defined(USE_EAP_TRACE_STRINGS)
hgs
parents:
diff changeset
  8011
	EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_none)
hgs
parents:
diff changeset
  8012
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_check_pmksa_cache)
hgs
parents:
diff changeset
  8013
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_start_authentication)
hgs
parents:
diff changeset
  8014
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_association)
hgs
parents:
diff changeset
  8015
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_disassociation)
hgs
parents:
diff changeset
  8016
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_start_preauthentication)
hgs
parents:
diff changeset
  8017
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_start_reassociation)
hgs
parents:
diff changeset
  8018
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_reassociation)
hgs
parents:
diff changeset
  8019
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_start_WPXM_reassociation)
hgs
parents:
diff changeset
  8020
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_WPXM_reassociation)
hgs
parents:
diff changeset
  8021
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_packet_process)
hgs
parents:
diff changeset
  8022
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_tkip_mic_failure)
hgs
parents:
diff changeset
  8023
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_eap_acknowledge)
hgs
parents:
diff changeset
  8024
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_update_header_offset)
hgs
parents:
diff changeset
  8025
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_check_pmksa_cache)
hgs
parents:
diff changeset
  8026
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_packet_send)
hgs
parents:
diff changeset
  8027
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_associate)
hgs
parents:
diff changeset
  8028
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_disassociate)
hgs
parents:
diff changeset
  8029
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_packet_data_session_key)
hgs
parents:
diff changeset
  8030
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_state_notification)
hgs
parents:
diff changeset
  8031
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_reassociate)
hgs
parents:
diff changeset
  8032
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_update_wlan_database_reference_values)
hgs
parents:
diff changeset
  8033
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_start_WPXM_reassociation)
hgs
parents:
diff changeset
  8034
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_new_protected_setup_credentials)
hgs
parents:
diff changeset
  8035
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_create_eap_session)
hgs
parents:
diff changeset
  8036
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_remove_eap_session)
hgs
parents:
diff changeset
  8037
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_send_eap_identity_request)
hgs
parents:
diff changeset
  8038
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_packet_data_crypto_keys)
hgs
parents:
diff changeset
  8039
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_restart_authentication)
hgs
parents:
diff changeset
  8040
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_create_state)
hgs
parents:
diff changeset
  8041
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_remove_bksa_from_cache)
hgs
parents:
diff changeset
  8042
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_association)
hgs
parents:
diff changeset
  8043
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_set_eap_database_reference_values)
hgs
parents:
diff changeset
  8044
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_eap_mtu)
hgs
parents:
diff changeset
  8045
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_get_802_11_authentication_mode)
hgs
parents:
diff changeset
  8046
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_get_802_11_authentication_mode)
hgs
parents:
diff changeset
  8047
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_remove_eap_session)
hgs
parents:
diff changeset
  8048
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_complete_disassociation)
hgs
parents:
diff changeset
  8049
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_last_function)
hgs
parents:
diff changeset
  8050
hgs
parents:
diff changeset
  8051
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_get_configuration)
hgs
parents:
diff changeset
  8052
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_set_configuration)
hgs
parents:
diff changeset
  8053
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_copy_configuration)
hgs
parents:
diff changeset
  8054
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_delete_configuration)
hgs
parents:
diff changeset
  8055
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_set_index)
hgs
parents:
diff changeset
  8056
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_get_type_info)
hgs
parents:
diff changeset
  8057
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_invoke_ui)
hgs
parents:
diff changeset
  8058
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_get_configuration)
hgs
parents:
diff changeset
  8059
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_set_configuration)
hgs
parents:
diff changeset
  8060
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_delete_configuration)
hgs
parents:
diff changeset
  8061
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_copy_configuration)
hgs
parents:
diff changeset
  8062
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_set_index)
hgs
parents:
diff changeset
  8063
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_get_type_info)
hgs
parents:
diff changeset
  8064
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_complete_invoke_ui)
hgs
parents:
diff changeset
  8065
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_plugin_last_function)
hgs
parents:
diff changeset
  8066
hgs
parents:
diff changeset
  8067
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_set_eap_methods)
hgs
parents:
diff changeset
  8068
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_get_eap_methods)
hgs
parents:
diff changeset
  8069
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_get_certificate_lists)
34
hgs
parents: 26
diff changeset
  8070
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_delete_all_eap_settings)
hgs
parents: 26
diff changeset
  8071
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_copy_all_eap_settings)
26
hgs
parents:
diff changeset
  8072
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_complete_set_eap_methods)
hgs
parents:
diff changeset
  8073
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_complete_get_eap_methods)
hgs
parents:
diff changeset
  8074
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_complete_get_certificate_lists)
hgs
parents:
diff changeset
  8075
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_complete_delete_all_eap_settings)
hgs
parents:
diff changeset
  8076
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_complete_copy_all_eap_settings)
hgs
parents:
diff changeset
  8077
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_general_settings_last_function)
hgs
parents:
diff changeset
  8078
hgs
parents:
diff changeset
  8079
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_open_pac_store)
hgs
parents:
diff changeset
  8080
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_create_device_seed)
hgs
parents:
diff changeset
  8081
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_is_master_key_present)
hgs
parents:
diff changeset
  8082
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_is_master_key_and_password_matching)
hgs
parents:
diff changeset
  8083
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_create_and_save_master_key)
hgs
parents:
diff changeset
  8084
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_compare_pac_store_password)
hgs
parents:
diff changeset
  8085
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_is_pacstore_password_present)
hgs
parents:
diff changeset
  8086
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_set_pac_store_password)
hgs
parents:
diff changeset
  8087
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_destroy_pac_store)
hgs
parents:
diff changeset
  8088
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_open_pac_store)
hgs
parents:
diff changeset
  8089
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_create_device_seed)
hgs
parents:
diff changeset
  8090
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_is_master_key_present)
hgs
parents:
diff changeset
  8091
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_is_master_key_and_password_matching)
hgs
parents:
diff changeset
  8092
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_create_and_save_master_key)
hgs
parents:
diff changeset
  8093
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_is_pacstore_password_present)
hgs
parents:
diff changeset
  8094
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_compare_pac_store_password)
hgs
parents:
diff changeset
  8095
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_set_pac_store_password)
hgs
parents:
diff changeset
  8096
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_complete_destroy_pac_store)
hgs
parents:
diff changeset
  8097
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_pac_store_last_function)
hgs
parents:
diff changeset
  8098
hgs
parents:
diff changeset
  8099
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_get_all_certificate_labels)
hgs
parents:
diff changeset
  8100
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_reset_certificate_store)
hgs
parents:
diff changeset
  8101
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_get_configuration)
hgs
parents:
diff changeset
  8102
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_set_configuration)
hgs
parents:
diff changeset
  8103
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_set_ca_cert)
hgs
parents:
diff changeset
  8104
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_set_user_cert)
hgs
parents:
diff changeset
  8105
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_delete_configuration)
hgs
parents:
diff changeset
  8106
hgs
parents:
diff changeset
  8107
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_get_all_certificate_labels)
hgs
parents:
diff changeset
  8108
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_reset_certificate_store)
hgs
parents:
diff changeset
  8109
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_get_configuration)
hgs
parents:
diff changeset
  8110
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_set_configuration)
hgs
parents:
diff changeset
  8111
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_set_ca_cert)
hgs
parents:
diff changeset
  8112
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_set_user_cert)
hgs
parents:
diff changeset
  8113
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_delete_configuration)
hgs
parents:
diff changeset
  8114
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_wapi_settings_complete_last_function)
hgs
parents:
diff changeset
  8115
hgs
parents:
diff changeset
  8116
	else EAP_IF_RETURN_STRING(function, eap_tlv_message_type_function_illegal_value)
hgs
parents:
diff changeset
  8117
	else
hgs
parents:
diff changeset
  8118
#endif // #if defined(USE_EAP_TRACE_STRINGS)
hgs
parents:
diff changeset
  8119
	{
hgs
parents:
diff changeset
  8120
		EAP_UNREFERENCED_PARAMETER(function);
hgs
parents:
diff changeset
  8121
hgs
parents:
diff changeset
  8122
		return EAPL("Unknown EAPOL-TLV message function");
hgs
parents:
diff changeset
  8123
	}
hgs
parents:
diff changeset
  8124
}
hgs
parents:
diff changeset
  8125
hgs
parents:
diff changeset
  8126
//--------------------------------------------------
hgs
parents:
diff changeset
  8127
hgs
parents:
diff changeset
  8128
// End.