eapol/eapol_framework/eapol_common/core/eap_general_settings_client_message_if.cpp
author hgs
Thu, 24 Jun 2010 11:23:08 +0300
changeset 34 ad1f037f1ac2
parent 26 9abfd4f00d37
child 49 43351a4f2da3
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2001-2010 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:  Class creates and reads the messages used in EAP-general settings interface on the client side.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/*
hgs
parents:
diff changeset
    19
* %version: 11 %
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
34
hgs
parents: 26
diff changeset
    22
// This is enumeration of EAPOL source code.
hgs
parents: 26
diff changeset
    23
#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents: 26
diff changeset
    24
	#undef EAP_FILE_NUMBER_ENUM
hgs
parents: 26
diff changeset
    25
	#define EAP_FILE_NUMBER_ENUM 767 
hgs
parents: 26
diff changeset
    26
	#undef EAP_FILE_NUMBER_DATE 
hgs
parents: 26
diff changeset
    27
	#define EAP_FILE_NUMBER_DATE 1127594498 
hgs
parents: 26
diff changeset
    28
#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents: 26
diff changeset
    29
26
hgs
parents:
diff changeset
    30
#include "eap_am_tools.h"
hgs
parents:
diff changeset
    31
#include "eap_tools.h"
hgs
parents:
diff changeset
    32
#include "eap_am_export.h"
hgs
parents:
diff changeset
    33
#include "eap_am_assert.h"
hgs
parents:
diff changeset
    34
#include "eap_general_settings_client_message_if.h"
hgs
parents:
diff changeset
    35
#include "abs_eap_plugin_message.h"
hgs
parents:
diff changeset
    36
#include "abs_eap_am_message_if.h"
hgs
parents:
diff changeset
    37
#include "eap_am_message_if.h"
hgs
parents:
diff changeset
    38
#include "eap_automatic_variable.h"
hgs
parents:
diff changeset
    39
#include "eap_process_tlv_message_data.h"
hgs
parents:
diff changeset
    40
#include "eap_method_settings.h"
hgs
parents:
diff changeset
    41
#include "eap_am_network_id.h"
hgs
parents:
diff changeset
    42
#include "abs_eap_general_settings_message.h"
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
//--------------------------------------------------
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
EAP_FUNC_EXPORT eap_general_settings_client_message_if_c::~eap_general_settings_client_message_if_c()
hgs
parents:
diff changeset
    47
{
hgs
parents:
diff changeset
    48
	delete m_client_if;
hgs
parents:
diff changeset
    49
	m_client_if = 0;
hgs
parents:
diff changeset
    50
}
hgs
parents:
diff changeset
    51
hgs
parents:
diff changeset
    52
//--------------------------------------------------
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
EAP_FUNC_EXPORT eap_general_settings_client_message_if_c::eap_general_settings_client_message_if_c(
hgs
parents:
diff changeset
    55
	abs_eap_am_tools_c * const tools,
hgs
parents:
diff changeset
    56
	eap_am_message_if_c * const client_if,
hgs
parents:
diff changeset
    57
	abs_eap_general_settings_message_c * const partner)
hgs
parents:
diff changeset
    58
: m_am_tools(tools)
hgs
parents:
diff changeset
    59
, m_client_if(client_if)
hgs
parents:
diff changeset
    60
, m_partner(partner)
hgs
parents:
diff changeset
    61
, m_is_valid(false)
hgs
parents:
diff changeset
    62
, m_error_code(eap_status_ok)
hgs
parents:
diff changeset
    63
, m_error_function(eap_tlv_message_type_function_none)
hgs
parents:
diff changeset
    64
{
hgs
parents:
diff changeset
    65
	if (m_am_tools == 0
hgs
parents:
diff changeset
    66
		|| m_am_tools->get_is_valid() == false
hgs
parents:
diff changeset
    67
		|| m_client_if == 0
hgs
parents:
diff changeset
    68
		|| m_client_if->get_is_valid() == false
hgs
parents:
diff changeset
    69
		|| m_partner == 0)
hgs
parents:
diff changeset
    70
	{
hgs
parents:
diff changeset
    71
		return;
hgs
parents:
diff changeset
    72
	}
hgs
parents:
diff changeset
    73
hgs
parents:
diff changeset
    74
	m_is_valid = true;
hgs
parents:
diff changeset
    75
}
hgs
parents:
diff changeset
    76
hgs
parents:
diff changeset
    77
//--------------------------------------------------
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::reset()
hgs
parents:
diff changeset
    80
{
hgs
parents:
diff changeset
    81
	return EAP_STATUS_RETURN(m_am_tools, eap_status_ok);
hgs
parents:
diff changeset
    82
}
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
//--------------------------------------------------
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
// This is documented in abs_eap_stack_interface_c::configure().
hgs
parents:
diff changeset
    87
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::configure()
hgs
parents:
diff changeset
    88
{
hgs
parents:
diff changeset
    89
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
    90
hgs
parents:
diff changeset
    91
	if (m_client_if != 0)
hgs
parents:
diff changeset
    92
	{
hgs
parents:
diff changeset
    93
		status = m_client_if->configure(0);
hgs
parents:
diff changeset
    94
	}
hgs
parents:
diff changeset
    95
hgs
parents:
diff changeset
    96
	return EAP_STATUS_RETURN(m_am_tools, status);
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
// This is documented in abs_eap_stack_interface_c::shutdown().
hgs
parents:
diff changeset
   102
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::shutdown()
hgs
parents:
diff changeset
   103
{
hgs
parents:
diff changeset
   104
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   105
hgs
parents:
diff changeset
   106
	if (m_client_if != 0)
hgs
parents:
diff changeset
   107
	{
hgs
parents:
diff changeset
   108
		status = m_client_if->shutdown();
hgs
parents:
diff changeset
   109
	}
hgs
parents:
diff changeset
   110
hgs
parents:
diff changeset
   111
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   112
}
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
//--------------------------------------------------
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
// This is documented in abs_eap_stack_interface_c::get_is_valid().
hgs
parents:
diff changeset
   117
EAP_FUNC_EXPORT bool eap_general_settings_client_message_if_c::get_is_valid()
hgs
parents:
diff changeset
   118
{
hgs
parents:
diff changeset
   119
	return m_is_valid;
hgs
parents:
diff changeset
   120
}
hgs
parents:
diff changeset
   121
hgs
parents:
diff changeset
   122
//--------------------------------------------------
hgs
parents:
diff changeset
   123
hgs
parents:
diff changeset
   124
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::process_message(eap_process_tlv_message_data_c * const message)
hgs
parents:
diff changeset
   125
{
hgs
parents:
diff changeset
   126
	// Process message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   127
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   128
		m_am_tools, 
hgs
parents:
diff changeset
   129
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   130
		(EAPL("eap_general_settings_client_message_if_c::process_message(): this = 0x%08x, m_client_if=0x%08x.\n"),
hgs
parents:
diff changeset
   131
		this,
hgs
parents:
diff changeset
   132
		m_client_if));
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::send_message()");
hgs
parents:
diff changeset
   136
hgs
parents:
diff changeset
   137
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
   138
		m_am_tools,
hgs
parents:
diff changeset
   139
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   140
		(EAPL("eap_general_settings_client_message_if_c::process_message()"),
hgs
parents:
diff changeset
   141
		message->get_message_data(),
hgs
parents:
diff changeset
   142
		message->get_message_data_length()));
hgs
parents:
diff changeset
   143
hgs
parents:
diff changeset
   144
	eap_status_e send_status = m_client_if->process_data(
hgs
parents:
diff changeset
   145
		message->get_message_data(),
hgs
parents:
diff changeset
   146
		message->get_message_data_length());
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   149
	return EAP_STATUS_RETURN(m_am_tools, send_status);
hgs
parents:
diff changeset
   150
}
hgs
parents:
diff changeset
   151
hgs
parents:
diff changeset
   152
//--------------------------------------------------
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::set_eap_methods(const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   155
{
hgs
parents:
diff changeset
   156
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   157
hgs
parents:
diff changeset
   158
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   159
hgs
parents:
diff changeset
   160
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   161
		m_am_tools, 
hgs
parents:
diff changeset
   162
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   163
		(EAPL("eap_general_settings_client_message_if_c::set_eap_methods(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   164
		this));
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::set_eap_methods()");
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
	{
hgs
parents:
diff changeset
   169
		// Creates message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   170
		eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   171
hgs
parents:
diff changeset
   172
		if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   173
		{
hgs
parents:
diff changeset
   174
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   175
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   176
		}
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
		status = message.add_parameter_data(eap_tlv_message_type_function_general_settings_set_eap_methods);
hgs
parents:
diff changeset
   179
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   180
		{
hgs
parents:
diff changeset
   181
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   182
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   183
		}
hgs
parents:
diff changeset
   184
hgs
parents:
diff changeset
   185
		status = message.add_parameter_data(internal_settings);
hgs
parents:
diff changeset
   186
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   187
		{
hgs
parents:
diff changeset
   188
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   189
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   190
		}
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
		status = process_message(&message);
hgs
parents:
diff changeset
   193
	}
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   196
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   197
}
hgs
parents:
diff changeset
   198
hgs
parents:
diff changeset
   199
//--------------------------------------------------
hgs
parents:
diff changeset
   200
hgs
parents:
diff changeset
   201
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::get_eap_methods(const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   202
{
hgs
parents:
diff changeset
   203
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   206
hgs
parents:
diff changeset
   207
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   208
		m_am_tools, 
hgs
parents:
diff changeset
   209
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   210
		(EAPL("eap_general_settings_client_message_if_c::get_eap_methods(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   211
		this));
hgs
parents:
diff changeset
   212
hgs
parents:
diff changeset
   213
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::get_eap_methods()");
hgs
parents:
diff changeset
   214
hgs
parents:
diff changeset
   215
	{
hgs
parents:
diff changeset
   216
		// Creates message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   217
		eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
		if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   220
		{
hgs
parents:
diff changeset
   221
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   222
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   223
		}
hgs
parents:
diff changeset
   224
hgs
parents:
diff changeset
   225
		status = message.add_parameter_data(eap_tlv_message_type_function_general_settings_get_eap_methods);
hgs
parents:
diff changeset
   226
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   227
		{
hgs
parents:
diff changeset
   228
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   229
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   230
		}
hgs
parents:
diff changeset
   231
hgs
parents:
diff changeset
   232
		status = message.add_parameter_data(internal_settings);
hgs
parents:
diff changeset
   233
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   234
		{
hgs
parents:
diff changeset
   235
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   236
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   237
		}
hgs
parents:
diff changeset
   238
hgs
parents:
diff changeset
   239
		status = process_message(&message);
hgs
parents:
diff changeset
   240
	}
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   243
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   244
}
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
//--------------------------------------------------
hgs
parents:
diff changeset
   247
hgs
parents:
diff changeset
   248
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::get_certificate_lists(const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   249
{
hgs
parents:
diff changeset
   250
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   255
		m_am_tools, 
hgs
parents:
diff changeset
   256
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   257
		(EAPL("eap_general_settings_client_message_if_c::get_certificate_lists(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   258
		this));
hgs
parents:
diff changeset
   259
hgs
parents:
diff changeset
   260
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::get_certificate_lists()");
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
	{
hgs
parents:
diff changeset
   263
		// Creates message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   264
		eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
		if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   267
		{
hgs
parents:
diff changeset
   268
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   269
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   270
		}
hgs
parents:
diff changeset
   271
hgs
parents:
diff changeset
   272
		status = message.add_parameter_data(eap_tlv_message_type_function_general_settings_get_certificate_lists);
hgs
parents:
diff changeset
   273
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   274
		{
hgs
parents:
diff changeset
   275
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   276
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   277
		}
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
		status = message.add_parameter_data(internal_settings);
hgs
parents:
diff changeset
   280
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   281
		{
hgs
parents:
diff changeset
   282
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   283
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   284
		}
hgs
parents:
diff changeset
   285
hgs
parents:
diff changeset
   286
		status = process_message(&message);
hgs
parents:
diff changeset
   287
	}
hgs
parents:
diff changeset
   288
hgs
parents:
diff changeset
   289
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   290
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   291
}
hgs
parents:
diff changeset
   292
hgs
parents:
diff changeset
   293
//--------------------------------------------------
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::delete_all_eap_settings(const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   296
{
hgs
parents:
diff changeset
   297
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   298
hgs
parents:
diff changeset
   299
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   300
hgs
parents:
diff changeset
   301
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   302
		m_am_tools, 
hgs
parents:
diff changeset
   303
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   304
		(EAPL("eap_general_settings_client_message_if_c::delete_all_eap_settings(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   305
		this));
hgs
parents:
diff changeset
   306
hgs
parents:
diff changeset
   307
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::delete_all_eap_settings()");
hgs
parents:
diff changeset
   308
hgs
parents:
diff changeset
   309
	{
hgs
parents:
diff changeset
   310
		// Creates message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   311
		eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   312
hgs
parents:
diff changeset
   313
		if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   314
		{
hgs
parents:
diff changeset
   315
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   316
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   317
		}
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
		status = message.add_parameter_data(eap_tlv_message_type_function_general_settings_delete_all_eap_settings);
hgs
parents:
diff changeset
   320
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   321
		{
hgs
parents:
diff changeset
   322
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   323
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   324
		}
hgs
parents:
diff changeset
   325
hgs
parents:
diff changeset
   326
		status = message.add_parameter_data(internal_settings);
hgs
parents:
diff changeset
   327
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   328
		{
hgs
parents:
diff changeset
   329
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   330
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   331
		}
hgs
parents:
diff changeset
   332
hgs
parents:
diff changeset
   333
		status = process_message(&message);
hgs
parents:
diff changeset
   334
	}
hgs
parents:
diff changeset
   335
hgs
parents:
diff changeset
   336
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   337
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   338
}
hgs
parents:
diff changeset
   339
hgs
parents:
diff changeset
   340
//--------------------------------------------------
hgs
parents:
diff changeset
   341
hgs
parents:
diff changeset
   342
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::copy_all_eap_settings(const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   343
{
hgs
parents:
diff changeset
   344
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   345
hgs
parents:
diff changeset
   346
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   347
hgs
parents:
diff changeset
   348
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   349
		m_am_tools, 
hgs
parents:
diff changeset
   350
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   351
		(EAPL("eap_general_settings_client_message_if_c::copy_all_eap_settings(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   352
		this));
hgs
parents:
diff changeset
   353
hgs
parents:
diff changeset
   354
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::copy_all_eap_settings()");
hgs
parents:
diff changeset
   355
hgs
parents:
diff changeset
   356
	{
hgs
parents:
diff changeset
   357
		// Creates message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   358
		eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   359
hgs
parents:
diff changeset
   360
		if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   361
		{
hgs
parents:
diff changeset
   362
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   363
			return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   364
		}
hgs
parents:
diff changeset
   365
hgs
parents:
diff changeset
   366
		status = message.add_parameter_data(eap_tlv_message_type_function_general_settings_copy_all_eap_settings);
hgs
parents:
diff changeset
   367
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   368
		{
hgs
parents:
diff changeset
   369
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   370
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   371
		}
hgs
parents:
diff changeset
   372
hgs
parents:
diff changeset
   373
		status = message.add_parameter_data(internal_settings);
hgs
parents:
diff changeset
   374
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   375
		{
hgs
parents:
diff changeset
   376
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   377
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   378
		}
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
		status = process_message(&message);
hgs
parents:
diff changeset
   381
	}
hgs
parents:
diff changeset
   382
hgs
parents:
diff changeset
   383
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   384
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   385
}
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
//--------------------------------------------------
hgs
parents:
diff changeset
   388
hgs
parents:
diff changeset
   389
eap_status_e eap_general_settings_client_message_if_c::complete_set_eap_methods(
hgs
parents:
diff changeset
   390
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   391
{
hgs
parents:
diff changeset
   392
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   393
hgs
parents:
diff changeset
   394
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   395
		m_am_tools, 
hgs
parents:
diff changeset
   396
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   397
		(EAPL("eap_general_settings_client_message_if_c::complete_set_eap_methods(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   398
		this));
hgs
parents:
diff changeset
   399
hgs
parents:
diff changeset
   400
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::complete_set_eap_methods()");
hgs
parents:
diff changeset
   401
hgs
parents:
diff changeset
   402
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   403
hgs
parents:
diff changeset
   404
	u32_t parameter_index(eap_message_payload_index_first_parameter);
hgs
parents:
diff changeset
   405
hgs
parents:
diff changeset
   406
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   407
hgs
parents:
diff changeset
   408
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   409
	{
hgs
parents:
diff changeset
   410
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   411
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   412
	}
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   415
hgs
parents:
diff changeset
   416
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(m_am_tools, internal_settings);
hgs
parents:
diff changeset
   419
hgs
parents:
diff changeset
   420
	if (internal_settings == 0)
hgs
parents:
diff changeset
   421
	{
hgs
parents:
diff changeset
   422
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   423
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   424
	}
hgs
parents:
diff changeset
   425
hgs
parents:
diff changeset
   426
	eap_status_e status = message_data.read_parameter_data(parameters, parameter_index, internal_settings);
hgs
parents:
diff changeset
   427
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   428
	{
hgs
parents:
diff changeset
   429
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   430
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   431
	}
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   434
hgs
parents:
diff changeset
   435
	status = m_partner->complete_set_eap_methods(
hgs
parents:
diff changeset
   436
		internal_settings->m_completion_status);
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   439
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   440
}
hgs
parents:
diff changeset
   441
hgs
parents:
diff changeset
   442
//--------------------------------------------------
hgs
parents:
diff changeset
   443
hgs
parents:
diff changeset
   444
eap_status_e eap_general_settings_client_message_if_c::complete_get_eap_methods(
hgs
parents:
diff changeset
   445
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   446
{
hgs
parents:
diff changeset
   447
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   448
hgs
parents:
diff changeset
   449
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   450
		m_am_tools, 
hgs
parents:
diff changeset
   451
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   452
		(EAPL("eap_general_settings_client_message_if_c::complete_get_eap_methods(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   453
		this));
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::complete_get_eap_methods()");
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   458
hgs
parents:
diff changeset
   459
	u32_t parameter_index(eap_message_payload_index_first_parameter);
hgs
parents:
diff changeset
   460
hgs
parents:
diff changeset
   461
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   462
hgs
parents:
diff changeset
   463
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   464
	{
hgs
parents:
diff changeset
   465
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   466
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   467
	}
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   470
hgs
parents:
diff changeset
   471
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   472
hgs
parents:
diff changeset
   473
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(m_am_tools, internal_settings);
hgs
parents:
diff changeset
   474
hgs
parents:
diff changeset
   475
	if (internal_settings == 0)
hgs
parents:
diff changeset
   476
	{
hgs
parents:
diff changeset
   477
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   478
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   479
	}
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
	eap_status_e status = message_data.read_parameter_data(parameters, parameter_index, internal_settings);
hgs
parents:
diff changeset
   482
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   483
	{
hgs
parents:
diff changeset
   484
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   485
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   486
	}
hgs
parents:
diff changeset
   487
hgs
parents:
diff changeset
   488
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   489
hgs
parents:
diff changeset
   490
	status = m_partner->complete_get_eap_methods(
hgs
parents:
diff changeset
   491
		internal_settings);
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   494
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   495
}
hgs
parents:
diff changeset
   496
hgs
parents:
diff changeset
   497
//--------------------------------------------------
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
eap_status_e eap_general_settings_client_message_if_c::complete_get_certificate_lists(
hgs
parents:
diff changeset
   500
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   501
{
hgs
parents:
diff changeset
   502
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   503
hgs
parents:
diff changeset
   504
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   505
		m_am_tools, 
hgs
parents:
diff changeset
   506
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   507
		(EAPL("eap_general_settings_client_message_if_c::complete_get_certificate_lists(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   508
		this));
hgs
parents:
diff changeset
   509
hgs
parents:
diff changeset
   510
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::complete_get_certificate_lists()");
hgs
parents:
diff changeset
   511
hgs
parents:
diff changeset
   512
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
	u32_t parameter_index(eap_message_payload_index_first_parameter);
hgs
parents:
diff changeset
   515
hgs
parents:
diff changeset
   516
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   517
hgs
parents:
diff changeset
   518
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   519
	{
hgs
parents:
diff changeset
   520
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   521
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   522
	}
hgs
parents:
diff changeset
   523
hgs
parents:
diff changeset
   524
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   525
hgs
parents:
diff changeset
   526
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   527
hgs
parents:
diff changeset
   528
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(m_am_tools, internal_settings);
hgs
parents:
diff changeset
   529
hgs
parents:
diff changeset
   530
	if (internal_settings == 0)
hgs
parents:
diff changeset
   531
	{
hgs
parents:
diff changeset
   532
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   533
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   534
	}
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
	eap_status_e status = message_data.read_parameter_data(parameters, parameter_index, internal_settings);
hgs
parents:
diff changeset
   537
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   538
	{
hgs
parents:
diff changeset
   539
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   540
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   541
	}
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   544
hgs
parents:
diff changeset
   545
	status = m_partner->complete_get_certificate_lists(
hgs
parents:
diff changeset
   546
		internal_settings);
hgs
parents:
diff changeset
   547
hgs
parents:
diff changeset
   548
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   549
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   550
}
hgs
parents:
diff changeset
   551
hgs
parents:
diff changeset
   552
//--------------------------------------------------
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
eap_status_e eap_general_settings_client_message_if_c::complete_delete_all_eap_settings(
hgs
parents:
diff changeset
   555
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   556
{
hgs
parents:
diff changeset
   557
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   558
hgs
parents:
diff changeset
   559
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   560
		m_am_tools, 
hgs
parents:
diff changeset
   561
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   562
		(EAPL("eap_general_settings_client_message_if_c::complete_delete_all_eap_settings(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   563
		this));
hgs
parents:
diff changeset
   564
hgs
parents:
diff changeset
   565
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::complete_delete_all_eap_settings()");
hgs
parents:
diff changeset
   566
hgs
parents:
diff changeset
   567
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   568
hgs
parents:
diff changeset
   569
	u32_t parameter_index(eap_message_payload_index_first_parameter);
hgs
parents:
diff changeset
   570
hgs
parents:
diff changeset
   571
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   572
hgs
parents:
diff changeset
   573
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   574
	{
hgs
parents:
diff changeset
   575
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   576
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   577
	}
hgs
parents:
diff changeset
   578
hgs
parents:
diff changeset
   579
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   580
hgs
parents:
diff changeset
   581
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   582
hgs
parents:
diff changeset
   583
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(m_am_tools, internal_settings);
hgs
parents:
diff changeset
   584
hgs
parents:
diff changeset
   585
	if (internal_settings == 0)
hgs
parents:
diff changeset
   586
	{
hgs
parents:
diff changeset
   587
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   588
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   589
	}
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
	eap_status_e status = message_data.read_parameter_data(parameters, parameter_index, internal_settings);
hgs
parents:
diff changeset
   592
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   593
	{
hgs
parents:
diff changeset
   594
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   595
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   596
	}
hgs
parents:
diff changeset
   597
hgs
parents:
diff changeset
   598
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
	status = m_partner->complete_delete_all_eap_settings(
hgs
parents:
diff changeset
   601
		internal_settings->m_completion_status);
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   604
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   605
}
hgs
parents:
diff changeset
   606
hgs
parents:
diff changeset
   607
//--------------------------------------------------
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
eap_status_e eap_general_settings_client_message_if_c::complete_copy_all_eap_settings(
hgs
parents:
diff changeset
   610
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   611
{
hgs
parents:
diff changeset
   612
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   613
hgs
parents:
diff changeset
   614
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   615
		m_am_tools, 
hgs
parents:
diff changeset
   616
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   617
		(EAPL("eap_general_settings_client_message_if_c::complete_copy_all_eap_settings(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   618
		this));
hgs
parents:
diff changeset
   619
hgs
parents:
diff changeset
   620
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::complete_copy_all_eap_settings()");
hgs
parents:
diff changeset
   621
hgs
parents:
diff changeset
   622
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
	u32_t parameter_index(eap_message_payload_index_first_parameter);
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   627
hgs
parents:
diff changeset
   628
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   629
	{
hgs
parents:
diff changeset
   630
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   631
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   632
	}
hgs
parents:
diff changeset
   633
hgs
parents:
diff changeset
   634
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   635
hgs
parents:
diff changeset
   636
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   637
hgs
parents:
diff changeset
   638
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(m_am_tools, internal_settings);
hgs
parents:
diff changeset
   639
hgs
parents:
diff changeset
   640
	if (internal_settings == 0)
hgs
parents:
diff changeset
   641
	{
hgs
parents:
diff changeset
   642
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   643
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   644
	}
hgs
parents:
diff changeset
   645
hgs
parents:
diff changeset
   646
	eap_status_e status = message_data.read_parameter_data(parameters, parameter_index, internal_settings);
hgs
parents:
diff changeset
   647
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   648
	{
hgs
parents:
diff changeset
   649
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   650
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   651
	}
hgs
parents:
diff changeset
   652
hgs
parents:
diff changeset
   653
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   654
hgs
parents:
diff changeset
   655
	status = m_partner->complete_copy_all_eap_settings(
hgs
parents:
diff changeset
   656
		internal_settings->m_completion_status);
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   659
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   660
}
hgs
parents:
diff changeset
   661
hgs
parents:
diff changeset
   662
//--------------------------------------------------
hgs
parents:
diff changeset
   663
hgs
parents:
diff changeset
   664
eap_status_e eap_general_settings_client_message_if_c::process_message_type_error(
hgs
parents:
diff changeset
   665
	EAP_TEMPLATE_CONST eap_array_c<eap_tlv_header_c> * const parameters)
hgs
parents:
diff changeset
   666
{
hgs
parents:
diff changeset
   667
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   668
		m_am_tools, 
hgs
parents:
diff changeset
   669
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   670
		(EAPL("eap_general_settings_client_message_if_c::process_message_type_error(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   671
		this));
hgs
parents:
diff changeset
   672
hgs
parents:
diff changeset
   673
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::process_message_type_error()");
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
	eap_process_tlv_message_data_c message_data(m_am_tools);
hgs
parents:
diff changeset
   678
hgs
parents:
diff changeset
   679
	if (message_data.get_is_valid() == false)
hgs
parents:
diff changeset
   680
	{
hgs
parents:
diff changeset
   681
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   682
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   683
	}
hgs
parents:
diff changeset
   684
hgs
parents:
diff changeset
   685
	// Error payload is the first in this case.
hgs
parents:
diff changeset
   686
	status = message_data.read_parameter_data(parameters, eap_message_payload_index_function, eap_tlv_message_type_error, &m_error_code);
hgs
parents:
diff changeset
   687
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   688
	{
hgs
parents:
diff changeset
   689
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   690
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   691
	}
hgs
parents:
diff changeset
   692
hgs
parents:
diff changeset
   693
	// Fuction payload is the second in this case.
hgs
parents:
diff changeset
   694
	status = message_data.read_parameter_data(parameters, eap_message_payload_index_first_parameter, &m_error_function);
hgs
parents:
diff changeset
   695
hgs
parents:
diff changeset
   696
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   697
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   698
}
hgs
parents:
diff changeset
   699
hgs
parents:
diff changeset
   700
//--------------------------------------------------
hgs
parents:
diff changeset
   701
hgs
parents:
diff changeset
   702
EAP_FUNC_EXPORT eap_status_e eap_general_settings_client_message_if_c::send_data(const void * const data, const u32_t length)
hgs
parents:
diff changeset
   703
{
hgs
parents:
diff changeset
   704
	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   705
hgs
parents:
diff changeset
   706
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   707
		m_am_tools, 
hgs
parents:
diff changeset
   708
		EAP_TRACE_FLAGS_MESSAGE_DATA, 
hgs
parents:
diff changeset
   709
		(EAPL("eap_general_settings_client_message_if_c::send_data(): this = 0x%08x.\n"),
hgs
parents:
diff changeset
   710
		this));
hgs
parents:
diff changeset
   711
hgs
parents:
diff changeset
   712
	EAP_TRACE_RETURN_STRING_FLAGS(m_am_tools, EAP_TRACE_FLAGS_MESSAGE_DATA, "returns: eap_general_settings_client_message_if_c::send_data()");
hgs
parents:
diff changeset
   713
hgs
parents:
diff changeset
   714
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   715
hgs
parents:
diff changeset
   716
	// Parses message data composed of Attribute-Value Pairs.
hgs
parents:
diff changeset
   717
	eap_process_tlv_message_data_c message(m_am_tools);
hgs
parents:
diff changeset
   718
hgs
parents:
diff changeset
   719
	if (message.get_is_valid() == false)
hgs
parents:
diff changeset
   720
	{
hgs
parents:
diff changeset
   721
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   722
		return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error);
hgs
parents:
diff changeset
   723
	}
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
	status = message.set_message_data(length, data);
hgs
parents:
diff changeset
   726
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   727
	{
hgs
parents:
diff changeset
   728
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   729
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   730
	}
hgs
parents:
diff changeset
   731
hgs
parents:
diff changeset
   732
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
   733
		m_am_tools,
hgs
parents:
diff changeset
   734
		EAP_TRACE_FLAGS_MESSAGE_DATA,
hgs
parents:
diff changeset
   735
		(EAPL("eap_general_settings_client_message_if_c::send_data()"),
hgs
parents:
diff changeset
   736
		message.get_message_data(),
hgs
parents:
diff changeset
   737
		message.get_message_data_length()));
hgs
parents:
diff changeset
   738
hgs
parents:
diff changeset
   739
	eap_array_c<eap_tlv_header_c> parameters(m_am_tools);
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
	status = message.parse_message_data(&parameters);
hgs
parents:
diff changeset
   742
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   743
	{
hgs
parents:
diff changeset
   744
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   745
		return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   746
	}
hgs
parents:
diff changeset
   747
hgs
parents:
diff changeset
   748
	if (parameters.get_object_count() == 0)
hgs
parents:
diff changeset
   749
	{
hgs
parents:
diff changeset
   750
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   751
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
   752
	}
hgs
parents:
diff changeset
   753
hgs
parents:
diff changeset
   754
	const eap_tlv_header_c * const function_header = parameters.get_object(eap_message_payload_index_function);
hgs
parents:
diff changeset
   755
	if (function_header == 0
hgs
parents:
diff changeset
   756
		|| (function_header->get_type() != eap_tlv_message_type_error
hgs
parents:
diff changeset
   757
			&& function_header->get_type() != eap_tlv_message_type_function))
hgs
parents:
diff changeset
   758
	{
hgs
parents:
diff changeset
   759
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   760
		return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
hgs
parents:
diff changeset
   761
	}
hgs
parents:
diff changeset
   762
hgs
parents:
diff changeset
   763
	if (function_header->get_type() == eap_tlv_message_type_error)
hgs
parents:
diff changeset
   764
	{
hgs
parents:
diff changeset
   765
		status = process_message_type_error(&parameters);
hgs
parents:
diff changeset
   766
	}
hgs
parents:
diff changeset
   767
	else
hgs
parents:
diff changeset
   768
	{
hgs
parents:
diff changeset
   769
		eap_tlv_message_type_function_e function(eap_tlv_message_type_function_none);
hgs
parents:
diff changeset
   770
hgs
parents:
diff changeset
   771
		status = message.get_parameter_data(function_header, &function);
hgs
parents:
diff changeset
   772
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   773
		{
hgs
parents:
diff changeset
   774
			EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   775
			return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   776
		}
hgs
parents:
diff changeset
   777
hgs
parents:
diff changeset
   778
		switch(function)
hgs
parents:
diff changeset
   779
		{
hgs
parents:
diff changeset
   780
		case eap_tlv_message_type_function_general_settings_complete_set_eap_methods:
hgs
parents:
diff changeset
   781
			status = complete_set_eap_methods(&parameters);
hgs
parents:
diff changeset
   782
			break;
hgs
parents:
diff changeset
   783
		case eap_tlv_message_type_function_general_settings_complete_get_eap_methods:
hgs
parents:
diff changeset
   784
			status = complete_get_eap_methods(&parameters);
hgs
parents:
diff changeset
   785
			break;
hgs
parents:
diff changeset
   786
		case eap_tlv_message_type_function_general_settings_complete_get_certificate_lists:
hgs
parents:
diff changeset
   787
			status = complete_get_certificate_lists(&parameters);
hgs
parents:
diff changeset
   788
			break;
hgs
parents:
diff changeset
   789
		case eap_tlv_message_type_function_general_settings_complete_delete_all_eap_settings:
hgs
parents:
diff changeset
   790
			status = complete_delete_all_eap_settings(&parameters);
hgs
parents:
diff changeset
   791
			break;
hgs
parents:
diff changeset
   792
		case eap_tlv_message_type_function_general_settings_complete_copy_all_eap_settings:
hgs
parents:
diff changeset
   793
			status = complete_copy_all_eap_settings(&parameters);
hgs
parents:
diff changeset
   794
			break;
hgs
parents:
diff changeset
   795
		default:
hgs
parents:
diff changeset
   796
			EAP_TRACE_ERROR(
hgs
parents:
diff changeset
   797
				m_am_tools,
hgs
parents:
diff changeset
   798
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   799
				(EAPL("ERROR: send_data(): unknown function %d.\n"),
hgs
parents:
diff changeset
   800
				 function));
hgs
parents:
diff changeset
   801
hgs
parents:
diff changeset
   802
			EAP_ASSERT_ANYWAY_TOOLS(m_am_tools);
hgs
parents:
diff changeset
   803
hgs
parents:
diff changeset
   804
			status = eap_status_illegal_parameter;
hgs
parents:
diff changeset
   805
		};
hgs
parents:
diff changeset
   806
	}
hgs
parents:
diff changeset
   807
hgs
parents:
diff changeset
   808
	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   809
	return EAP_STATUS_RETURN(m_am_tools, status);
hgs
parents:
diff changeset
   810
}
hgs
parents:
diff changeset
   811
hgs
parents:
diff changeset
   812
//--------------------------------------------------
hgs
parents:
diff changeset
   813
// End.