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