eapol/eapol_framework/eapol_symbian/eap_if/src/EapGeneralSettingsImpl.cpp
author hgs
Thu, 16 Sep 2010 13:07:04 +0300
changeset 49 43351a4f2da3
parent 34 ad1f037f1ac2
permissions -rw-r--r--
201037
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2001-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:  This is implementation of CEapGeneralSettings interface.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/*
49
hgs
parents: 34
diff changeset
    19
* %version: 52 %
26
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
// This is enumeration of EAPOL source code.
hgs
parents:
diff changeset
    23
#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents:
diff changeset
    24
	#undef EAP_FILE_NUMBER_ENUM
34
hgs
parents: 26
diff changeset
    25
	#define EAP_FILE_NUMBER_ENUM 740 
26
hgs
parents:
diff changeset
    26
	#undef EAP_FILE_NUMBER_DATE 
hgs
parents:
diff changeset
    27
	#define EAP_FILE_NUMBER_DATE 1127594498 
hgs
parents:
diff changeset
    28
#endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
hgs
parents:
diff changeset
    29
hgs
parents:
diff changeset
    30
hgs
parents:
diff changeset
    31
// INCLUDE FILES
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
#include "EapGeneralSettingsImpl.h"
hgs
parents:
diff changeset
    34
#include "EapConversion.h"
hgs
parents:
diff changeset
    35
#include "eap_am_assert.h"
hgs
parents:
diff changeset
    36
#include <EapTypeInfo.h>
hgs
parents:
diff changeset
    37
#include "abs_eap_am_tools.h"
hgs
parents:
diff changeset
    38
#include "eap_automatic_variable.h"
hgs
parents:
diff changeset
    39
#include <utf.h>                           // for CnvUtfConverter
hgs
parents:
diff changeset
    40
#include "abs_eap_am_message_if.h"
hgs
parents:
diff changeset
    41
#include "eap_am_message_if.h"
hgs
parents:
diff changeset
    42
#include "eap_automatic_variable.h"
hgs
parents:
diff changeset
    43
#include "eap_general_settings_message.h"
hgs
parents:
diff changeset
    44
#include "eap_am_message_if_symbian.h"
hgs
parents:
diff changeset
    45
#include "eap_process_tlv_message_data.h"
hgs
parents:
diff changeset
    46
#include "eap_general_settings_client_message_if.h"
hgs
parents:
diff changeset
    47
hgs
parents:
diff changeset
    48
// LOCAL CONSTANTS
hgs
parents:
diff changeset
    49
hgs
parents:
diff changeset
    50
// The version number of this interface.
hgs
parents:
diff changeset
    51
const TUint KInterfaceVersion = 1;
hgs
parents:
diff changeset
    52
hgs
parents:
diff changeset
    53
hgs
parents:
diff changeset
    54
// ================= MEMBER FUNCTIONS =======================
hgs
parents:
diff changeset
    55
hgs
parents:
diff changeset
    56
CEapGeneralSettingsImpl::CEapGeneralSettingsImpl(
hgs
parents:
diff changeset
    57
	const TIndexType aIndexType,	
hgs
parents:
diff changeset
    58
	const TInt aIndex)
hgs
parents:
diff changeset
    59
: m_am_tools(abs_eap_am_tools_c::new_abs_eap_am_tools_c())
hgs
parents:
diff changeset
    60
, m_server(new_eap_general_settings_client_message_if_c(
hgs
parents:
diff changeset
    61
		m_am_tools,
hgs
parents:
diff changeset
    62
		this))
hgs
parents:
diff changeset
    63
, iIndexType(aIndexType)
hgs
parents:
diff changeset
    64
, iIndex(aIndex)
hgs
parents:
diff changeset
    65
, iActiveEapMethods(0)
hgs
parents:
diff changeset
    66
, iDisabledEapMethods(0)
hgs
parents:
diff changeset
    67
, iUserCerts(0)
hgs
parents:
diff changeset
    68
, iCACerts(0)
hgs
parents:
diff changeset
    69
, iWaitState(eap_general_settings_wait_state_none)
hgs
parents:
diff changeset
    70
, iCompletionStatus(eap_status_process_general_error)
hgs
parents:
diff changeset
    71
{
hgs
parents:
diff changeset
    72
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    73
		m_am_tools,
hgs
parents:
diff changeset
    74
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
    75
		(EAPL("CEapGeneralSettingsImpl::CEapGeneralSettingsImpl(): this=0x%08x.\n"),
hgs
parents:
diff changeset
    76
		this));
hgs
parents:
diff changeset
    77
hgs
parents:
diff changeset
    78
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::CEapGeneralSettingsImpl()");
hgs
parents:
diff changeset
    79
hgs
parents:
diff changeset
    80
}
hgs
parents:
diff changeset
    81
hgs
parents:
diff changeset
    82
// ----------------------------------------------------------
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
void CEapGeneralSettingsImpl::ConstructL()
hgs
parents:
diff changeset
    85
{
hgs
parents:
diff changeset
    86
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    87
		m_am_tools,
hgs
parents:
diff changeset
    88
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
    89
		(EAPL("CEapGeneralSettingsImpl::ConstructL(): this=0x%08x.\n"),
hgs
parents:
diff changeset
    90
		this));
hgs
parents:
diff changeset
    91
hgs
parents:
diff changeset
    92
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::ConstructL()");
hgs
parents:
diff changeset
    93
hgs
parents:
diff changeset
    94
	if (m_am_tools == 0
hgs
parents:
diff changeset
    95
		|| m_am_tools->get_is_valid() == false
hgs
parents:
diff changeset
    96
		|| m_server == 0
hgs
parents:
diff changeset
    97
		|| m_server->get_is_valid() == false)
hgs
parents:
diff changeset
    98
	{
hgs
parents:
diff changeset
    99
		abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools);
hgs
parents:
diff changeset
   100
		delete m_server;
hgs
parents:
diff changeset
   101
hgs
parents:
diff changeset
   102
		User::Leave(KErrNoMemory);
hgs
parents:
diff changeset
   103
	}
hgs
parents:
diff changeset
   104
hgs
parents:
diff changeset
   105
	eap_status_e status = m_server->configure();
hgs
parents:
diff changeset
   106
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   107
	{
hgs
parents:
diff changeset
   108
		TInt aStatus = m_am_tools->convert_eapol_error_to_am_error(status);
hgs
parents:
diff changeset
   109
			
hgs
parents:
diff changeset
   110
		abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools);
hgs
parents:
diff changeset
   111
		delete m_server;
hgs
parents:
diff changeset
   112
hgs
parents:
diff changeset
   113
		User::Leave(aStatus);
hgs
parents:
diff changeset
   114
	}
hgs
parents:
diff changeset
   115
}
hgs
parents:
diff changeset
   116
hgs
parents:
diff changeset
   117
// ----------------------------------------------------------
hgs
parents:
diff changeset
   118
hgs
parents:
diff changeset
   119
CEapGeneralSettingsImpl* CEapGeneralSettingsImpl::NewL(SIapInfo* aIapInfo)
hgs
parents:
diff changeset
   120
{
hgs
parents:
diff changeset
   121
	CEapGeneralSettingsImpl* self = new(ELeave) CEapGeneralSettingsImpl(aIapInfo->indexType, aIapInfo->index);
hgs
parents:
diff changeset
   122
hgs
parents:
diff changeset
   123
	CleanupStack::PushL(self);
hgs
parents:
diff changeset
   124
hgs
parents:
diff changeset
   125
	self->ConstructL();
hgs
parents:
diff changeset
   126
hgs
parents:
diff changeset
   127
	CleanupStack::Pop();
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
	return self;
hgs
parents:
diff changeset
   130
}
hgs
parents:
diff changeset
   131
hgs
parents:
diff changeset
   132
// ----------------------------------------------------------
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
CEapGeneralSettingsImpl::~CEapGeneralSettingsImpl()
hgs
parents:
diff changeset
   135
{
hgs
parents:
diff changeset
   136
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   137
		m_am_tools,
hgs
parents:
diff changeset
   138
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   139
		(EAPL("CEapGeneralSettingsImpl::~CEapGeneralSettingsImpl(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   140
		this));
hgs
parents:
diff changeset
   141
hgs
parents:
diff changeset
   142
	if (m_server != 0)
hgs
parents:
diff changeset
   143
	{
hgs
parents:
diff changeset
   144
		m_server->shutdown();
hgs
parents:
diff changeset
   145
	}
hgs
parents:
diff changeset
   146
	delete m_server;
hgs
parents:
diff changeset
   147
hgs
parents:
diff changeset
   148
	abs_eap_am_tools_c::delete_abs_eap_am_tools_c(m_am_tools);
hgs
parents:
diff changeset
   149
}
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
// ----------------------------------------------------------
hgs
parents:
diff changeset
   152
hgs
parents:
diff changeset
   153
TUint CEapGeneralSettingsImpl::GetInterfaceVersion()
hgs
parents:
diff changeset
   154
{
hgs
parents:
diff changeset
   155
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   156
		m_am_tools,
hgs
parents:
diff changeset
   157
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   158
		(EAPL("CEapGeneralSettingsImpl::GetInterfaceVersion(): this=0x%08x\n"),
hgs
parents:
diff changeset
   159
		this));
hgs
parents:
diff changeset
   160
hgs
parents:
diff changeset
   161
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::GetInterfaceVersion()");
hgs
parents:
diff changeset
   162
hgs
parents:
diff changeset
   163
	return KInterfaceVersion;
hgs
parents:
diff changeset
   164
}
hgs
parents:
diff changeset
   165
hgs
parents:
diff changeset
   166
//----------------------------------------------------------------
hgs
parents:
diff changeset
   167
hgs
parents:
diff changeset
   168
void CEapGeneralSettingsImpl::Activate()
hgs
parents:
diff changeset
   169
{
hgs
parents:
diff changeset
   170
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   171
		m_am_tools,
hgs
parents:
diff changeset
   172
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   173
		(EAPL("CEapGeneralSettingsImpl::Activate(): iAsyncronousStatus=%u\n"),
hgs
parents:
diff changeset
   174
		iAsyncronousStatus.Int()));
hgs
parents:
diff changeset
   175
hgs
parents:
diff changeset
   176
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::Activate()");
hgs
parents:
diff changeset
   177
hgs
parents:
diff changeset
   178
	iAsyncronousStatus = KRequestPending;
hgs
parents:
diff changeset
   179
hgs
parents:
diff changeset
   180
}
hgs
parents:
diff changeset
   181
hgs
parents:
diff changeset
   182
//----------------------------------------------------------------
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
void CEapGeneralSettingsImpl::Complete()
hgs
parents:
diff changeset
   185
{
hgs
parents:
diff changeset
   186
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   187
		m_am_tools,
hgs
parents:
diff changeset
   188
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   189
		(EAPL("CEapGeneralSettingsImpl::Complete(): iAsyncronousStatus=%u\n"),
hgs
parents:
diff changeset
   190
		iAsyncronousStatus.Int()));
hgs
parents:
diff changeset
   191
hgs
parents:
diff changeset
   192
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::Complete()");
hgs
parents:
diff changeset
   193
hgs
parents:
diff changeset
   194
	iAsyncronousStatus = KErrNone;
hgs
parents:
diff changeset
   195
hgs
parents:
diff changeset
   196
	// This is needed to continue the execution after Wait.Start(); 
hgs
parents:
diff changeset
   197
	iWait.AsyncStop();
hgs
parents:
diff changeset
   198
}
hgs
parents:
diff changeset
   199
hgs
parents:
diff changeset
   200
//----------------------------------------------------------------
hgs
parents:
diff changeset
   201
hgs
parents:
diff changeset
   202
void CEapGeneralSettingsImpl::WaitCompletion()
hgs
parents:
diff changeset
   203
{
hgs
parents:
diff changeset
   204
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   205
		m_am_tools,
hgs
parents:
diff changeset
   206
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   207
		(EAPL("CEapGeneralSettingsImpl::WaitCompletion(): iAsyncronousStatus=%u\n"),
hgs
parents:
diff changeset
   208
		iAsyncronousStatus.Int()));
hgs
parents:
diff changeset
   209
hgs
parents:
diff changeset
   210
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::WaitCompletion()");
hgs
parents:
diff changeset
   211
hgs
parents:
diff changeset
   212
	while (iAsyncronousStatus == KRequestPending)
hgs
parents:
diff changeset
   213
	{
hgs
parents:
diff changeset
   214
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   215
			m_am_tools,
hgs
parents:
diff changeset
   216
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   217
			(EAPL("CEapGeneralSettingsImpl::WaitCompletion(): calls iWait.Start()\n")));
hgs
parents:
diff changeset
   218
hgs
parents:
diff changeset
   219
		iWait.Start();
hgs
parents:
diff changeset
   220
hgs
parents:
diff changeset
   221
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   222
			m_am_tools,
hgs
parents:
diff changeset
   223
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   224
			(EAPL("CEapGeneralSettingsImpl::WaitCompletion(): iWait.Start() returns, iAsyncronousStatus=%u\n"),
hgs
parents:
diff changeset
   225
			iAsyncronousStatus.Int()));
hgs
parents:
diff changeset
   226
	}
hgs
parents:
diff changeset
   227
}
hgs
parents:
diff changeset
   228
hgs
parents:
diff changeset
   229
// ----------------------------------------------------------
hgs
parents:
diff changeset
   230
hgs
parents:
diff changeset
   231
void CEapGeneralSettingsImpl::SetCompletionStatusIfStillOk(const eap_status_e status)
hgs
parents:
diff changeset
   232
{
hgs
parents:
diff changeset
   233
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   234
		m_am_tools,
hgs
parents:
diff changeset
   235
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   236
		(EAPL("CEapGeneralSettingsImpl::SetCompletionStatusIfStillOk(): iCompletionStatus=%d=%s, status=%d=%s\n"),
hgs
parents:
diff changeset
   237
		iCompletionStatus,
hgs
parents:
diff changeset
   238
		eap_status_string_c::get_status_string(iCompletionStatus),
hgs
parents:
diff changeset
   239
		status,
hgs
parents:
diff changeset
   240
		eap_status_string_c::get_status_string(status)));
hgs
parents:
diff changeset
   241
hgs
parents:
diff changeset
   242
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::SetCompletionStatusIfStillOk()");
hgs
parents:
diff changeset
   243
hgs
parents:
diff changeset
   244
	if (iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   245
	{
hgs
parents:
diff changeset
   246
		iCompletionStatus = status;
hgs
parents:
diff changeset
   247
	}
hgs
parents:
diff changeset
   248
}
hgs
parents:
diff changeset
   249
hgs
parents:
diff changeset
   250
// ----------------------------------------------------------
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
TInt CEapGeneralSettingsImpl::GetEapMethods(
hgs
parents:
diff changeset
   253
	RArray<TEapExpandedType> & ActiveEapMethods,
hgs
parents:
diff changeset
   254
	RArray<TEapExpandedType> & DisabledEapMethods)
hgs
parents:
diff changeset
   255
{
hgs
parents:
diff changeset
   256
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   257
		m_am_tools,
hgs
parents:
diff changeset
   258
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   259
		(EAPL("CEapGeneralSettingsImpl::GetEapMethods(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   260
		this));
hgs
parents:
diff changeset
   261
hgs
parents:
diff changeset
   262
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::GetEapMethods()");
hgs
parents:
diff changeset
   263
hgs
parents:
diff changeset
   264
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   265
hgs
parents:
diff changeset
   266
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(
hgs
parents:
diff changeset
   267
		m_am_tools,
hgs
parents:
diff changeset
   268
		internal_settings);
hgs
parents:
diff changeset
   269
hgs
parents:
diff changeset
   270
	if (internal_settings == 0)
hgs
parents:
diff changeset
   271
	{
hgs
parents:
diff changeset
   272
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   273
			EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error));
hgs
parents:
diff changeset
   274
	}
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
	internal_settings->m_IndexType = iIndexType;
hgs
parents:
diff changeset
   277
	internal_settings->m_Index = iIndex;
hgs
parents:
diff changeset
   278
hgs
parents:
diff changeset
   279
	iActiveEapMethods = &ActiveEapMethods;
hgs
parents:
diff changeset
   280
	iDisabledEapMethods = &DisabledEapMethods;
hgs
parents:
diff changeset
   281
hgs
parents:
diff changeset
   282
	eap_status_e status = m_server->get_eap_methods(internal_settings);
hgs
parents:
diff changeset
   283
hgs
parents:
diff changeset
   284
	iWaitState = eap_general_settings_wait_state_complete_get_eap_methods;
hgs
parents:
diff changeset
   285
	Activate();
hgs
parents:
diff changeset
   286
    WaitCompletion();
hgs
parents:
diff changeset
   287
hgs
parents:
diff changeset
   288
	if (iCompletionStatus != eap_status_ok)
hgs
parents:
diff changeset
   289
	{
hgs
parents:
diff changeset
   290
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   291
			EAP_STATUS_RETURN(m_am_tools, iCompletionStatus));
hgs
parents:
diff changeset
   292
	}
hgs
parents:
diff changeset
   293
hgs
parents:
diff changeset
   294
	return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   295
			EAP_STATUS_RETURN(m_am_tools, status));
hgs
parents:
diff changeset
   296
}
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
// ----------------------------------------------------------
hgs
parents:
diff changeset
   299
hgs
parents:
diff changeset
   300
TInt CEapGeneralSettingsImpl::SetEapMethods(
hgs
parents:
diff changeset
   301
	const RArray<TEapExpandedType> & ActiveEapMethods,
hgs
parents:
diff changeset
   302
	const RArray<TEapExpandedType> & DisabledEapMethods)
hgs
parents:
diff changeset
   303
{
hgs
parents:
diff changeset
   304
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   305
		m_am_tools,
hgs
parents:
diff changeset
   306
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   307
		(EAPL("CEapGeneralSettingsImpl::SetEapMethods(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   308
		this));
hgs
parents:
diff changeset
   309
hgs
parents:
diff changeset
   310
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::SetEapMethods()");
hgs
parents:
diff changeset
   311
hgs
parents:
diff changeset
   312
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   313
hgs
parents:
diff changeset
   314
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(
hgs
parents:
diff changeset
   315
		m_am_tools,
hgs
parents:
diff changeset
   316
		internal_settings);
hgs
parents:
diff changeset
   317
hgs
parents:
diff changeset
   318
	if (internal_settings == 0)
hgs
parents:
diff changeset
   319
	{
hgs
parents:
diff changeset
   320
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   321
			EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error));
hgs
parents:
diff changeset
   322
	}
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
	internal_settings->m_IndexType = iIndexType;
hgs
parents:
diff changeset
   325
	internal_settings->m_Index = iIndex;
hgs
parents:
diff changeset
   326
hgs
parents:
diff changeset
   327
hgs
parents:
diff changeset
   328
	TInt error = CEapConversion::ConvertExpandedEAPTypesToInternalTypes(
hgs
parents:
diff changeset
   329
		m_am_tools,
hgs
parents:
diff changeset
   330
		&ActiveEapMethods,
hgs
parents:
diff changeset
   331
		&(internal_settings->m_active_eap_methods));
hgs
parents:
diff changeset
   332
	if (error != KErrNone)
hgs
parents:
diff changeset
   333
	{
hgs
parents:
diff changeset
   334
		return error;
hgs
parents:
diff changeset
   335
	}
hgs
parents:
diff changeset
   336
hgs
parents:
diff changeset
   337
hgs
parents:
diff changeset
   338
	error = CEapConversion::ConvertExpandedEAPTypesToInternalTypes(
hgs
parents:
diff changeset
   339
		m_am_tools,
hgs
parents:
diff changeset
   340
		&DisabledEapMethods,
hgs
parents:
diff changeset
   341
		&(internal_settings->m_disabled_eap_methods));
hgs
parents:
diff changeset
   342
	if (error != KErrNone)
hgs
parents:
diff changeset
   343
	{
hgs
parents:
diff changeset
   344
		return error;
hgs
parents:
diff changeset
   345
	}
hgs
parents:
diff changeset
   346
hgs
parents:
diff changeset
   347
	internal_settings->m_SelectedEAPTypesPresent = true;
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
	eap_status_e status = m_server->set_eap_methods(internal_settings);
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
	iWaitState = eap_general_settings_wait_state_complete_set_eap_methods;
hgs
parents:
diff changeset
   352
	Activate();
hgs
parents:
diff changeset
   353
    WaitCompletion();
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
	if (iCompletionStatus != eap_status_ok)
hgs
parents:
diff changeset
   356
	{
hgs
parents:
diff changeset
   357
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   358
			EAP_STATUS_RETURN(m_am_tools, iCompletionStatus));
hgs
parents:
diff changeset
   359
	}
hgs
parents:
diff changeset
   360
hgs
parents:
diff changeset
   361
	return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   362
			EAP_STATUS_RETURN(m_am_tools, status));
hgs
parents:
diff changeset
   363
}
hgs
parents:
diff changeset
   364
hgs
parents:
diff changeset
   365
// ----------------------------------------------------------
hgs
parents:
diff changeset
   366
hgs
parents:
diff changeset
   367
eap_status_e CEapGeneralSettingsImpl::complete_get_eap_methods(
hgs
parents:
diff changeset
   368
	const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   369
{
hgs
parents:
diff changeset
   370
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   371
		m_am_tools,
hgs
parents:
diff changeset
   372
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   373
		(EAPL("CEapGeneralSettingsImpl::complete_get_eap_methods(): this=0x%08x, iWaitState=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   374
		this,
hgs
parents:
diff changeset
   375
		iWaitState,
hgs
parents:
diff changeset
   376
		internal_settings->m_completion_status,
hgs
parents:
diff changeset
   377
		eap_status_string_c::get_status_string(internal_settings->m_completion_status)));
hgs
parents:
diff changeset
   378
hgs
parents:
diff changeset
   379
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::complete_get_eap_methods()");
hgs
parents:
diff changeset
   380
hgs
parents:
diff changeset
   381
	if (internal_settings == 0)
hgs
parents:
diff changeset
   382
	{
hgs
parents:
diff changeset
   383
		iCompletionStatus = eap_status_illegal_parameter;
hgs
parents:
diff changeset
   384
hgs
parents:
diff changeset
   385
		Complete();
hgs
parents:
diff changeset
   386
hgs
parents:
diff changeset
   387
		return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus);
hgs
parents:
diff changeset
   388
	}
hgs
parents:
diff changeset
   389
hgs
parents:
diff changeset
   390
	iCompletionStatus = internal_settings->m_completion_status;
hgs
parents:
diff changeset
   391
hgs
parents:
diff changeset
   392
	if (iWaitState == eap_general_settings_wait_state_complete_get_eap_methods
hgs
parents:
diff changeset
   393
		&& iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   394
	{
hgs
parents:
diff changeset
   395
		if (iActiveEapMethods != 0
hgs
parents:
diff changeset
   396
			&& iDisabledEapMethods != 0
hgs
parents:
diff changeset
   397
			&& internal_settings != 0)
hgs
parents:
diff changeset
   398
		{
hgs
parents:
diff changeset
   399
			TInt error(KErrNone);
hgs
parents:
diff changeset
   400
hgs
parents:
diff changeset
   401
			error = CEapConversion::ConvertInternalTypesToExpandedEAPTypes(
hgs
parents:
diff changeset
   402
				m_am_tools,
hgs
parents:
diff changeset
   403
				&(internal_settings->m_active_eap_methods),
hgs
parents:
diff changeset
   404
				iActiveEapMethods);
hgs
parents:
diff changeset
   405
			if (error != KErrNone)
hgs
parents:
diff changeset
   406
			{
hgs
parents:
diff changeset
   407
				SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)));
hgs
parents:
diff changeset
   408
			}
hgs
parents:
diff changeset
   409
			else
hgs
parents:
diff changeset
   410
			{
hgs
parents:
diff changeset
   411
				error = CEapConversion::ConvertInternalTypesToExpandedEAPTypes(
hgs
parents:
diff changeset
   412
					m_am_tools,
hgs
parents:
diff changeset
   413
					&(internal_settings->m_disabled_eap_methods),
hgs
parents:
diff changeset
   414
					iDisabledEapMethods);
hgs
parents:
diff changeset
   415
				if (error != KErrNone)
hgs
parents:
diff changeset
   416
				{
hgs
parents:
diff changeset
   417
					SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)));
hgs
parents:
diff changeset
   418
				}
hgs
parents:
diff changeset
   419
			}
hgs
parents:
diff changeset
   420
		}
hgs
parents:
diff changeset
   421
		else
hgs
parents:
diff changeset
   422
		{
hgs
parents:
diff changeset
   423
			SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter));
hgs
parents:
diff changeset
   424
		}
hgs
parents:
diff changeset
   425
	}
hgs
parents:
diff changeset
   426
	else if (iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   427
	{
hgs
parents:
diff changeset
   428
		// ERROR, wrong state. Other function was completed successfully not the function that was waited.
hgs
parents:
diff changeset
   429
		SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state));
hgs
parents:
diff changeset
   430
	}
hgs
parents:
diff changeset
   431
hgs
parents:
diff changeset
   432
	Complete();
hgs
parents:
diff changeset
   433
hgs
parents:
diff changeset
   434
	return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus);
hgs
parents:
diff changeset
   435
}
hgs
parents:
diff changeset
   436
hgs
parents:
diff changeset
   437
// ----------------------------------------------------------
hgs
parents:
diff changeset
   438
hgs
parents:
diff changeset
   439
eap_status_e CEapGeneralSettingsImpl::complete_set_eap_methods(
hgs
parents:
diff changeset
   440
	const eap_status_e completion_status)
hgs
parents:
diff changeset
   441
{
hgs
parents:
diff changeset
   442
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   443
		m_am_tools,
hgs
parents:
diff changeset
   444
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   445
		(EAPL("CEapGeneralSettingsImpl::complete_set_eap_methods(): this=0x%08x, iWaitState=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   446
		this,
hgs
parents:
diff changeset
   447
		iWaitState,
hgs
parents:
diff changeset
   448
		completion_status,
hgs
parents:
diff changeset
   449
		eap_status_string_c::get_status_string(completion_status)));
hgs
parents:
diff changeset
   450
hgs
parents:
diff changeset
   451
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::complete_set_eap_methods()");
hgs
parents:
diff changeset
   452
hgs
parents:
diff changeset
   453
	iCompletionStatus = completion_status;
hgs
parents:
diff changeset
   454
hgs
parents:
diff changeset
   455
	if (iWaitState != eap_general_settings_wait_state_complete_set_eap_methods
hgs
parents:
diff changeset
   456
		&& iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   457
	{
hgs
parents:
diff changeset
   458
		// ERROR, wrong state. Other function was completed successfully not the function that was waited.
hgs
parents:
diff changeset
   459
		SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state));
hgs
parents:
diff changeset
   460
	}
hgs
parents:
diff changeset
   461
hgs
parents:
diff changeset
   462
	Complete();
hgs
parents:
diff changeset
   463
hgs
parents:
diff changeset
   464
	return EAP_STATUS_RETURN(m_am_tools, completion_status);
hgs
parents:
diff changeset
   465
}
hgs
parents:
diff changeset
   466
hgs
parents:
diff changeset
   467
// ----------------------------------------------------------
hgs
parents:
diff changeset
   468
hgs
parents:
diff changeset
   469
TInt CEapGeneralSettingsImpl::GetCertificateLists(
hgs
parents:
diff changeset
   470
	RPointerArray<EapCertificateEntry> & aUserCerts,
hgs
parents:
diff changeset
   471
	RPointerArray<EapCertificateEntry> & aCACerts)
hgs
parents:
diff changeset
   472
{
hgs
parents:
diff changeset
   473
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   474
		m_am_tools,
hgs
parents:
diff changeset
   475
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   476
		(EAPL("CEapGeneralSettingsImpl::GetCertificateLists(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   477
		this));
hgs
parents:
diff changeset
   478
hgs
parents:
diff changeset
   479
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::GetCertificateLists()");
hgs
parents:
diff changeset
   480
hgs
parents:
diff changeset
   481
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   482
hgs
parents:
diff changeset
   483
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(
hgs
parents:
diff changeset
   484
		m_am_tools,
hgs
parents:
diff changeset
   485
		internal_settings);
hgs
parents:
diff changeset
   486
hgs
parents:
diff changeset
   487
	if (internal_settings == 0)
hgs
parents:
diff changeset
   488
	{
hgs
parents:
diff changeset
   489
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   490
			EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error));
hgs
parents:
diff changeset
   491
	}
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
	internal_settings->m_IndexType = iIndexType;
hgs
parents:
diff changeset
   494
	internal_settings->m_Index = iIndex;
hgs
parents:
diff changeset
   495
hgs
parents:
diff changeset
   496
	iUserCerts = &aUserCerts;
hgs
parents:
diff changeset
   497
	iCACerts = &aCACerts;
hgs
parents:
diff changeset
   498
hgs
parents:
diff changeset
   499
	eap_status_e status = m_server->get_certificate_lists(internal_settings);
hgs
parents:
diff changeset
   500
hgs
parents:
diff changeset
   501
	iWaitState = eap_general_settings_wait_state_complete_get_certificate_lists;
hgs
parents:
diff changeset
   502
	Activate();
hgs
parents:
diff changeset
   503
	WaitCompletion();
hgs
parents:
diff changeset
   504
hgs
parents:
diff changeset
   505
	if (iCompletionStatus != eap_status_ok)
hgs
parents:
diff changeset
   506
	{
hgs
parents:
diff changeset
   507
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   508
			EAP_STATUS_RETURN(m_am_tools, iCompletionStatus));
hgs
parents:
diff changeset
   509
	}
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
	return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   512
			EAP_STATUS_RETURN(m_am_tools, status));
hgs
parents:
diff changeset
   513
}
hgs
parents:
diff changeset
   514
hgs
parents:
diff changeset
   515
// ----------------------------------------------------------
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
eap_status_e CEapGeneralSettingsImpl::complete_get_certificate_lists(
hgs
parents:
diff changeset
   518
	const eap_method_settings_c * const internal_settings)
hgs
parents:
diff changeset
   519
{
hgs
parents:
diff changeset
   520
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   521
		m_am_tools,
hgs
parents:
diff changeset
   522
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   523
		(EAPL("CEapGeneralSettingsImpl::complete_get_certificate_lists(): this=0x%08x, iWaitState=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   524
		this,
hgs
parents:
diff changeset
   525
		iWaitState,
hgs
parents:
diff changeset
   526
		internal_settings->m_completion_status,
hgs
parents:
diff changeset
   527
		eap_status_string_c::get_status_string(internal_settings->m_completion_status)));
hgs
parents:
diff changeset
   528
hgs
parents:
diff changeset
   529
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::complete_get_certificate_lists()");
hgs
parents:
diff changeset
   530
hgs
parents:
diff changeset
   531
	if (internal_settings == 0)
hgs
parents:
diff changeset
   532
	{
hgs
parents:
diff changeset
   533
		// ERROR
hgs
parents:
diff changeset
   534
		iCompletionStatus = eap_status_illegal_parameter;
hgs
parents:
diff changeset
   535
hgs
parents:
diff changeset
   536
		Complete();
hgs
parents:
diff changeset
   537
hgs
parents:
diff changeset
   538
		return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus);
hgs
parents:
diff changeset
   539
	}
hgs
parents:
diff changeset
   540
hgs
parents:
diff changeset
   541
	iCompletionStatus = internal_settings->m_completion_status;
hgs
parents:
diff changeset
   542
hgs
parents:
diff changeset
   543
	if (iWaitState == eap_general_settings_wait_state_complete_get_certificate_lists
hgs
parents:
diff changeset
   544
		&& iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   545
	{
hgs
parents:
diff changeset
   546
		if (iUserCerts != 0
hgs
parents:
diff changeset
   547
			&& iCACerts != 0
hgs
parents:
diff changeset
   548
			&& internal_settings != 0)
hgs
parents:
diff changeset
   549
		{
hgs
parents:
diff changeset
   550
			TInt error = CEapConversion::ConvertInternalTypeToCertificates(
hgs
parents:
diff changeset
   551
				m_am_tools,
hgs
parents:
diff changeset
   552
				eap_certificate_entry_c::eap_certificate_type_user,
hgs
parents:
diff changeset
   553
				&(internal_settings->m_Certificates),
hgs
parents:
diff changeset
   554
				iUserCerts);
hgs
parents:
diff changeset
   555
			if (error != KErrNone)
hgs
parents:
diff changeset
   556
			{
hgs
parents:
diff changeset
   557
				// ERROR
hgs
parents:
diff changeset
   558
				SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)));
hgs
parents:
diff changeset
   559
			}
hgs
parents:
diff changeset
   560
			else
hgs
parents:
diff changeset
   561
			{
hgs
parents:
diff changeset
   562
				error = CEapConversion::ConvertInternalTypeToCertificates(
hgs
parents:
diff changeset
   563
					m_am_tools,
hgs
parents:
diff changeset
   564
					eap_certificate_entry_c::eap_certificate_type_CA,
hgs
parents:
diff changeset
   565
					&(internal_settings->m_Certificates),
hgs
parents:
diff changeset
   566
					iCACerts);
hgs
parents:
diff changeset
   567
				if (error != KErrNone)
hgs
parents:
diff changeset
   568
				{
hgs
parents:
diff changeset
   569
					// ERROR
hgs
parents:
diff changeset
   570
					SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, m_am_tools->convert_am_error_to_eapol_error(error)));
hgs
parents:
diff changeset
   571
				}
hgs
parents:
diff changeset
   572
			}
hgs
parents:
diff changeset
   573
		}
hgs
parents:
diff changeset
   574
		else
hgs
parents:
diff changeset
   575
		{
hgs
parents:
diff changeset
   576
			// ERROR
hgs
parents:
diff changeset
   577
			SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter));
hgs
parents:
diff changeset
   578
		}
hgs
parents:
diff changeset
   579
	}
hgs
parents:
diff changeset
   580
	else if (iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   581
	{
hgs
parents:
diff changeset
   582
		// ERROR, wrong state. Other function was completed successfully not the function that was waited.
hgs
parents:
diff changeset
   583
		SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state));
hgs
parents:
diff changeset
   584
	}
hgs
parents:
diff changeset
   585
hgs
parents:
diff changeset
   586
	Complete();
hgs
parents:
diff changeset
   587
hgs
parents:
diff changeset
   588
	return EAP_STATUS_RETURN(m_am_tools, iCompletionStatus);
hgs
parents:
diff changeset
   589
}
hgs
parents:
diff changeset
   590
hgs
parents:
diff changeset
   591
// ----------------------------------------------------------
hgs
parents:
diff changeset
   592
hgs
parents:
diff changeset
   593
TInt CEapGeneralSettingsImpl::DeleteAllEapSettings()
hgs
parents:
diff changeset
   594
{
hgs
parents:
diff changeset
   595
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   596
		m_am_tools,
hgs
parents:
diff changeset
   597
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   598
		(EAPL("CEapGeneralSettingsImpl::DeleteAllEapSettings(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   599
		this));
hgs
parents:
diff changeset
   600
hgs
parents:
diff changeset
   601
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::DeleteAllEapSettings()");
hgs
parents:
diff changeset
   602
hgs
parents:
diff changeset
   603
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   604
hgs
parents:
diff changeset
   605
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(
hgs
parents:
diff changeset
   606
		m_am_tools,
hgs
parents:
diff changeset
   607
		internal_settings);
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
	if (internal_settings == 0)
hgs
parents:
diff changeset
   610
	{
hgs
parents:
diff changeset
   611
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   612
			EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error));
hgs
parents:
diff changeset
   613
	}
hgs
parents:
diff changeset
   614
hgs
parents:
diff changeset
   615
	internal_settings->m_IndexType = iIndexType;
hgs
parents:
diff changeset
   616
	internal_settings->m_Index = iIndex;
hgs
parents:
diff changeset
   617
hgs
parents:
diff changeset
   618
	eap_status_e status = m_server->delete_all_eap_settings(internal_settings);
hgs
parents:
diff changeset
   619
hgs
parents:
diff changeset
   620
	iWaitState = eap_general_settings_wait_state_complete_delete_all_eap_settings;
hgs
parents:
diff changeset
   621
	Activate();
hgs
parents:
diff changeset
   622
	WaitCompletion();
hgs
parents:
diff changeset
   623
hgs
parents:
diff changeset
   624
	if (iCompletionStatus != eap_status_ok)
hgs
parents:
diff changeset
   625
	{
hgs
parents:
diff changeset
   626
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   627
			EAP_STATUS_RETURN(m_am_tools, iCompletionStatus));
hgs
parents:
diff changeset
   628
	}
hgs
parents:
diff changeset
   629
hgs
parents:
diff changeset
   630
	return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   631
			EAP_STATUS_RETURN(m_am_tools, status));
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
TInt CEapGeneralSettingsImpl::CopyAllEapSettings(
hgs
parents:
diff changeset
   637
	const TIndexType aDestinationIndexType,
hgs
parents:
diff changeset
   638
	const TInt aDestinationIndex)
hgs
parents:
diff changeset
   639
{
hgs
parents:
diff changeset
   640
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   641
		m_am_tools,
hgs
parents:
diff changeset
   642
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   643
		(EAPL("CEapGeneralSettingsImpl::CopyAllEapSettings(): this=0x%08x.\n"),
hgs
parents:
diff changeset
   644
		this));
hgs
parents:
diff changeset
   645
hgs
parents:
diff changeset
   646
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::CopyAllEapSettings()");
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
	eap_method_settings_c * const internal_settings = new eap_method_settings_c(m_am_tools);
hgs
parents:
diff changeset
   649
hgs
parents:
diff changeset
   650
	eap_automatic_variable_c<eap_method_settings_c> automatic_internal_settings(
hgs
parents:
diff changeset
   651
		m_am_tools,
hgs
parents:
diff changeset
   652
		internal_settings);
hgs
parents:
diff changeset
   653
hgs
parents:
diff changeset
   654
	if (internal_settings == 0)
hgs
parents:
diff changeset
   655
	{
hgs
parents:
diff changeset
   656
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   657
			EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error));
hgs
parents:
diff changeset
   658
	}
hgs
parents:
diff changeset
   659
hgs
parents:
diff changeset
   660
	internal_settings->m_IndexType = iIndexType;
hgs
parents:
diff changeset
   661
	internal_settings->m_Index = iIndex;
hgs
parents:
diff changeset
   662
	internal_settings->m_DestinationIndexType = aDestinationIndexType;
hgs
parents:
diff changeset
   663
	internal_settings->m_DestinationIndex = aDestinationIndex;
hgs
parents:
diff changeset
   664
hgs
parents:
diff changeset
   665
	eap_status_e status = m_server->copy_all_eap_settings(internal_settings);
hgs
parents:
diff changeset
   666
hgs
parents:
diff changeset
   667
	iWaitState = eap_general_settings_wait_state_complete_copy_all_eap_settings;
hgs
parents:
diff changeset
   668
	Activate();
hgs
parents:
diff changeset
   669
	WaitCompletion();
hgs
parents:
diff changeset
   670
hgs
parents:
diff changeset
   671
	if (iCompletionStatus != eap_status_ok)
hgs
parents:
diff changeset
   672
	{
hgs
parents:
diff changeset
   673
		return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   674
			EAP_STATUS_RETURN(m_am_tools, iCompletionStatus));
hgs
parents:
diff changeset
   675
	}
hgs
parents:
diff changeset
   676
hgs
parents:
diff changeset
   677
	return m_am_tools->convert_eapol_error_to_am_error(
hgs
parents:
diff changeset
   678
			EAP_STATUS_RETURN(m_am_tools, status));
hgs
parents:
diff changeset
   679
}
hgs
parents:
diff changeset
   680
hgs
parents:
diff changeset
   681
// ----------------------------------------------------------
hgs
parents:
diff changeset
   682
hgs
parents:
diff changeset
   683
eap_status_e CEapGeneralSettingsImpl::complete_delete_all_eap_settings(
hgs
parents:
diff changeset
   684
	const eap_status_e completion_status)
hgs
parents:
diff changeset
   685
{
hgs
parents:
diff changeset
   686
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   687
		m_am_tools,
hgs
parents:
diff changeset
   688
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   689
		(EAPL("CEapGeneralSettingsImpl::complete_delete_all_eap_settings(): this=0x%08x, iWaitState=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   690
		this,
hgs
parents:
diff changeset
   691
		iWaitState,
hgs
parents:
diff changeset
   692
		completion_status,
hgs
parents:
diff changeset
   693
		eap_status_string_c::get_status_string(completion_status)));
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::complete_delete_all_eap_settings()");
hgs
parents:
diff changeset
   696
hgs
parents:
diff changeset
   697
	iCompletionStatus = completion_status;
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
	if (iWaitState != eap_general_settings_wait_state_complete_delete_all_eap_settings
hgs
parents:
diff changeset
   700
		&& iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   701
	{
hgs
parents:
diff changeset
   702
		// ERROR, wrong state. Other function was completed successfully not the function that was waited.
hgs
parents:
diff changeset
   703
		SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state));
hgs
parents:
diff changeset
   704
	}
hgs
parents:
diff changeset
   705
hgs
parents:
diff changeset
   706
	Complete();
hgs
parents:
diff changeset
   707
hgs
parents:
diff changeset
   708
	return EAP_STATUS_RETURN(m_am_tools, completion_status);
hgs
parents:
diff changeset
   709
}
hgs
parents:
diff changeset
   710
hgs
parents:
diff changeset
   711
// ----------------------------------------------------------
hgs
parents:
diff changeset
   712
hgs
parents:
diff changeset
   713
eap_status_e CEapGeneralSettingsImpl::complete_copy_all_eap_settings(
hgs
parents:
diff changeset
   714
	const eap_status_e completion_status)
hgs
parents:
diff changeset
   715
{
hgs
parents:
diff changeset
   716
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   717
		m_am_tools,
hgs
parents:
diff changeset
   718
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   719
		(EAPL("CEapGeneralSettingsImpl::complete_copy_all_eap_settings(): this=0x%08x, iWaitState=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   720
		this,
hgs
parents:
diff changeset
   721
		iWaitState,
hgs
parents:
diff changeset
   722
		completion_status,
hgs
parents:
diff changeset
   723
		eap_status_string_c::get_status_string(completion_status)));
hgs
parents:
diff changeset
   724
hgs
parents:
diff changeset
   725
	EAP_TRACE_RETURN_STRING(m_am_tools, "returns: CEapGeneralSettingsImpl::complete_copy_all_eap_settings()");
hgs
parents:
diff changeset
   726
hgs
parents:
diff changeset
   727
	iCompletionStatus = completion_status;
hgs
parents:
diff changeset
   728
hgs
parents:
diff changeset
   729
	if (iWaitState != eap_general_settings_wait_state_complete_copy_all_eap_settings
hgs
parents:
diff changeset
   730
		&& iCompletionStatus == eap_status_ok)
hgs
parents:
diff changeset
   731
	{
hgs
parents:
diff changeset
   732
		// ERROR, wrong state. Other function was completed successfully not the function that was waited.
hgs
parents:
diff changeset
   733
		SetCompletionStatusIfStillOk(EAP_STATUS_RETURN(m_am_tools, eap_status_wrong_eap_type_state));
hgs
parents:
diff changeset
   734
	}
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
	Complete();
hgs
parents:
diff changeset
   737
hgs
parents:
diff changeset
   738
	return EAP_STATUS_RETURN(m_am_tools, completion_status);
hgs
parents:
diff changeset
   739
}
hgs
parents:
diff changeset
   740
hgs
parents:
diff changeset
   741
// ----------------------------------------------------------
hgs
parents:
diff changeset
   742
// ----------------------------------------------------------
hgs
parents:
diff changeset
   743
// ----------------------------------------------------------
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
eap_am_message_if_c * eap_am_message_if_c::new_eap_am_message_if_c(
hgs
parents:
diff changeset
   746
	abs_eap_am_tools_c * const tools)
hgs
parents:
diff changeset
   747
{
hgs
parents:
diff changeset
   748
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   749
		tools,
hgs
parents:
diff changeset
   750
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   751
		(EAPL("eap_am_message_if_c::new_eap_am_server_general_settings_c()\n")));
hgs
parents:
diff changeset
   752
hgs
parents:
diff changeset
   753
	EAP_TRACE_RETURN_STRING(tools, "returns: eap_am_message_if_c::new_eap_am_message_if_c()");
hgs
parents:
diff changeset
   754
hgs
parents:
diff changeset
   755
    eap_am_message_if_c *client_if = new eap_am_message_if_symbian_c(tools, EEapSettingsNew);
hgs
parents:
diff changeset
   756
hgs
parents:
diff changeset
   757
	eap_automatic_variable_c<eap_am_message_if_c> automatic_client_if(
hgs
parents:
diff changeset
   758
		tools,
hgs
parents:
diff changeset
   759
		client_if);
hgs
parents:
diff changeset
   760
hgs
parents:
diff changeset
   761
	if (client_if == 0
hgs
parents:
diff changeset
   762
		|| client_if->get_is_valid() == false)
hgs
parents:
diff changeset
   763
	{
hgs
parents:
diff changeset
   764
		// ERROR.
hgs
parents:
diff changeset
   765
		if (client_if != 0)
hgs
parents:
diff changeset
   766
		{
hgs
parents:
diff changeset
   767
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   768
				tools,
hgs
parents:
diff changeset
   769
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   770
				(EAPL("ERROR: calls: eap_am_message_if_c::new_eap_am_server_general_settings_c(): client_if->shutdown()\n")));
hgs
parents:
diff changeset
   771
hgs
parents:
diff changeset
   772
			client_if->shutdown();
hgs
parents:
diff changeset
   773
		}
hgs
parents:
diff changeset
   774
		return 0;
hgs
parents:
diff changeset
   775
	}
hgs
parents:
diff changeset
   776
hgs
parents:
diff changeset
   777
	automatic_client_if.do_not_free_variable();
hgs
parents:
diff changeset
   778
hgs
parents:
diff changeset
   779
	return client_if;
hgs
parents:
diff changeset
   780
hgs
parents:
diff changeset
   781
}
hgs
parents:
diff changeset
   782
hgs
parents:
diff changeset
   783
// ----------------------------------------------------------
hgs
parents:
diff changeset
   784
hgs
parents:
diff changeset
   785
eap_general_settings_message_c * new_eap_general_settings_client_message_if_c(
hgs
parents:
diff changeset
   786
	abs_eap_am_tools_c * const tools,
hgs
parents:
diff changeset
   787
	abs_eap_general_settings_message_c * const partner)
hgs
parents:
diff changeset
   788
{
hgs
parents:
diff changeset
   789
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   790
		tools,
hgs
parents:
diff changeset
   791
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   792
		(EAPL("new_eap_general_settings_client_message_if_c()\n")));
hgs
parents:
diff changeset
   793
hgs
parents:
diff changeset
   794
	EAP_TRACE_RETURN_STRING(tools, "returns: new_eap_general_settings_client_message_if_c()");
hgs
parents:
diff changeset
   795
hgs
parents:
diff changeset
   796
	eap_am_message_if_c *client_if = eap_am_message_if_c::new_eap_am_message_if_c(
hgs
parents:
diff changeset
   797
		tools);
hgs
parents:
diff changeset
   798
hgs
parents:
diff changeset
   799
	eap_automatic_variable_c<eap_am_message_if_c> automatic_client_if(
hgs
parents:
diff changeset
   800
		tools,
hgs
parents:
diff changeset
   801
		client_if);
hgs
parents:
diff changeset
   802
hgs
parents:
diff changeset
   803
	if (client_if == 0
hgs
parents:
diff changeset
   804
		|| client_if->get_is_valid() == false)
hgs
parents:
diff changeset
   805
	{
hgs
parents:
diff changeset
   806
		// ERROR.
hgs
parents:
diff changeset
   807
		if (client_if != 0)
hgs
parents:
diff changeset
   808
		{
hgs
parents:
diff changeset
   809
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   810
				tools,
hgs
parents:
diff changeset
   811
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   812
				(EAPL("ERROR: calls: new_eap_general_settings_client_message_if_c(): client_if->shutdown()\n")));
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
			(void) client_if->shutdown();
hgs
parents:
diff changeset
   815
		}
hgs
parents:
diff changeset
   816
		return 0;
hgs
parents:
diff changeset
   817
	}
hgs
parents:
diff changeset
   818
hgs
parents:
diff changeset
   819
	eap_general_settings_client_message_if_c * new_session_core = new eap_general_settings_client_message_if_c(tools, client_if, partner);
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
	eap_automatic_variable_c<eap_general_settings_client_message_if_c> automatic_new_session_core(
hgs
parents:
diff changeset
   822
		tools,
hgs
parents:
diff changeset
   823
		new_session_core);
hgs
parents:
diff changeset
   824
hgs
parents:
diff changeset
   825
	if (new_session_core == 0
hgs
parents:
diff changeset
   826
		|| new_session_core->get_is_valid() == false)
hgs
parents:
diff changeset
   827
	{
hgs
parents:
diff changeset
   828
		// ERROR.
hgs
parents:
diff changeset
   829
		if (new_session_core != 0)
hgs
parents:
diff changeset
   830
		{
hgs
parents:
diff changeset
   831
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   832
				tools,
hgs
parents:
diff changeset
   833
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   834
				(EAPL("ERROR: calls: new_eap_general_settings_client_message_if_c(): new_session_core->shutdown()\n")));
hgs
parents:
diff changeset
   835
hgs
parents:
diff changeset
   836
			new_session_core->shutdown();
hgs
parents:
diff changeset
   837
		}
hgs
parents:
diff changeset
   838
		return 0;
hgs
parents:
diff changeset
   839
	}
hgs
parents:
diff changeset
   840
hgs
parents:
diff changeset
   841
	client_if->set_partner(new_session_core);
hgs
parents:
diff changeset
   842
hgs
parents:
diff changeset
   843
	automatic_client_if.do_not_free_variable();
hgs
parents:
diff changeset
   844
	automatic_new_session_core.do_not_free_variable();
hgs
parents:
diff changeset
   845
hgs
parents:
diff changeset
   846
	return new_session_core;
hgs
parents:
diff changeset
   847
}
hgs
parents:
diff changeset
   848
hgs
parents:
diff changeset
   849
// ----------------------------------------------------------
hgs
parents:
diff changeset
   850
// End of file