eapol/eapol_framework/eapol_symbian/eap_server/src/eap_am_stack_symbian.cpp
author hgs
Thu, 24 Jun 2010 11:23:08 +0300
changeset 34 ad1f037f1ac2
parent 26 9abfd4f00d37
child 49 43351a4f2da3
permissions -rw-r--r--
201025
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
26
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
* Copyright (c) 2001-2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
* All rights reserved.
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
* under the terms of the License "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
*
hgs
parents:
diff changeset
     9
* Initial Contributors:
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
*
hgs
parents:
diff changeset
    12
* Contributors:
hgs
parents:
diff changeset
    13
*
hgs
parents:
diff changeset
    14
* Description:  EAP and WLAN authentication protocols.
hgs
parents:
diff changeset
    15
*
hgs
parents:
diff changeset
    16
*/
hgs
parents:
diff changeset
    17
hgs
parents:
diff changeset
    18
/*
34
hgs
parents: 26
diff changeset
    19
* %version: 49 %
26
hgs
parents:
diff changeset
    20
*/
hgs
parents:
diff changeset
    21
hgs
parents:
diff changeset
    22
#include "eap_am_stack_symbian.h"
hgs
parents:
diff changeset
    23
#include "eap_array_algorithms.h"
hgs
parents:
diff changeset
    24
#include "eap_base_type.h"
hgs
parents:
diff changeset
    25
#include "eap_header_string.h"
hgs
parents:
diff changeset
    26
#include "EapConversion.h"
hgs
parents:
diff changeset
    27
#include "eapol_key_state_string.h"
hgs
parents:
diff changeset
    28
#include "eap_type_tls_peap_types.h"
hgs
parents:
diff changeset
    29
#include "EapPluginDbDefaults.h"
hgs
parents:
diff changeset
    30
#include "EapConfigToolsSymbian.h"
hgs
parents:
diff changeset
    31
#include "eap_am_general_settings_symbian.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
class CEapTypePlugin;
hgs
parents:
diff changeset
    34
hgs
parents:
diff changeset
    35
// LOCAL CONSTANTS
hgs
parents:
diff changeset
    36
const TUint KMaxSqlQueryLength = 2048;
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
const TUint KExpandedEAPSize = 8;
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
//--------------------------------------------------
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
EAP_FUNC_EXPORT eap_am_stack_symbian_c::eap_am_stack_symbian_c(class abs_eap_am_tools_c * tools, bool is_client_when_true)
hgs
parents:
diff changeset
    43
	: CActive(0)
hgs
parents:
diff changeset
    44
	, iTools (tools)
hgs
parents:
diff changeset
    45
	, iIsClient(is_client_when_true)
hgs
parents:
diff changeset
    46
	, iPartner(0)
hgs
parents:
diff changeset
    47
	, m_client_config(tools)
hgs
parents:
diff changeset
    48
	, iFileconfig(0)
hgs
parents:
diff changeset
    49
	, iEnabledEapMethodsArray(tools)
hgs
parents:
diff changeset
    50
	, iDisabledEapMethodsArray(tools)
hgs
parents:
diff changeset
    51
	, m_eap_type_array(tools)
hgs
parents:
diff changeset
    52
	, iConfigurationIf(0)
hgs
parents:
diff changeset
    53
	, iIndexType(ELan)
hgs
parents:
diff changeset
    54
	, iIndex(0UL)
hgs
parents:
diff changeset
    55
	, iCurrentEapIndex(0)
hgs
parents:
diff changeset
    56
	, m_selected_eapol_key_authentication_type(eapol_key_authentication_type_none)
hgs
parents:
diff changeset
    57
{
hgs
parents:
diff changeset
    58
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    59
        tools, 
hgs
parents:
diff changeset
    60
        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    61
        (EAPL("eap_am_stack_symbian_c::eap_am_stack_symbian_c()\n")));
hgs
parents:
diff changeset
    62
hgs
parents:
diff changeset
    63
    EAP_TRACE_RETURN_STRING(tools, "returns: eap_am_stack_symbian_c::eap_am_stack_symbian_c()");
hgs
parents:
diff changeset
    64
hgs
parents:
diff changeset
    65
    iIsValid = ETrue;
hgs
parents:
diff changeset
    66
    
hgs
parents:
diff changeset
    67
    return;
hgs
parents:
diff changeset
    68
}
hgs
parents:
diff changeset
    69
hgs
parents:
diff changeset
    70
//--------------------------------------------------
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
EAP_FUNC_EXPORT eap_am_stack_symbian_c::~eap_am_stack_symbian_c()
hgs
parents:
diff changeset
    73
    {
hgs
parents:
diff changeset
    74
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
    75
        iTools, 
hgs
parents:
diff changeset
    76
        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
    77
        (EAPL("eap_am_stack_symbian_c::~eap_am_stack_symbian_c()\n")));
hgs
parents:
diff changeset
    78
hgs
parents:
diff changeset
    79
	Cancel();
hgs
parents:
diff changeset
    80
hgs
parents:
diff changeset
    81
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::~eap_am_stack_symbian_c()");
hgs
parents:
diff changeset
    82
    }
hgs
parents:
diff changeset
    83
hgs
parents:
diff changeset
    84
//--------------------------------------------------
hgs
parents:
diff changeset
    85
hgs
parents:
diff changeset
    86
EAP_FUNC_EXPORT bool eap_am_stack_symbian_c::get_is_valid()
hgs
parents:
diff changeset
    87
    {
hgs
parents:
diff changeset
    88
    return iIsValid;
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
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::set_partner(abs_eap_am_stack_c * partner, abs_eap_configuration_if_c * configuration_if)
hgs
parents:
diff changeset
    94
    {
hgs
parents:
diff changeset
    95
    eap_status_e aStatus(eap_status_ok);
hgs
parents:
diff changeset
    96
    iPartner = partner;
hgs
parents:
diff changeset
    97
    iConfigurationIf = configuration_if;
hgs
parents:
diff changeset
    98
    return aStatus;
hgs
parents:
diff changeset
    99
    }
hgs
parents:
diff changeset
   100
hgs
parents:
diff changeset
   101
//--------------------------------------------------
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
eap_status_e eap_am_stack_symbian_c::reset_eap_configuration()
hgs
parents:
diff changeset
   104
{
hgs
parents:
diff changeset
   105
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   106
hgs
parents:
diff changeset
   107
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   108
		iTools, 
hgs
parents:
diff changeset
   109
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   110
		(EAPL("eap_am_stack_symbian_c::reset_eap_configuration(): %s, this = 0x%08x\n"),
hgs
parents:
diff changeset
   111
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   112
		 this));
hgs
parents:
diff changeset
   113
hgs
parents:
diff changeset
   114
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::reset_eap_configuration()");
hgs
parents:
diff changeset
   115
hgs
parents:
diff changeset
   116
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
   117
hgs
parents:
diff changeset
   118
	TRAPD(error, ReadEAPSettingsL());
hgs
parents:
diff changeset
   119
	if (error != KErrNone)
hgs
parents:
diff changeset
   120
	{
hgs
parents:
diff changeset
   121
		EAP_TRACE_ERROR(
hgs
parents:
diff changeset
   122
			iTools,
hgs
parents:
diff changeset
   123
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   124
			(EAPL("EAP settings reading from CommDb failed or cancelled(error %d).\n"), error));
hgs
parents:
diff changeset
   125
hgs
parents:
diff changeset
   126
		status = iTools->convert_am_error_to_eapol_error(error);
hgs
parents:
diff changeset
   127
	}
hgs
parents:
diff changeset
   128
hgs
parents:
diff changeset
   129
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   130
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   131
}
hgs
parents:
diff changeset
   132
hgs
parents:
diff changeset
   133
//--------------------------------------------------
hgs
parents:
diff changeset
   134
hgs
parents:
diff changeset
   135
// This is documented in abs_eap_stack_interface_c::configure().
hgs
parents:
diff changeset
   136
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::configure(
hgs
parents:
diff changeset
   137
	const eap_variable_data_c * const client_configuration)
hgs
parents:
diff changeset
   138
    {
hgs
parents:
diff changeset
   139
    EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   140
hgs
parents:
diff changeset
   141
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   142
        iTools, 
hgs
parents:
diff changeset
   143
        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   144
        (EAPL("eap_am_stack_symbian_c::configure(): %s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   145
         (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   146
         this,
hgs
parents:
diff changeset
   147
         dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
   148
hgs
parents:
diff changeset
   149
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::configure()");
hgs
parents:
diff changeset
   150
hgs
parents:
diff changeset
   151
    TInt error(KErrNone);
hgs
parents:
diff changeset
   152
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
   153
hgs
parents:
diff changeset
   154
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   155
hgs
parents:
diff changeset
   156
	if (client_configuration != 0
hgs
parents:
diff changeset
   157
		&& client_configuration->get_is_valid_data() == true)
hgs
parents:
diff changeset
   158
	{
hgs
parents:
diff changeset
   159
		status = m_client_config.read_configuration_message(client_configuration);
hgs
parents:
diff changeset
   160
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   161
		{
hgs
parents:
diff changeset
   162
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   163
			return EAP_STATUS_RETURN(iTools, status);
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
hgs
parents:
diff changeset
   169
    // Open the database session
hgs
parents:
diff changeset
   170
    error = iSession.Connect();
hgs
parents:
diff changeset
   171
    if (error != KErrNone)
hgs
parents:
diff changeset
   172
    {
hgs
parents:
diff changeset
   173
        status = EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error));
hgs
parents:
diff changeset
   174
hgs
parents:
diff changeset
   175
        EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   176
            iTools,
hgs
parents:
diff changeset
   177
            TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   178
            (EAPL("RDbs::Connect() failed %d.\n"),
hgs
parents:
diff changeset
   179
            status));
hgs
parents:
diff changeset
   180
        EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   181
        return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   182
    }
hgs
parents:
diff changeset
   183
hgs
parents:
diff changeset
   184
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   185
        iTools,
hgs
parents:
diff changeset
   186
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   187
        (EAPL("Database session initialized...\n")));
hgs
parents:
diff changeset
   188
hgs
parents:
diff changeset
   189
    // Connect to FS
hgs
parents:
diff changeset
   190
    error = iFs.Connect();
hgs
parents:
diff changeset
   191
    if (error != KErrNone)
hgs
parents:
diff changeset
   192
    {
hgs
parents:
diff changeset
   193
        status = EAP_STATUS_RETURN(iTools, iTools->convert_am_error_to_eapol_error(error));
hgs
parents:
diff changeset
   194
hgs
parents:
diff changeset
   195
        EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   196
            iTools,
hgs
parents:
diff changeset
   197
            TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   198
            (EAPL("RFs::Connect() failed %d.\n"),
hgs
parents:
diff changeset
   199
            status));
hgs
parents:
diff changeset
   200
        EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   201
        return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   202
    }
hgs
parents:
diff changeset
   203
hgs
parents:
diff changeset
   204
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   205
        iTools,
hgs
parents:
diff changeset
   206
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   207
        (EAPL("Fileserver session initialized...\n")));
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   210
hgs
parents:
diff changeset
   211
	status = EapConfigToolsSymbian::EapReadDefaultConfigFileSymbian(
hgs
parents:
diff changeset
   212
		iTools,
hgs
parents:
diff changeset
   213
		&iFileconfig);
hgs
parents:
diff changeset
   214
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   215
	{
hgs
parents:
diff changeset
   216
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   217
		return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   218
	}
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   221
hgs
parents:
diff changeset
   222
#if defined(USE_EAP_FILE_TRACE)
hgs
parents:
diff changeset
   223
    {
hgs
parents:
diff changeset
   224
        eap_variable_data_c trace_output_file(iTools);
hgs
parents:
diff changeset
   225
hgs
parents:
diff changeset
   226
        status = read_configure(
hgs
parents:
diff changeset
   227
            cf_str_EAP_TRACE_output_file_name.get_field(),
hgs
parents:
diff changeset
   228
            &trace_output_file);
hgs
parents:
diff changeset
   229
        if (status == eap_status_ok
hgs
parents:
diff changeset
   230
            && trace_output_file.get_is_valid_data() == true)
hgs
parents:
diff changeset
   231
        {
hgs
parents:
diff changeset
   232
            status = iTools->set_trace_file_name(&trace_output_file);
hgs
parents:
diff changeset
   233
            if (status == eap_status_ok)
hgs
parents:
diff changeset
   234
            {
hgs
parents:
diff changeset
   235
                // OK, set the default trace mask.
hgs
parents:
diff changeset
   236
                iTools->set_trace_mask(
hgs
parents:
diff changeset
   237
                    eap_am_tools_c::eap_trace_mask_debug
hgs
parents:
diff changeset
   238
                    | eap_am_tools_c::eap_trace_mask_always
hgs
parents:
diff changeset
   239
                    | eap_am_tools_c::eap_trace_mask_error
hgs
parents:
diff changeset
   240
                    | eap_am_tools_c::eap_trace_mask_message_data);
hgs
parents:
diff changeset
   241
            }
hgs
parents:
diff changeset
   242
        }
hgs
parents:
diff changeset
   243
    }
hgs
parents:
diff changeset
   244
#endif //#if defined(USE_EAP_FILE_TRACE)
hgs
parents:
diff changeset
   245
hgs
parents:
diff changeset
   246
hgs
parents:
diff changeset
   247
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   248
hgs
parents:
diff changeset
   249
	{
hgs
parents:
diff changeset
   250
		eap_variable_data_c EAP_TRACE_enable_timer_traces(iTools);
hgs
parents:
diff changeset
   251
hgs
parents:
diff changeset
   252
		status = read_configure(
hgs
parents:
diff changeset
   253
			cf_str_EAP_TRACE_enable_timer_traces.get_field(),
hgs
parents:
diff changeset
   254
			&EAP_TRACE_enable_timer_traces);
hgs
parents:
diff changeset
   255
		if (status == eap_status_ok
hgs
parents:
diff changeset
   256
			&& EAP_TRACE_enable_timer_traces.get_is_valid_data() == true)
hgs
parents:
diff changeset
   257
		{
hgs
parents:
diff changeset
   258
			u32_t *enable_timer_traces = reinterpret_cast<u32_t *>(
hgs
parents:
diff changeset
   259
				EAP_TRACE_enable_timer_traces.get_data(sizeof(u32_t)));
hgs
parents:
diff changeset
   260
			if (enable_timer_traces != 0
hgs
parents:
diff changeset
   261
				&& *enable_timer_traces != 0)
hgs
parents:
diff changeset
   262
			{
hgs
parents:
diff changeset
   263
				iTools->set_trace_mask(
hgs
parents:
diff changeset
   264
					iTools->get_trace_mask()
hgs
parents:
diff changeset
   265
					| TRACE_FLAGS_TIMER
hgs
parents:
diff changeset
   266
					);
hgs
parents:
diff changeset
   267
			}
hgs
parents:
diff changeset
   268
		}
hgs
parents:
diff changeset
   269
	}
hgs
parents:
diff changeset
   270
hgs
parents:
diff changeset
   271
	// - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   272
hgs
parents:
diff changeset
   273
	{
hgs
parents:
diff changeset
   274
		eap_variable_data_c EAP_TRACE_enable_timer_queue_traces(iTools);
hgs
parents:
diff changeset
   275
hgs
parents:
diff changeset
   276
		status = read_configure(
hgs
parents:
diff changeset
   277
			cf_str_EAP_TRACE_enable_timer_queue_traces.get_field(),
hgs
parents:
diff changeset
   278
			&EAP_TRACE_enable_timer_queue_traces);
hgs
parents:
diff changeset
   279
		if (status == eap_status_ok
hgs
parents:
diff changeset
   280
			&& EAP_TRACE_enable_timer_queue_traces.get_is_valid_data() == true)
hgs
parents:
diff changeset
   281
		{
hgs
parents:
diff changeset
   282
			u32_t *enable_timer_queue_traces = reinterpret_cast<u32_t *>(
hgs
parents:
diff changeset
   283
				EAP_TRACE_enable_timer_queue_traces.get_data(sizeof(u32_t)));
hgs
parents:
diff changeset
   284
			if (enable_timer_queue_traces != 0
hgs
parents:
diff changeset
   285
				&& *enable_timer_queue_traces != 0)
hgs
parents:
diff changeset
   286
			{
hgs
parents:
diff changeset
   287
				iTools->set_trace_mask(
hgs
parents:
diff changeset
   288
					iTools->get_trace_mask()
hgs
parents:
diff changeset
   289
					| TRACE_FLAGS_TIMER_QUEUE
hgs
parents:
diff changeset
   290
					);
hgs
parents:
diff changeset
   291
			}
hgs
parents:
diff changeset
   292
		}
hgs
parents:
diff changeset
   293
	}
hgs
parents:
diff changeset
   294
hgs
parents:
diff changeset
   295
    {
hgs
parents:
diff changeset
   296
        eap_variable_data_c EAP_TRACE_enable_function_traces(iTools);
hgs
parents:
diff changeset
   297
hgs
parents:
diff changeset
   298
        status = read_configure(
hgs
parents:
diff changeset
   299
            cf_str_EAP_TRACE_enable_function_traces.get_field(),
hgs
parents:
diff changeset
   300
            &EAP_TRACE_enable_function_traces);
hgs
parents:
diff changeset
   301
        if (status == eap_status_ok
hgs
parents:
diff changeset
   302
            && EAP_TRACE_enable_function_traces.get_is_valid_data() == true)
hgs
parents:
diff changeset
   303
        {
hgs
parents:
diff changeset
   304
            u32_t *enable_function_traces = reinterpret_cast<u32_t *>(
hgs
parents:
diff changeset
   305
                EAP_TRACE_enable_function_traces.get_data(sizeof(u32_t)));
hgs
parents:
diff changeset
   306
            if (enable_function_traces != 0
hgs
parents:
diff changeset
   307
                && *enable_function_traces != 0)
hgs
parents:
diff changeset
   308
            {
hgs
parents:
diff changeset
   309
                iTools->set_trace_mask(
hgs
parents:
diff changeset
   310
                    iTools->get_trace_mask()
hgs
parents:
diff changeset
   311
                    | eap_am_tools_c::eap_trace_mask_functions
hgs
parents:
diff changeset
   312
                    );
hgs
parents:
diff changeset
   313
            }
hgs
parents:
diff changeset
   314
        }
hgs
parents:
diff changeset
   315
    }
hgs
parents:
diff changeset
   316
hgs
parents:
diff changeset
   317
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
   318
hgs
parents:
diff changeset
   319
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   320
        iTools,
hgs
parents:
diff changeset
   321
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   322
        (EAPL("Created timer...\n")));
hgs
parents:
diff changeset
   323
hgs
parents:
diff changeset
   324
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   325
    return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   326
  
hgs
parents:
diff changeset
   327
    }
hgs
parents:
diff changeset
   328
hgs
parents:
diff changeset
   329
//--------------------------------------------------
hgs
parents:
diff changeset
   330
hgs
parents:
diff changeset
   331
eap_status_e eap_am_stack_symbian_c::reset_eap_plugins()
hgs
parents:
diff changeset
   332
{
hgs
parents:
diff changeset
   333
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   334
hgs
parents:
diff changeset
   335
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   336
		iTools, 
hgs
parents:
diff changeset
   337
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   338
		(EAPL("eap_am_stack_symbian_c::reset_eap_plugins(): %s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   339
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   340
		 this,
hgs
parents:
diff changeset
   341
		 dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
   342
hgs
parents:
diff changeset
   343
	// Unload all loaded plugins
hgs
parents:
diff changeset
   344
	for(int ind = 0; ind < m_plugin_if_array.Count(); ind++)
hgs
parents:
diff changeset
   345
	{
hgs
parents:
diff changeset
   346
		delete m_plugin_if_array[ind];
hgs
parents:
diff changeset
   347
	}
hgs
parents:
diff changeset
   348
hgs
parents:
diff changeset
   349
	m_plugin_if_array.Close();
hgs
parents:
diff changeset
   350
hgs
parents:
diff changeset
   351
hgs
parents:
diff changeset
   352
	iEnabledEapMethodsArray.reset();
hgs
parents:
diff changeset
   353
	iDisabledEapMethodsArray.reset();
hgs
parents:
diff changeset
   354
hgs
parents:
diff changeset
   355
	
hgs
parents:
diff changeset
   356
	m_eap_type_array.reset();
hgs
parents:
diff changeset
   357
	
hgs
parents:
diff changeset
   358
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   359
	return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   360
}
hgs
parents:
diff changeset
   361
hgs
parents:
diff changeset
   362
//--------------------------------------------------
hgs
parents:
diff changeset
   363
hgs
parents:
diff changeset
   364
// This is documented in abs_eap_stack_interface_c::shutdown().
hgs
parents:
diff changeset
   365
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::shutdown()
hgs
parents:
diff changeset
   366
{
hgs
parents:
diff changeset
   367
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   368
hgs
parents:
diff changeset
   369
	EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
   370
		iTools, 
hgs
parents:
diff changeset
   371
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   372
		(EAPL("eap_am_stack_symbian_c::shutdown(): %s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   373
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   374
		 this,
hgs
parents:
diff changeset
   375
		 dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
   376
hgs
parents:
diff changeset
   377
	delete iFileconfig;
hgs
parents:
diff changeset
   378
	iFileconfig = 0;
hgs
parents:
diff changeset
   379
hgs
parents:
diff changeset
   380
	(void) reset_eap_plugins();
hgs
parents:
diff changeset
   381
hgs
parents:
diff changeset
   382
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   383
	return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   384
}
hgs
parents:
diff changeset
   385
hgs
parents:
diff changeset
   386
//--------------------------------------------------
hgs
parents:
diff changeset
   387
hgs
parents:
diff changeset
   388
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::read_configure(
hgs
parents:
diff changeset
   389
    const eap_configuration_field_c * const field,
hgs
parents:
diff changeset
   390
    eap_variable_data_c * const data) 
hgs
parents:
diff changeset
   391
{
hgs
parents:
diff changeset
   392
    EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   393
    EAP_ASSERT_ALWAYS_TOOLS(iTools, data != NULL);
hgs
parents:
diff changeset
   394
    
hgs
parents:
diff changeset
   395
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   396
        iTools, 
hgs
parents:
diff changeset
   397
        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   398
        (EAPL("eap_am_stack_symbian_c::read_configure(): %s, %d=%s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   399
         (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   400
		 m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
   401
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type),
hgs
parents:
diff changeset
   402
         this,
hgs
parents:
diff changeset
   403
         dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
   404
    
hgs
parents:
diff changeset
   405
	EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
   406
		iTools,
hgs
parents:
diff changeset
   407
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   408
		(EAPL("eap_am_stack_symbian_c::read_configure()"),
hgs
parents:
diff changeset
   409
		 field->get_field(),
hgs
parents:
diff changeset
   410
		 field->get_field_length()));
hgs
parents:
diff changeset
   411
hgs
parents:
diff changeset
   412
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::read_configure()");
hgs
parents:
diff changeset
   413
hgs
parents:
diff changeset
   414
    // Trap must be set here because the OS independent portion of EAPOL
hgs
parents:
diff changeset
   415
    // that calls this function does not know anything about Symbian.   
hgs
parents:
diff changeset
   416
    eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
   417
hgs
parents:
diff changeset
   418
    // Check if the wanted parameter is default type
hgs
parents:
diff changeset
   419
	if (field->compare(iTools, cf_str_EAP_default_type_hex_data.get_field()) == true)
hgs
parents:
diff changeset
   420
	{
hgs
parents:
diff changeset
   421
		// First check do we have read configuration from databases.
hgs
parents:
diff changeset
   422
		if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS)
hgs
parents:
diff changeset
   423
		{
hgs
parents:
diff changeset
   424
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   425
				iTools,
hgs
parents:
diff changeset
   426
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   427
				(EAPL("m_selected_eapol_key_authentication_type = eapol_key_authentication_type_WPS\n")));
hgs
parents:
diff changeset
   428
hgs
parents:
diff changeset
   429
			status = eap_expanded_type_simple_config.get_type().get_expanded_type_data(
hgs
parents:
diff changeset
   430
				iTools,
hgs
parents:
diff changeset
   431
				data);
hgs
parents:
diff changeset
   432
hgs
parents:
diff changeset
   433
			if (status == eap_status_ok)
hgs
parents:
diff changeset
   434
			{
hgs
parents:
diff changeset
   435
				set_current_eap_index(0);
hgs
parents:
diff changeset
   436
			}
hgs
parents:
diff changeset
   437
hgs
parents:
diff changeset
   438
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   439
			return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   440
		}
hgs
parents:
diff changeset
   441
		else if (iEnabledEapMethodsArray.get_object_count() == 0ul)
hgs
parents:
diff changeset
   442
		{
hgs
parents:
diff changeset
   443
			EAP_TRACE_ERROR(
hgs
parents:
diff changeset
   444
				iTools,
hgs
parents:
diff changeset
   445
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   446
				(EAPL("EAP settings not read from CommsDat\n")));
hgs
parents:
diff changeset
   447
hgs
parents:
diff changeset
   448
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);	
hgs
parents:
diff changeset
   449
			return EAP_STATUS_RETURN(iTools, eap_status_process_general_error);
hgs
parents:
diff changeset
   450
		}
hgs
parents:
diff changeset
   451
hgs
parents:
diff changeset
   452
		// Now we need to return here the next EAP type we should try
hgs
parents:
diff changeset
   453
hgs
parents:
diff changeset
   454
		TInt ind = get_current_eap_index(); 
hgs
parents:
diff changeset
   455
hgs
parents:
diff changeset
   456
hgs
parents:
diff changeset
   457
		if (get_current_eap_index() < iEnabledEapMethodsArray.get_object_count())
hgs
parents:
diff changeset
   458
		{
hgs
parents:
diff changeset
   459
			eap_type_value_e * const next_eap_method = iEnabledEapMethodsArray.get_object(get_current_eap_index());
hgs
parents:
diff changeset
   460
			if (next_eap_method != 0
hgs
parents:
diff changeset
   461
				&& next_eap_method->get_is_valid() == true)
hgs
parents:
diff changeset
   462
			{
hgs
parents:
diff changeset
   463
				status = data->set_buffer_length(eap_expanded_type_c::get_eap_expanded_type_size());
hgs
parents:
diff changeset
   464
				if (status != eap_status_ok)
hgs
parents:
diff changeset
   465
				{
hgs
parents:
diff changeset
   466
					EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   467
					return EAP_STATUS_RETURN(iTools, eap_status_allocation_error);
hgs
parents:
diff changeset
   468
				}
hgs
parents:
diff changeset
   469
hgs
parents:
diff changeset
   470
				status = data->set_data_length(eap_expanded_type_c::get_eap_expanded_type_size());
hgs
parents:
diff changeset
   471
				if (status != eap_status_ok)
hgs
parents:
diff changeset
   472
				{
hgs
parents:
diff changeset
   473
					EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   474
					return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   475
				}
hgs
parents:
diff changeset
   476
hgs
parents:
diff changeset
   477
				status = eap_expanded_type_c::write_type(
hgs
parents:
diff changeset
   478
					iTools,
hgs
parents:
diff changeset
   479
					0ul,
hgs
parents:
diff changeset
   480
					data->get_data(),
hgs
parents:
diff changeset
   481
					data->get_data_length(),
hgs
parents:
diff changeset
   482
					true,
hgs
parents:
diff changeset
   483
					*next_eap_method);
hgs
parents:
diff changeset
   484
				if (status != eap_status_ok)
hgs
parents:
diff changeset
   485
				{
hgs
parents:
diff changeset
   486
					EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   487
					return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   488
				}
hgs
parents:
diff changeset
   489
			}
hgs
parents:
diff changeset
   490
		}
hgs
parents:
diff changeset
   491
hgs
parents:
diff changeset
   492
hgs
parents:
diff changeset
   493
hgs
parents:
diff changeset
   494
		if (ind >= iEnabledEapMethodsArray.get_object_count())
hgs
parents:
diff changeset
   495
		{
hgs
parents:
diff changeset
   496
			// Not found any other EAP type as enabled.
hgs
parents:
diff changeset
   497
			// Send WLM notification because there is no way that the authentication
hgs
parents:
diff changeset
   498
			// can be successful if we don't have any EAP types to use...
hgs
parents:
diff changeset
   499
			if (iIsClient)
hgs
parents:
diff changeset
   500
			{
hgs
parents:
diff changeset
   501
				EAP_TRACE_ERROR(
hgs
parents:
diff changeset
   502
					iTools,
hgs
parents:
diff changeset
   503
					TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   504
					(EAPL("ERROR: read_configure: No configured EAP types or all tried unsuccessfully.\n")));
hgs
parents:
diff changeset
   505
			}
hgs
parents:
diff changeset
   506
hgs
parents:
diff changeset
   507
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   508
			return EAP_STATUS_RETURN(iTools, eap_status_illegal_configure_field);
hgs
parents:
diff changeset
   509
		}
hgs
parents:
diff changeset
   510
hgs
parents:
diff changeset
   511
		EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   512
		return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   513
hgs
parents:
diff changeset
   514
	} // if ()
hgs
parents:
diff changeset
   515
hgs
parents:
diff changeset
   516
hgs
parents:
diff changeset
   517
#if defined(USE_EAP_FILECONFIG)
hgs
parents:
diff changeset
   518
    {
hgs
parents:
diff changeset
   519
		status = m_client_config.read_configure(field, data);
hgs
parents:
diff changeset
   520
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   521
		{
hgs
parents:
diff changeset
   522
			if (iFileconfig != 0
hgs
parents:
diff changeset
   523
				&& iFileconfig->get_is_valid() == true)
hgs
parents:
diff changeset
   524
			{
hgs
parents:
diff changeset
   525
				// Here we could try the final configuration option.
hgs
parents:
diff changeset
   526
				status = iFileconfig->read_configure(
hgs
parents:
diff changeset
   527
					field,
hgs
parents:
diff changeset
   528
					data);
hgs
parents:
diff changeset
   529
			}
hgs
parents:
diff changeset
   530
		}
hgs
parents:
diff changeset
   531
    }
hgs
parents:
diff changeset
   532
#endif //#if defined(USE_EAP_FILECONFIG)
hgs
parents:
diff changeset
   533
hgs
parents:
diff changeset
   534
hgs
parents:
diff changeset
   535
    iTools->trace_configuration(
hgs
parents:
diff changeset
   536
        status,
hgs
parents:
diff changeset
   537
        field,
hgs
parents:
diff changeset
   538
        data);
hgs
parents:
diff changeset
   539
hgs
parents:
diff changeset
   540
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   541
    return EAP_STATUS_RETURN(iTools, 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_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::set_timer(
hgs
parents:
diff changeset
   547
    abs_eap_base_timer_c * const p_initializer, 
hgs
parents:
diff changeset
   548
    const u32_t p_id, 
hgs
parents:
diff changeset
   549
    void * const p_data,
hgs
parents:
diff changeset
   550
    const u32_t p_time_ms) 
hgs
parents:
diff changeset
   551
{
hgs
parents:
diff changeset
   552
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   553
hgs
parents:
diff changeset
   554
	const eap_status_e status = iTools->am_set_timer(
hgs
parents:
diff changeset
   555
		p_initializer, 
hgs
parents:
diff changeset
   556
		p_id, 
hgs
parents:
diff changeset
   557
		p_data,
hgs
parents:
diff changeset
   558
		p_time_ms);
hgs
parents:
diff changeset
   559
hgs
parents:
diff changeset
   560
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   561
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   562
}
hgs
parents:
diff changeset
   563
hgs
parents:
diff changeset
   564
//--------------------------------------------------
hgs
parents:
diff changeset
   565
hgs
parents:
diff changeset
   566
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::cancel_timer(
hgs
parents:
diff changeset
   567
    abs_eap_base_timer_c * const p_initializer, 
hgs
parents:
diff changeset
   568
    const u32_t p_id) 
hgs
parents:
diff changeset
   569
{
hgs
parents:
diff changeset
   570
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   571
hgs
parents:
diff changeset
   572
	const eap_status_e status = iTools->am_cancel_timer(
hgs
parents:
diff changeset
   573
		p_initializer, 
hgs
parents:
diff changeset
   574
		p_id);
hgs
parents:
diff changeset
   575
hgs
parents:
diff changeset
   576
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   577
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   578
}
hgs
parents:
diff changeset
   579
hgs
parents:
diff changeset
   580
//--------------------------------------------------
hgs
parents:
diff changeset
   581
hgs
parents:
diff changeset
   582
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::check_is_valid_eap_type(
hgs
parents:
diff changeset
   583
    const eap_type_value_e eap_type) 
hgs
parents:
diff changeset
   584
{
hgs
parents:
diff changeset
   585
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   586
hgs
parents:
diff changeset
   587
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   588
		iTools,
hgs
parents:
diff changeset
   589
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   590
		(EAPL("eap_am_stack_symbian_c::check_is_valid_eap_type():  %s, %d=%s, this = 0x%08x => 0x%08x, EAP-type=0xfe%06x%08x=%s\n"),
hgs
parents:
diff changeset
   591
		(iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   592
		m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
   593
		eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type),
hgs
parents:
diff changeset
   594
		this,
hgs
parents:
diff changeset
   595
		dynamic_cast<abs_eap_base_timer_c *>(this),
hgs
parents:
diff changeset
   596
		eap_type.get_vendor_id(),
hgs
parents:
diff changeset
   597
		eap_type.get_vendor_type(),
hgs
parents:
diff changeset
   598
		eap_header_string_c::get_eap_type_string(eap_type)));
hgs
parents:
diff changeset
   599
hgs
parents:
diff changeset
   600
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::check_is_valid_eap_type()");
hgs
parents:
diff changeset
   601
hgs
parents:
diff changeset
   602
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS
hgs
parents:
diff changeset
   603
		&& eap_type == eap_expanded_type_simple_config.get_type())
hgs
parents:
diff changeset
   604
	{
hgs
parents:
diff changeset
   605
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   606
			iTools,
hgs
parents:
diff changeset
   607
			TRACE_FLAGS_DEFAULT, (EAPL("eap_am_stack_symbian_c::check_is_valid_eap_type(): WPS does not use CommDbIf anymore.\n")));
hgs
parents:
diff changeset
   608
hgs
parents:
diff changeset
   609
		return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   610
	}
hgs
parents:
diff changeset
   611
hgs
parents:
diff changeset
   612
hgs
parents:
diff changeset
   613
	for (int ind = 0; ind < iEnabledEapMethodsArray.get_object_count(); ++ind)
hgs
parents:
diff changeset
   614
	{
hgs
parents:
diff changeset
   615
		const eap_type_value_e * const allowed_eap_method = iEnabledEapMethodsArray.get_object(ind);
hgs
parents:
diff changeset
   616
hgs
parents:
diff changeset
   617
		if (allowed_eap_method != 0
hgs
parents:
diff changeset
   618
			&& eap_type == *allowed_eap_method)
hgs
parents:
diff changeset
   619
		{
hgs
parents:
diff changeset
   620
			// This is Allowed and Valid.
hgs
parents:
diff changeset
   621
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   622
			return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   623
		}
hgs
parents:
diff changeset
   624
	} // for()
hgs
parents:
diff changeset
   625
hgs
parents:
diff changeset
   626
hgs
parents:
diff changeset
   627
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   628
		iTools,
hgs
parents:
diff changeset
   629
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   630
		(EAPL("ERROR: %s: check_is_valid_eap_type(): not supported EAP-type=0xfe%06x%08x=%s\n"),
hgs
parents:
diff changeset
   631
		 (iIsClient == true ? "client": "server"),
hgs
parents:
diff changeset
   632
		 eap_type.get_vendor_id(),
hgs
parents:
diff changeset
   633
		 eap_type.get_vendor_type(),
hgs
parents:
diff changeset
   634
		 eap_header_string_c::get_eap_type_string(eap_type)));
hgs
parents:
diff changeset
   635
hgs
parents:
diff changeset
   636
hgs
parents:
diff changeset
   637
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   638
	return EAP_STATUS_RETURN(iTools, eap_status_illegal_eap_type);
hgs
parents:
diff changeset
   639
}
hgs
parents:
diff changeset
   640
hgs
parents:
diff changeset
   641
//--------------------------------------------------
hgs
parents:
diff changeset
   642
hgs
parents:
diff changeset
   643
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::get_eap_type_list(
hgs
parents:
diff changeset
   644
    eap_array_c<eap_type_value_e> * const eap_type_list) 
hgs
parents:
diff changeset
   645
{
hgs
parents:
diff changeset
   646
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   647
hgs
parents:
diff changeset
   648
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   649
		iTools, 
hgs
parents:
diff changeset
   650
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   651
		(EAPL("eap_am_stack_symbian_c::get_eap_type_list(): %s, %d=%s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   652
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   653
		 m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
   654
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type),
hgs
parents:
diff changeset
   655
		 this,
hgs
parents:
diff changeset
   656
		 dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
   657
hgs
parents:
diff changeset
   658
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::get_eap_type_list()");
hgs
parents:
diff changeset
   659
hgs
parents:
diff changeset
   660
	eap_status_e status(eap_status_illegal_eap_type);
hgs
parents:
diff changeset
   661
hgs
parents:
diff changeset
   662
	status = eap_type_list->reset();
hgs
parents:
diff changeset
   663
	if (status != eap_status_ok)
hgs
parents:
diff changeset
   664
	{
hgs
parents:
diff changeset
   665
		EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   666
		return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   667
	}
hgs
parents:
diff changeset
   668
hgs
parents:
diff changeset
   669
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS)
hgs
parents:
diff changeset
   670
	{
hgs
parents:
diff changeset
   671
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   672
			iTools,
hgs
parents:
diff changeset
   673
			TRACE_FLAGS_DEFAULT, (EAPL("eap_am_stack_symbian_c::get_eap_type_list(): WPS does not use CommDbIf anymore.\n")));
hgs
parents:
diff changeset
   674
hgs
parents:
diff changeset
   675
		// This is for one expanded EAP type (for the above one).
hgs
parents:
diff changeset
   676
		eap_expanded_type_c * expandedEAPType = new eap_type_value_e(eap_expanded_type_simple_config.get_type());
hgs
parents:
diff changeset
   677
hgs
parents:
diff changeset
   678
		// Add WPS EAP-type to list.		
hgs
parents:
diff changeset
   679
		status = eap_type_list->add_object(expandedEAPType, true);
hgs
parents:
diff changeset
   680
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   681
		{
hgs
parents:
diff changeset
   682
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   683
			return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   684
		}
hgs
parents:
diff changeset
   685
hgs
parents:
diff changeset
   686
		return EAP_STATUS_RETURN(iTools, eap_status_ok);
hgs
parents:
diff changeset
   687
	}
hgs
parents:
diff changeset
   688
hgs
parents:
diff changeset
   689
	// This function is same as get_selected_eap_types in behavior.
hgs
parents:
diff changeset
   690
hgs
parents:
diff changeset
   691
	// We need to return only the EAP types available as enabled types.
hgs
parents:
diff changeset
   692
	// It means only the ones available in m_enabled_expanded_eap_array.
hgs
parents:
diff changeset
   693
	
hgs
parents:
diff changeset
   694
hgs
parents:
diff changeset
   695
	for (TInt ind = 0; ind < iEnabledEapMethodsArray.get_object_count(); ++ind)
hgs
parents:
diff changeset
   696
	{	
hgs
parents:
diff changeset
   697
		const eap_type_value_e * const allowed_eap_method = iEnabledEapMethodsArray.get_object(ind);
hgs
parents:
diff changeset
   698
hgs
parents:
diff changeset
   699
		if (allowed_eap_method != 0
hgs
parents:
diff changeset
   700
			&& allowed_eap_method->get_is_valid() == true)
hgs
parents:
diff changeset
   701
		{
hgs
parents:
diff changeset
   702
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   703
				iTools, 
hgs
parents:
diff changeset
   704
				TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   705
				(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): Enabled expanded EAP type at index=%d, EAP-type=0xfe%06x%08x\n"),
hgs
parents:
diff changeset
   706
				 ind,
hgs
parents:
diff changeset
   707
				 allowed_eap_method->get_vendor_id(),
hgs
parents:
diff changeset
   708
				 allowed_eap_method->get_vendor_type()));
hgs
parents:
diff changeset
   709
hgs
parents:
diff changeset
   710
			status = eap_type_list->add_object(allowed_eap_method->copy(), true);
hgs
parents:
diff changeset
   711
			if (status != eap_status_ok)
hgs
parents:
diff changeset
   712
			{
hgs
parents:
diff changeset
   713
				EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   714
				return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   715
			}
hgs
parents:
diff changeset
   716
		}
hgs
parents:
diff changeset
   717
	} // for()
hgs
parents:
diff changeset
   718
hgs
parents:
diff changeset
   719
hgs
parents:
diff changeset
   720
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   721
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   722
}
hgs
parents:
diff changeset
   723
hgs
parents:
diff changeset
   724
//--------------------------------------------------
hgs
parents:
diff changeset
   725
hgs
parents:
diff changeset
   726
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::load_module(
hgs
parents:
diff changeset
   727
    const eap_type_value_e type,
hgs
parents:
diff changeset
   728
    const eap_type_value_e tunneling_type,
hgs
parents:
diff changeset
   729
    abs_eap_base_type_c * const partner,
hgs
parents:
diff changeset
   730
    eap_base_type_c ** const eap_type,
hgs
parents:
diff changeset
   731
    const bool is_client_when_true,
hgs
parents:
diff changeset
   732
    const eap_am_network_id_c * const receive_network_id) 
hgs
parents:
diff changeset
   733
{
hgs
parents:
diff changeset
   734
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   735
hgs
parents:
diff changeset
   736
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   737
		iTools,
hgs
parents:
diff changeset
   738
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   739
		(EAPL("eap_am_stack_symbian_c::load_module(type %d=%s, tunneling_type %d=%s)\n"),
hgs
parents:
diff changeset
   740
		convert_eap_type_to_u32_t(type),
hgs
parents:
diff changeset
   741
		eap_header_string_c::get_eap_type_string(type),
hgs
parents:
diff changeset
   742
		convert_eap_type_to_u32_t(tunneling_type),
hgs
parents:
diff changeset
   743
		eap_header_string_c::get_eap_type_string(tunneling_type)));
hgs
parents:
diff changeset
   744
hgs
parents:
diff changeset
   745
	EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::load_module()");
hgs
parents:
diff changeset
   746
hgs
parents:
diff changeset
   747
	eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
   748
hgs
parents:
diff changeset
   749
	CEapTypePlugin* eapType = 0;
hgs
parents:
diff changeset
   750
	TInt error(KErrNone);
hgs
parents:
diff changeset
   751
hgs
parents:
diff changeset
   752
	// Check if this EAP type has already been loaded
hgs
parents:
diff changeset
   753
	TInt eapArrayIndex = find<eap_type_value_e>(
hgs
parents:
diff changeset
   754
		&m_eap_type_array,
hgs
parents:
diff changeset
   755
		&type,
hgs
parents:
diff changeset
   756
		iTools);
hgs
parents:
diff changeset
   757
hgs
parents:
diff changeset
   758
	if (eapArrayIndex >= 0)
hgs
parents:
diff changeset
   759
	{
hgs
parents:
diff changeset
   760
		// We found the entry in the array.
hgs
parents:
diff changeset
   761
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   762
			iTools,
hgs
parents:
diff changeset
   763
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   764
			(EAPL("eap_am_stack_symbian_c::load_module(type %d=%s, tunneling_type %d=%s) already loaded.\n"),
hgs
parents:
diff changeset
   765
			convert_eap_type_to_u32_t(type),
hgs
parents:
diff changeset
   766
			eap_header_string_c::get_eap_type_string(type),
hgs
parents:
diff changeset
   767
			convert_eap_type_to_u32_t(tunneling_type),
hgs
parents:
diff changeset
   768
			eap_header_string_c::get_eap_type_string(tunneling_type)));
hgs
parents:
diff changeset
   769
hgs
parents:
diff changeset
   770
		// Yep. It was loaded already.
hgs
parents:
diff changeset
   771
		eapType = m_plugin_if_array[eapArrayIndex];     
hgs
parents:
diff changeset
   772
	}
hgs
parents:
diff changeset
   773
	else 
hgs
parents:
diff changeset
   774
	{
hgs
parents:
diff changeset
   775
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   776
			iTools,
hgs
parents:
diff changeset
   777
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   778
			(EAPL("eap_am_stack_symbian_c::load_module(type %d=%s, tunneling_type %d=%s) load new, iIndexType=%d, iIndex=%d.\n"),
hgs
parents:
diff changeset
   779
			convert_eap_type_to_u32_t(type),
hgs
parents:
diff changeset
   780
			eap_header_string_c::get_eap_type_string(type),
hgs
parents:
diff changeset
   781
			convert_eap_type_to_u32_t(tunneling_type),
hgs
parents:
diff changeset
   782
			eap_header_string_c::get_eap_type_string(tunneling_type),
hgs
parents:
diff changeset
   783
			iIndexType,
hgs
parents:
diff changeset
   784
			iIndex));
hgs
parents:
diff changeset
   785
hgs
parents:
diff changeset
   786
		TBuf8<KExpandedEAPSize> expanded_type;
hgs
parents:
diff changeset
   787
    
hgs
parents:
diff changeset
   788
		// Some indirect way of forming the 8 byte string of an EAP type for the cue is needed here.        
hgs
parents:
diff changeset
   789
		TUint8 tmp_expanded_type[KExpandedEAPSize];
hgs
parents:
diff changeset
   790
hgs
parents:
diff changeset
   791
		// This is to make the tmp_expanded_type in 8 byte string with correct vendor type and vendor id details.
hgs
parents:
diff changeset
   792
		status = eap_expanded_type_c::write_type(iTools,
hgs
parents:
diff changeset
   793
												0, // index should be zero here.
hgs
parents:
diff changeset
   794
												tmp_expanded_type,
hgs
parents:
diff changeset
   795
												KExpandedEAPSize,
hgs
parents:
diff changeset
   796
												true,
hgs
parents:
diff changeset
   797
												type);
hgs
parents:
diff changeset
   798
		if (status != eap_status_ok)
hgs
parents:
diff changeset
   799
		{
hgs
parents:
diff changeset
   800
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   801
				iTools,
hgs
parents:
diff changeset
   802
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   803
				(EAPL("load_module: eap_expanded_type_c::write_type(): failed status=%d=%s\n"),
hgs
parents:
diff changeset
   804
				status,
hgs
parents:
diff changeset
   805
				eap_status_string_c::get_status_string(status)));
hgs
parents:
diff changeset
   806
    
hgs
parents:
diff changeset
   807
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   808
			return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   809
		}
hgs
parents:
diff changeset
   810
    
hgs
parents:
diff changeset
   811
		// Now copy the 8 byte string to the real expanded cue.
hgs
parents:
diff changeset
   812
		expanded_type.Copy(tmp_expanded_type, KExpandedEAPSize);
hgs
parents:
diff changeset
   813
hgs
parents:
diff changeset
   814
		EAP_TRACE_DATA_DEBUG(
hgs
parents:
diff changeset
   815
			iTools,
hgs
parents:
diff changeset
   816
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   817
			(EAPL("EAPOL:eap_am_stack_symbian_c::load_module(): expanded_type:"),
hgs
parents:
diff changeset
   818
			expanded_type.Ptr(),
hgs
parents:
diff changeset
   819
			expanded_type.Size()));
hgs
parents:
diff changeset
   820
hgs
parents:
diff changeset
   821
hgs
parents:
diff changeset
   822
		// We must have a trap here since the EAPOL core knows nothing about Symbian.
hgs
parents:
diff changeset
   823
		TRAP(error, (eapType = CEapTypePlugin::NewL(
hgs
parents:
diff changeset
   824
			expanded_type,
hgs
parents:
diff changeset
   825
			iIndexType,
hgs
parents:
diff changeset
   826
			iIndex)));   
hgs
parents:
diff changeset
   827
		if (error != KErrNone
hgs
parents:
diff changeset
   828
			|| eapType == 0)
hgs
parents:
diff changeset
   829
		{
hgs
parents:
diff changeset
   830
			// Interface not found or implementation creation function failed
hgs
parents:
diff changeset
   831
			status = iTools->convert_am_error_to_eapol_error(error);
hgs
parents:
diff changeset
   832
			if (status == eap_status_ok)
hgs
parents:
diff changeset
   833
			{
hgs
parents:
diff changeset
   834
				status = eap_status_allocation_error;
hgs
parents:
diff changeset
   835
			}
hgs
parents:
diff changeset
   836
hgs
parents:
diff changeset
   837
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   838
				iTools,
hgs
parents:
diff changeset
   839
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   840
				(EAPL("ERROR: ECom could not find/initiate implementation, error=%d, status=%d=%s.\n"),
hgs
parents:
diff changeset
   841
				error,
hgs
parents:
diff changeset
   842
				status,
hgs
parents:
diff changeset
   843
				eap_status_string_c::get_status_string(status)));
hgs
parents:
diff changeset
   844
hgs
parents:
diff changeset
   845
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   846
			return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   847
		}
hgs
parents:
diff changeset
   848
	}
hgs
parents:
diff changeset
   849
hgs
parents:
diff changeset
   850
hgs
parents:
diff changeset
   851
	{
hgs
parents:
diff changeset
   852
		TEapExpandedType expanded_type;
hgs
parents:
diff changeset
   853
    
hgs
parents:
diff changeset
   854
		error = CEapConversion::ConvertInternalTypeToExpandedEAPType(
hgs
parents:
diff changeset
   855
				&tunneling_type,
hgs
parents:
diff changeset
   856
				&expanded_type);
hgs
parents:
diff changeset
   857
		if (error != KErrNone)
hgs
parents:
diff changeset
   858
		{
hgs
parents:
diff changeset
   859
			status = iTools->convert_am_error_to_eapol_error(error);
hgs
parents:
diff changeset
   860
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   861
				iTools,
hgs
parents:
diff changeset
   862
				TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   863
				(EAPL("ERROR: CEapConversion::ConvertInternalTypeToExpandedEAPType(): failed error=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   864
				error,
hgs
parents:
diff changeset
   865
				status,
hgs
parents:
diff changeset
   866
				eap_status_string_c::get_status_string(status)));
hgs
parents:
diff changeset
   867
			EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   868
			return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   869
		}
hgs
parents:
diff changeset
   870
hgs
parents:
diff changeset
   871
		eapType->SetTunnelingType(expanded_type);
hgs
parents:
diff changeset
   872
	}
hgs
parents:
diff changeset
   873
hgs
parents:
diff changeset
   874
	// Create the EAP protocol interface implementation.
hgs
parents:
diff changeset
   875
hgs
parents:
diff changeset
   876
	TRAP(error, (*eap_type = eapType->GetStackInterfaceL(iTools, 
hgs
parents:
diff changeset
   877
		partner, 
hgs
parents:
diff changeset
   878
		is_client_when_true, 
hgs
parents:
diff changeset
   879
		receive_network_id,
hgs
parents:
diff changeset
   880
		this)));
hgs
parents:
diff changeset
   881
hgs
parents:
diff changeset
   882
	if (error != KErrNone 
hgs
parents:
diff changeset
   883
		|| *eap_type == 0 
hgs
parents:
diff changeset
   884
		|| (*eap_type)->get_is_valid() == false)
hgs
parents:
diff changeset
   885
	{
hgs
parents:
diff changeset
   886
		status = iTools->convert_am_error_to_eapol_error(error);
hgs
parents:
diff changeset
   887
		if (status == eap_status_ok)
hgs
parents:
diff changeset
   888
		{
hgs
parents:
diff changeset
   889
			status = eap_status_allocation_error;
hgs
parents:
diff changeset
   890
		}
hgs
parents:
diff changeset
   891
hgs
parents:
diff changeset
   892
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   893
			iTools,
hgs
parents:
diff changeset
   894
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   895
			(EAPL("ERROR: Could not create EAP type interface instance. error=%d, status=%d=%s\n"),
hgs
parents:
diff changeset
   896
			error,
hgs
parents:
diff changeset
   897
			status,
hgs
parents:
diff changeset
   898
			eap_status_string_c::get_status_string(status)));
hgs
parents:
diff changeset
   899
hgs
parents:
diff changeset
   900
		if  (eapArrayIndex == KErrNotFound)
hgs
parents:
diff changeset
   901
		{
hgs
parents:
diff changeset
   902
			// No need to call shutdown here because GetStackInterfaceL has done it.
hgs
parents:
diff changeset
   903
			delete eapType;
hgs
parents:
diff changeset
   904
		}
hgs
parents:
diff changeset
   905
		// Note: even in error cases eap_core_c deletes eap_type
hgs
parents:
diff changeset
   906
	}
hgs
parents:
diff changeset
   907
	else
hgs
parents:
diff changeset
   908
	{
hgs
parents:
diff changeset
   909
		status = eap_status_ok;
hgs
parents:
diff changeset
   910
		if (eapArrayIndex  == KErrNotFound)
hgs
parents:
diff changeset
   911
		{
hgs
parents:
diff changeset
   912
			// Add plugin information to the member arrays. There is no need to store eap_type pointer because
hgs
parents:
diff changeset
   913
			// the stack takes care of its deletion.
hgs
parents:
diff changeset
   914
			if (m_plugin_if_array.Append(eapType) != KErrNone)
hgs
parents:
diff changeset
   915
			{
hgs
parents:
diff changeset
   916
				delete eapType;
hgs
parents:
diff changeset
   917
				status = eap_status_allocation_error;
hgs
parents:
diff changeset
   918
				EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   919
				return EAP_STATUS_RETURN(iTools, status);               
hgs
parents:
diff changeset
   920
			}
hgs
parents:
diff changeset
   921
hgs
parents:
diff changeset
   922
			eap_type_value_e * tmpEAPType = new eap_type_value_e();
hgs
parents:
diff changeset
   923
			if(tmpEAPType == NULL)
hgs
parents:
diff changeset
   924
			{
hgs
parents:
diff changeset
   925
				EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   926
					iTools,
hgs
parents:
diff changeset
   927
					TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   928
					(EAPL("ERROR: eap_am_stack_symbian_c::load_module() eap_type_value_e creation failed\n")));
hgs
parents:
diff changeset
   929
				EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   930
				return EAP_STATUS_RETURN(iTools, eap_status_allocation_error);              
hgs
parents:
diff changeset
   931
			}
hgs
parents:
diff changeset
   932
        
hgs
parents:
diff changeset
   933
			*tmpEAPType = type;
hgs
parents:
diff changeset
   934
        
hgs
parents:
diff changeset
   935
			status = m_eap_type_array.add_object(tmpEAPType, true);
hgs
parents:
diff changeset
   936
        
hgs
parents:
diff changeset
   937
			if (status != eap_status_ok)            
hgs
parents:
diff changeset
   938
			{
hgs
parents:
diff changeset
   939
				// Remove the eap type added just previously
hgs
parents:
diff changeset
   940
				m_plugin_if_array.Remove(m_plugin_if_array.Count() - 1);
hgs
parents:
diff changeset
   941
				delete eapType;
hgs
parents:
diff changeset
   942
				status = eap_status_allocation_error;
hgs
parents:
diff changeset
   943
				EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   944
				return EAP_STATUS_RETURN(iTools, status);               
hgs
parents:
diff changeset
   945
			}
hgs
parents:
diff changeset
   946
		} 
hgs
parents:
diff changeset
   947
	}
hgs
parents:
diff changeset
   948
hgs
parents:
diff changeset
   949
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   950
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
   951
}
hgs
parents:
diff changeset
   952
hgs
parents:
diff changeset
   953
//--------------------------------------------------
hgs
parents:
diff changeset
   954
hgs
parents:
diff changeset
   955
void eap_am_stack_symbian_c::RunL()
hgs
parents:
diff changeset
   956
{
hgs
parents:
diff changeset
   957
    EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);   
hgs
parents:
diff changeset
   958
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   959
        iTools,
hgs
parents:
diff changeset
   960
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   961
        (EAPL("eap_am_stack_symbian_c::RunL(): iStatus.Int() = %d\n"),
hgs
parents:
diff changeset
   962
        iStatus.Int()));
hgs
parents:
diff changeset
   963
hgs
parents:
diff changeset
   964
    if (iStatus.Int() != KErrNone)
hgs
parents:
diff changeset
   965
    {
hgs
parents:
diff changeset
   966
        EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   967
        return;
hgs
parents:
diff changeset
   968
    }
hgs
parents:
diff changeset
   969
hgs
parents:
diff changeset
   970
    // Authentication cancelled.
hgs
parents:
diff changeset
   971
    EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
   972
        iTools,
hgs
parents:
diff changeset
   973
        TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
   974
        (EAPL("Authentication cancelled.\n")));
hgs
parents:
diff changeset
   975
hgs
parents:
diff changeset
   976
    // Reset index of current EAP-type.
hgs
parents:
diff changeset
   977
    set_current_eap_index(0ul);
hgs
parents:
diff changeset
   978
hgs
parents:
diff changeset
   979
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT); 
hgs
parents:
diff changeset
   980
}
hgs
parents:
diff changeset
   981
hgs
parents:
diff changeset
   982
//--------------------------------------------------
hgs
parents:
diff changeset
   983
hgs
parents:
diff changeset
   984
void eap_am_stack_symbian_c::read_configureL(
hgs
parents:
diff changeset
   985
    const TDesC& aDbName,
hgs
parents:
diff changeset
   986
    const TDesC& aTableName,
hgs
parents:
diff changeset
   987
    eap_config_string field,
hgs
parents:
diff changeset
   988
    const u32_t /*field_length*/,
hgs
parents:
diff changeset
   989
    eap_variable_data_c * const data)
hgs
parents:
diff changeset
   990
{   
hgs
parents:
diff changeset
   991
    EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
   992
    
hgs
parents:
diff changeset
   993
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
   994
        iTools, 
hgs
parents:
diff changeset
   995
        TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
   996
        (EAPL("eap_am_stack_symbian_c::read_configureL(): %s, %d=%s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
   997
         (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
   998
		 m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
   999
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type),
hgs
parents:
diff changeset
  1000
         this,
hgs
parents:
diff changeset
  1001
         dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
  1002
    
hgs
parents:
diff changeset
  1003
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::read_configureL()");
hgs
parents:
diff changeset
  1004
hgs
parents:
diff changeset
  1005
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS)
hgs
parents:
diff changeset
  1006
	{
hgs
parents:
diff changeset
  1007
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1008
			iTools,
hgs
parents:
diff changeset
  1009
			TRACE_FLAGS_DEFAULT, (EAPL("eap_am_stack_symbian_c::read_configureL(): WPS does not use CommDbIf anymore.\n")));
hgs
parents:
diff changeset
  1010
		User::Leave(KErrNotSupported);
hgs
parents:
diff changeset
  1011
	}
hgs
parents:
diff changeset
  1012
hgs
parents:
diff changeset
  1013
    // Open database
hgs
parents:
diff changeset
  1014
    RDbNamedDatabase db;
hgs
parents:
diff changeset
  1015
hgs
parents:
diff changeset
  1016
    User::LeaveIfError(db.Open(iSession, aDbName, KEapSecureUIDFormat));  
hgs
parents:
diff changeset
  1017
    
hgs
parents:
diff changeset
  1018
    CleanupClosePushL(db);
hgs
parents:
diff changeset
  1019
hgs
parents:
diff changeset
  1020
	const TUint BUFFER_SIZE = 128ul;
hgs
parents:
diff changeset
  1021
hgs
parents:
diff changeset
  1022
    // Create a buffer for the ascii strings - initialised with the argument
hgs
parents:
diff changeset
  1023
    HBufC8* asciibuf = HBufC8::NewLC(BUFFER_SIZE);
hgs
parents:
diff changeset
  1024
    TPtr8 asciiString = asciibuf->Des();
hgs
parents:
diff changeset
  1025
    asciiString.Copy(reinterpret_cast<const unsigned char *>(field));
hgs
parents:
diff changeset
  1026
        
hgs
parents:
diff changeset
  1027
    // Buffer for unicode parameter
hgs
parents:
diff changeset
  1028
    HBufC* unicodebuf = HBufC::NewLC(BUFFER_SIZE);
hgs
parents:
diff changeset
  1029
    TPtr unicodeString = unicodebuf->Des();
hgs
parents:
diff changeset
  1030
    
hgs
parents:
diff changeset
  1031
    // Convert to unicode 
hgs
parents:
diff changeset
  1032
    unicodeString.Copy(asciiString);
hgs
parents:
diff changeset
  1033
hgs
parents:
diff changeset
  1034
    // Now do the database query
hgs
parents:
diff changeset
  1035
    HBufC* buf = HBufC::NewLC(KMaxSqlQueryLength);
hgs
parents:
diff changeset
  1036
    TPtr sqlStatement = buf->Des();
hgs
parents:
diff changeset
  1037
    _LIT(KSQLQueryRow, "SELECT %S FROM %S");
hgs
parents:
diff changeset
  1038
    sqlStatement.Format( KSQLQueryRow, &unicodeString, &aTableName );
hgs
parents:
diff changeset
  1039
    
hgs
parents:
diff changeset
  1040
    RDbView view;
hgs
parents:
diff changeset
  1041
    User::LeaveIfError(view.Prepare(db, TDbQuery(sqlStatement), TDbWindow::EUnlimited));
hgs
parents:
diff changeset
  1042
    CleanupClosePushL(view);
hgs
parents:
diff changeset
  1043
    User::LeaveIfError(view.EvaluateAll()); 
hgs
parents:
diff changeset
  1044
    if (view.FirstL())
hgs
parents:
diff changeset
  1045
    {
hgs
parents:
diff changeset
  1046
        eap_status_e status(eap_status_process_general_error);
hgs
parents:
diff changeset
  1047
		const TDbColNo FIRST_COLUMN = 1ul;
hgs
parents:
diff changeset
  1048
        view.GetL();        
hgs
parents:
diff changeset
  1049
        switch (view.ColType(FIRST_COLUMN))
hgs
parents:
diff changeset
  1050
        {
hgs
parents:
diff changeset
  1051
        case EDbColText:                
hgs
parents:
diff changeset
  1052
            {
hgs
parents:
diff changeset
  1053
                unicodeString = view.ColDes(FIRST_COLUMN);
hgs
parents:
diff changeset
  1054
                // Convert to 8-bit
hgs
parents:
diff changeset
  1055
                asciiString.Copy(unicodeString);
hgs
parents:
diff changeset
  1056
                if (asciiString.Size() > 0)
hgs
parents:
diff changeset
  1057
                {
hgs
parents:
diff changeset
  1058
                    status = data->set_copy_of_buffer(asciiString.Ptr(), asciiString.Size());
hgs
parents:
diff changeset
  1059
                    if (status != eap_status_ok)
hgs
parents:
diff changeset
  1060
                    {
hgs
parents:
diff changeset
  1061
                        User::Leave(KErrNoMemory);
hgs
parents:
diff changeset
  1062
                    }
hgs
parents:
diff changeset
  1063
                } 
hgs
parents:
diff changeset
  1064
            }
hgs
parents:
diff changeset
  1065
            break;
hgs
parents:
diff changeset
  1066
        case EDbColUint32:
hgs
parents:
diff changeset
  1067
            {
hgs
parents:
diff changeset
  1068
                TUint value;
hgs
parents:
diff changeset
  1069
                value = view.ColUint32(FIRST_COLUMN);
hgs
parents:
diff changeset
  1070
                status = data->set_copy_of_buffer((const unsigned char *) &value, sizeof(value));
hgs
parents:
diff changeset
  1071
                if (status != eap_status_ok)
hgs
parents:
diff changeset
  1072
                {
hgs
parents:
diff changeset
  1073
                    User::Leave(KErrNoMemory);
hgs
parents:
diff changeset
  1074
                }
hgs
parents:
diff changeset
  1075
            }
hgs
parents:
diff changeset
  1076
            break;
hgs
parents:
diff changeset
  1077
        default:
hgs
parents:
diff changeset
  1078
            EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1079
                iTools,
hgs
parents:
diff changeset
  1080
                TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1081
                (EAPL("read_configureL: Unexpected column type.\n")));
hgs
parents:
diff changeset
  1082
            User::Panic(_L("EAPOL"), 1);            
hgs
parents:
diff changeset
  1083
        }
hgs
parents:
diff changeset
  1084
    } 
hgs
parents:
diff changeset
  1085
    else 
hgs
parents:
diff changeset
  1086
    {
hgs
parents:
diff changeset
  1087
        // Could not find parameter
hgs
parents:
diff changeset
  1088
        EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1089
            iTools,
hgs
parents:
diff changeset
  1090
            TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1091
            (EAPL("read_configureL: Could not find configuration parameter.\n")));
hgs
parents:
diff changeset
  1092
        User::Leave(KErrNotFound);
hgs
parents:
diff changeset
  1093
    }       
hgs
parents:
diff changeset
  1094
    
hgs
parents:
diff changeset
  1095
    // Close database
hgs
parents:
diff changeset
  1096
    CleanupStack::PopAndDestroy(&view);
hgs
parents:
diff changeset
  1097
    CleanupStack::PopAndDestroy(buf);
hgs
parents:
diff changeset
  1098
    CleanupStack::PopAndDestroy(unicodebuf);
hgs
parents:
diff changeset
  1099
    CleanupStack::PopAndDestroy(asciibuf);
hgs
parents:
diff changeset
  1100
    CleanupStack::PopAndDestroy(&db);
hgs
parents:
diff changeset
  1101
hgs
parents:
diff changeset
  1102
hgs
parents:
diff changeset
  1103
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1104
}
hgs
parents:
diff changeset
  1105
hgs
parents:
diff changeset
  1106
//--------------------------------------------------
hgs
parents:
diff changeset
  1107
hgs
parents:
diff changeset
  1108
//
hgs
parents:
diff changeset
  1109
void eap_am_stack_symbian_c::DoCancel()
hgs
parents:
diff changeset
  1110
{   
hgs
parents:
diff changeset
  1111
    EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1112
hgs
parents:
diff changeset
  1113
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1114
        iTools,
hgs
parents:
diff changeset
  1115
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1116
        (EAPL("eap_am_stack_symbian_c::DoCancel()\n")));
hgs
parents:
diff changeset
  1117
hgs
parents:
diff changeset
  1118
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT); 
hgs
parents:
diff changeset
  1119
}
hgs
parents:
diff changeset
  1120
hgs
parents:
diff changeset
  1121
//----------------------------------------------------------------------------
hgs
parents:
diff changeset
  1122
hgs
parents:
diff changeset
  1123
TInt eap_am_stack_symbian_c::RunError(TInt aError)
hgs
parents:
diff changeset
  1124
{
hgs
parents:
diff changeset
  1125
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1126
		iTools,
hgs
parents:
diff changeset
  1127
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1128
		(EAPL("eap_am_stack_symbian_c::RunError(): aError=%d, this=0x%08x\n"),
hgs
parents:
diff changeset
  1129
		aError,
hgs
parents:
diff changeset
  1130
		this));
hgs
parents:
diff changeset
  1131
hgs
parents:
diff changeset
  1132
	return aError;
hgs
parents:
diff changeset
  1133
}
hgs
parents:
diff changeset
  1134
hgs
parents:
diff changeset
  1135
//--------------------------------------------------
hgs
parents:
diff changeset
  1136
hgs
parents:
diff changeset
  1137
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::save_simple_config_session(
hgs
parents:
diff changeset
  1138
    const simple_config_state_e state,
hgs
parents:
diff changeset
  1139
    EAP_TEMPLATE_CONST eap_array_c<simple_config_credential_c> * const credential_array,
hgs
parents:
diff changeset
  1140
    const eap_variable_data_c * const new_password,
hgs
parents:
diff changeset
  1141
    const simple_config_Device_Password_ID_e Device_Password_ID,
hgs
parents:
diff changeset
  1142
    const simple_config_payloads_c * const other_configuration)
hgs
parents:
diff changeset
  1143
{
hgs
parents:
diff changeset
  1144
    EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1145
        iTools,
hgs
parents:
diff changeset
  1146
        TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1147
        (EAPL("%s: eap_am_stack_symbian_c::save_simple_config_session()\n"),
hgs
parents:
diff changeset
  1148
        (iIsClient == true ? "client": "server")));
hgs
parents:
diff changeset
  1149
hgs
parents:
diff changeset
  1150
    eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
  1151
hgs
parents:
diff changeset
  1152
    status = iConfigurationIf->save_simple_config_session(
hgs
parents:
diff changeset
  1153
        state,
hgs
parents:
diff changeset
  1154
        credential_array,
hgs
parents:
diff changeset
  1155
        new_password,
hgs
parents:
diff changeset
  1156
        Device_Password_ID,
hgs
parents:
diff changeset
  1157
        other_configuration);
hgs
parents:
diff changeset
  1158
hgs
parents:
diff changeset
  1159
    EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1160
    return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
  1161
}
hgs
parents:
diff changeset
  1162
hgs
parents:
diff changeset
  1163
//--------------------------------------------------
hgs
parents:
diff changeset
  1164
hgs
parents:
diff changeset
  1165
//
hgs
parents:
diff changeset
  1166
void eap_am_stack_symbian_c::ReadEAPSettingsL()
hgs
parents:
diff changeset
  1167
{
hgs
parents:
diff changeset
  1168
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1169
hgs
parents:
diff changeset
  1170
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1171
		iTools, 
hgs
parents:
diff changeset
  1172
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1173
		(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): %s, %d=%s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
  1174
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
  1175
		 m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
  1176
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type),
hgs
parents:
diff changeset
  1177
		 this,
hgs
parents:
diff changeset
  1178
		 dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
  1179
hgs
parents:
diff changeset
  1180
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::ReadEAPSettingsL()");
hgs
parents:
diff changeset
  1181
hgs
parents:
diff changeset
  1182
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
  1183
hgs
parents:
diff changeset
  1184
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS
hgs
parents:
diff changeset
  1185
		|| iIndex == 0)
hgs
parents:
diff changeset
  1186
	{
hgs
parents:
diff changeset
  1187
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1188
			iTools,
hgs
parents:
diff changeset
  1189
			TRACE_FLAGS_DEFAULT, (EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): WPS does not use CommDbIf anymore.\n")));
hgs
parents:
diff changeset
  1190
		return;
hgs
parents:
diff changeset
  1191
	}
hgs
parents:
diff changeset
  1192
hgs
parents:
diff changeset
  1193
	status = reset_eap_plugins();
hgs
parents:
diff changeset
  1194
	if (status != eap_status_ok)
hgs
parents:
diff changeset
  1195
	{
hgs
parents:
diff changeset
  1196
		EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1197
		User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
hgs
parents:
diff changeset
  1198
	}
hgs
parents:
diff changeset
  1199
hgs
parents:
diff changeset
  1200
	if (iIndexType == ELan
hgs
parents:
diff changeset
  1201
		|| iIndexType == EVpn)
hgs
parents:
diff changeset
  1202
	{
hgs
parents:
diff changeset
  1203
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1204
			iTools,
hgs
parents:
diff changeset
  1205
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1206
			(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): Beginning to read IAP settings - Type: %d, Index: %d.\n"), iIndexType, iIndex));
hgs
parents:
diff changeset
  1207
hgs
parents:
diff changeset
  1208
hgs
parents:
diff changeset
  1209
		{
hgs
parents:
diff changeset
  1210
			{
hgs
parents:
diff changeset
  1211
				eap_am_general_settings_symbian_c * const general_setting = new eap_am_general_settings_symbian_c(iTools);
hgs
parents:
diff changeset
  1212
hgs
parents:
diff changeset
  1213
				if (general_setting == 0)
hgs
parents:
diff changeset
  1214
				{
hgs
parents:
diff changeset
  1215
					User::Leave(KErrNoMemory);
hgs
parents:
diff changeset
  1216
				}
hgs
parents:
diff changeset
  1217
				if (general_setting->get_is_valid() == false)
hgs
parents:
diff changeset
  1218
				{
hgs
parents:
diff changeset
  1219
					general_setting->shutdown();
hgs
parents:
diff changeset
  1220
					delete general_setting;
hgs
parents:
diff changeset
  1221
					User::Leave(KErrNoMemory);
hgs
parents:
diff changeset
  1222
				}
hgs
parents:
diff changeset
  1223
hgs
parents:
diff changeset
  1224
				status = general_setting->configure();
hgs
parents:
diff changeset
  1225
				if (status != eap_status_ok)
hgs
parents:
diff changeset
  1226
				{
hgs
parents:
diff changeset
  1227
					general_setting->shutdown();
hgs
parents:
diff changeset
  1228
					delete general_setting;
hgs
parents:
diff changeset
  1229
					User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
hgs
parents:
diff changeset
  1230
				}
hgs
parents:
diff changeset
  1231
hgs
parents:
diff changeset
  1232
				status = general_setting->read_eap_methods_synchronously(
hgs
parents:
diff changeset
  1233
					iIndexType,
hgs
parents:
diff changeset
  1234
					iIndex,
hgs
parents:
diff changeset
  1235
					&iEnabledEapMethodsArray,
hgs
parents:
diff changeset
  1236
					&iDisabledEapMethodsArray);
hgs
parents:
diff changeset
  1237
hgs
parents:
diff changeset
  1238
				general_setting->shutdown();
hgs
parents:
diff changeset
  1239
				delete general_setting;
hgs
parents:
diff changeset
  1240
			}
hgs
parents:
diff changeset
  1241
hgs
parents:
diff changeset
  1242
			if (status != eap_status_ok)
hgs
parents:
diff changeset
  1243
			{
hgs
parents:
diff changeset
  1244
				User::Leave(iTools->convert_eapol_error_to_am_error(EAP_STATUS_RETURN(iTools, status)));
hgs
parents:
diff changeset
  1245
			}
hgs
parents:
diff changeset
  1246
hgs
parents:
diff changeset
  1247
			// Trace enabled.
hgs
parents:
diff changeset
  1248
			for (TInt ind = 0; ind < iEnabledEapMethodsArray.get_object_count(); ++ind)
hgs
parents:
diff changeset
  1249
			{	
hgs
parents:
diff changeset
  1250
				const eap_type_value_e * const allowed_eap_method = iEnabledEapMethodsArray.get_object(ind);
hgs
parents:
diff changeset
  1251
hgs
parents:
diff changeset
  1252
				if (allowed_eap_method != 0
hgs
parents:
diff changeset
  1253
					&& allowed_eap_method->get_is_valid() == true)
hgs
parents:
diff changeset
  1254
				{
hgs
parents:
diff changeset
  1255
					EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1256
						iTools, 
hgs
parents:
diff changeset
  1257
						TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1258
						(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): Enabled expanded EAP type at index=%d, EAP-type=0xfe%06x%08x\n"),
hgs
parents:
diff changeset
  1259
						 ind,
hgs
parents:
diff changeset
  1260
						 allowed_eap_method->get_vendor_id(),
hgs
parents:
diff changeset
  1261
						 allowed_eap_method->get_vendor_type()));
hgs
parents:
diff changeset
  1262
				}
hgs
parents:
diff changeset
  1263
			} // for()
hgs
parents:
diff changeset
  1264
hgs
parents:
diff changeset
  1265
			// Trace disabled.
hgs
parents:
diff changeset
  1266
			for (TInt ind = 0; ind < iDisabledEapMethodsArray.get_object_count(); ++ind)
hgs
parents:
diff changeset
  1267
			{	
hgs
parents:
diff changeset
  1268
				const eap_type_value_e * const allowed_eap_method = iDisabledEapMethodsArray.get_object(ind);
hgs
parents:
diff changeset
  1269
hgs
parents:
diff changeset
  1270
				if (allowed_eap_method != 0
hgs
parents:
diff changeset
  1271
					&& allowed_eap_method->get_is_valid() == true)
hgs
parents:
diff changeset
  1272
				{
hgs
parents:
diff changeset
  1273
					EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1274
						iTools, 
hgs
parents:
diff changeset
  1275
						TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1276
						(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): Disabled expanded EAP type at index=%d, EAP-type=0xfe%06x%08x\n"),
hgs
parents:
diff changeset
  1277
						 ind,
hgs
parents:
diff changeset
  1278
						 allowed_eap_method->get_vendor_id(),
hgs
parents:
diff changeset
  1279
						 allowed_eap_method->get_vendor_type()));
hgs
parents:
diff changeset
  1280
				}
hgs
parents:
diff changeset
  1281
			} // for()
hgs
parents:
diff changeset
  1282
		}
hgs
parents:
diff changeset
  1283
hgs
parents:
diff changeset
  1284
hgs
parents:
diff changeset
  1285
	} 
hgs
parents:
diff changeset
  1286
	else
hgs
parents:
diff changeset
  1287
	{
hgs
parents:
diff changeset
  1288
		// Unsupported bearer.
hgs
parents:
diff changeset
  1289
hgs
parents:
diff changeset
  1290
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1291
			iTools,
hgs
parents:
diff changeset
  1292
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1293
			(EAPL("ERROR: eap_am_stack_symbian_c::ReadEAPSettingsL() - LEAVE - unsupported bearer\n")));
hgs
parents:
diff changeset
  1294
hgs
parents:
diff changeset
  1295
		User::Leave(KErrNotSupported);
hgs
parents:
diff changeset
  1296
	}
hgs
parents:
diff changeset
  1297
hgs
parents:
diff changeset
  1298
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1299
}
hgs
parents:
diff changeset
  1300
hgs
parents:
diff changeset
  1301
//--------------------------------------------------
hgs
parents:
diff changeset
  1302
34
hgs
parents: 26
diff changeset
  1303
void eap_am_stack_symbian_c::SetToTopPriorityL(const eap_type_value_e /* aEapType */)
26
hgs
parents:
diff changeset
  1304
{
hgs
parents:
diff changeset
  1305
	EAP_TRACE_BEGIN(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1306
hgs
parents:
diff changeset
  1307
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1308
		iTools,
hgs
parents:
diff changeset
  1309
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1310
		(EAPL("eap_am_stack_symbian_c::SetToTopPriorityL() - for EXP EAP types, %d=%s\n"),
hgs
parents:
diff changeset
  1311
		 m_selected_eapol_key_authentication_type,
hgs
parents:
diff changeset
  1312
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(m_selected_eapol_key_authentication_type)));
hgs
parents:
diff changeset
  1313
hgs
parents:
diff changeset
  1314
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::SetToTopPriorityL()");
hgs
parents:
diff changeset
  1315
hgs
parents:
diff changeset
  1316
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS)
hgs
parents:
diff changeset
  1317
	{
hgs
parents:
diff changeset
  1318
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1319
			iTools,
hgs
parents:
diff changeset
  1320
			TRACE_FLAGS_DEFAULT, (EAPL("eap_am_stack_symbian_c::SetToTopPriorityL(): WPS does not use CommDbIf anymore.\n")));
hgs
parents:
diff changeset
  1321
		return;
hgs
parents:
diff changeset
  1322
	}
hgs
parents:
diff changeset
  1323
hgs
parents:
diff changeset
  1324
	if (iIndexType == ELan
hgs
parents:
diff changeset
  1325
		|| iIndexType == EVpn)
hgs
parents:
diff changeset
  1326
	{
hgs
parents:
diff changeset
  1327
hgs
parents:
diff changeset
  1328
hgs
parents:
diff changeset
  1329
hgs
parents:
diff changeset
  1330
	} 
hgs
parents:
diff changeset
  1331
	else
hgs
parents:
diff changeset
  1332
	{
hgs
parents:
diff changeset
  1333
		// Unsupported bearer.
hgs
parents:
diff changeset
  1334
hgs
parents:
diff changeset
  1335
		EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1336
			iTools,
hgs
parents:
diff changeset
  1337
			TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1338
			(EAPL("ERROR: eap_am_stack_symbian_c::SetToTopPriorityL() - LEAVE - unsupported bearer\n")));
hgs
parents:
diff changeset
  1339
		
hgs
parents:
diff changeset
  1340
		User::Leave(KErrNotSupported);
hgs
parents:
diff changeset
  1341
	}
hgs
parents:
diff changeset
  1342
		
hgs
parents:
diff changeset
  1343
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1344
}
hgs
parents:
diff changeset
  1345
hgs
parents:
diff changeset
  1346
//--------------------------------------------------
hgs
parents:
diff changeset
  1347
hgs
parents:
diff changeset
  1348
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::set_eap_database_reference_values(
hgs
parents:
diff changeset
  1349
                const eap_variable_data_c * const reference)
hgs
parents:
diff changeset
  1350
{
hgs
parents:
diff changeset
  1351
    eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
  1352
hgs
parents:
diff changeset
  1353
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1354
		iTools, 
hgs
parents:
diff changeset
  1355
		TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1356
		(EAPL("eap_am_stack_symbian_c::set_eap_database_reference_values(): %s, this = 0x%08x => 0x%08x\n"),
hgs
parents:
diff changeset
  1357
		 (iIsClient == true) ? "client": "server",
hgs
parents:
diff changeset
  1358
		 this,
hgs
parents:
diff changeset
  1359
		 dynamic_cast<abs_eap_base_timer_c *>(this)));
hgs
parents:
diff changeset
  1360
hgs
parents:
diff changeset
  1361
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::set_eap_database_reference_values()");
hgs
parents:
diff changeset
  1362
hgs
parents:
diff changeset
  1363
	const eapol_wlan_database_reference_values_s * const database_reference_values
hgs
parents:
diff changeset
  1364
		= reinterpret_cast<eapol_wlan_database_reference_values_s *>(
hgs
parents:
diff changeset
  1365
		reference->get_data(sizeof(eapol_wlan_database_reference_values_s)));
hgs
parents:
diff changeset
  1366
	if (database_reference_values == 0)
hgs
parents:
diff changeset
  1367
	{
hgs
parents:
diff changeset
  1368
		EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1369
		return EAP_STATUS_RETURN(iTools, eap_status_allocation_error);
hgs
parents:
diff changeset
  1370
	}
hgs
parents:
diff changeset
  1371
hgs
parents:
diff changeset
  1372
	iIndexType = static_cast<TIndexType>(database_reference_values->m_database_index_type);
hgs
parents:
diff changeset
  1373
	iIndex = database_reference_values->m_database_index;
hgs
parents:
diff changeset
  1374
hgs
parents:
diff changeset
  1375
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1376
		iTools,
hgs
parents:
diff changeset
  1377
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1378
		(EAPL("eap_am_stack_symbian_c::set_eap_database_reference_values(): iIndexType=%d, iIndex=%d.\n"),
hgs
parents:
diff changeset
  1379
		 iIndexType,
hgs
parents:
diff changeset
  1380
		 iIndex));
hgs
parents:
diff changeset
  1381
hgs
parents:
diff changeset
  1382
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  1383
hgs
parents:
diff changeset
  1384
    return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
  1385
}
hgs
parents:
diff changeset
  1386
hgs
parents:
diff changeset
  1387
//--------------------------------------------------
hgs
parents:
diff changeset
  1388
hgs
parents:
diff changeset
  1389
TInt eap_am_stack_symbian_c::get_current_eap_index()
hgs
parents:
diff changeset
  1390
{
hgs
parents:
diff changeset
  1391
	return iCurrentEapIndex;
hgs
parents:
diff changeset
  1392
}
hgs
parents:
diff changeset
  1393
hgs
parents:
diff changeset
  1394
//--------------------------------------------------
hgs
parents:
diff changeset
  1395
hgs
parents:
diff changeset
  1396
void eap_am_stack_symbian_c::set_current_eap_index(const TInt ind)
hgs
parents:
diff changeset
  1397
{
hgs
parents:
diff changeset
  1398
	iCurrentEapIndex = ind;
hgs
parents:
diff changeset
  1399
}
hgs
parents:
diff changeset
  1400
hgs
parents:
diff changeset
  1401
//--------------------------------------------------
hgs
parents:
diff changeset
  1402
hgs
parents:
diff changeset
  1403
EAP_FUNC_EXPORT eap_status_e eap_am_stack_symbian_c::get_802_11_authentication_mode(
hgs
parents:
diff changeset
  1404
	const eap_am_network_id_c * const receive_network_id,
hgs
parents:
diff changeset
  1405
	const eapol_key_authentication_type_e authentication_type)
hgs
parents:
diff changeset
  1406
{
hgs
parents:
diff changeset
  1407
	EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1408
		iTools,
hgs
parents:
diff changeset
  1409
		TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1410
		(EAPL("%s: eap_am_stack_symbian_c::get_802_11_authentication_mode(): %d=%s\n"),
hgs
parents:
diff changeset
  1411
		("client"),
hgs
parents:
diff changeset
  1412
		 authentication_type,
hgs
parents:
diff changeset
  1413
		 eapol_key_state_string_c::get_eapol_key_authentication_type_string(authentication_type)));
hgs
parents:
diff changeset
  1414
hgs
parents:
diff changeset
  1415
    EAP_TRACE_RETURN_STRING(iTools, "returns: eap_am_stack_symbian_c::get_802_11_authentication_mode()");
hgs
parents:
diff changeset
  1416
hgs
parents:
diff changeset
  1417
	eap_status_e status(eap_status_ok);
hgs
parents:
diff changeset
  1418
	eap_expanded_type_c expandedEAPType(eap_type_none);
hgs
parents:
diff changeset
  1419
	u32_t ind_type = 0ul;
hgs
parents:
diff changeset
  1420
hgs
parents:
diff changeset
  1421
	m_selected_eapol_key_authentication_type = authentication_type;
hgs
parents:
diff changeset
  1422
hgs
parents:
diff changeset
  1423
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  1424
hgs
parents:
diff changeset
  1425
	status = reset_eap_configuration();
hgs
parents:
diff changeset
  1426
    if (status != eap_status_ok)
hgs
parents:
diff changeset
  1427
    {
hgs
parents:
diff changeset
  1428
        EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1429
        return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
  1430
    }
hgs
parents:
diff changeset
  1431
hgs
parents:
diff changeset
  1432
    // - - - - - - - - - - - - - - - - - - - - - - - - - - - -
hgs
parents:
diff changeset
  1433
hgs
parents:
diff changeset
  1434
hgs
parents:
diff changeset
  1435
	for (ind_type = 0; ind_type < iEnabledEapMethodsArray.get_object_count(); ++ind_type)
hgs
parents:
diff changeset
  1436
	{	
hgs
parents:
diff changeset
  1437
		const eap_type_value_e * const allowed_eap_method = iEnabledEapMethodsArray.get_object(ind_type);
hgs
parents:
diff changeset
  1438
hgs
parents:
diff changeset
  1439
		if (allowed_eap_method != 0
hgs
parents:
diff changeset
  1440
			&& allowed_eap_method->get_is_valid() == true)
hgs
parents:
diff changeset
  1441
		{
hgs
parents:
diff changeset
  1442
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1443
				iTools, 
hgs
parents:
diff changeset
  1444
				TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1445
				(EAPL("eap_am_stack_symbian_c::ReadEAPSettingsL(): Enabled expanded EAP type at index=%d, EAP-type=0xfe%06x%08x\n"),
hgs
parents:
diff changeset
  1446
				 ind_type,
hgs
parents:
diff changeset
  1447
				 allowed_eap_method->get_vendor_id(),
hgs
parents:
diff changeset
  1448
				 allowed_eap_method->get_vendor_type()));
hgs
parents:
diff changeset
  1449
hgs
parents:
diff changeset
  1450
			if (*allowed_eap_method != eap_type_none)
hgs
parents:
diff changeset
  1451
			{
hgs
parents:
diff changeset
  1452
				expandedEAPType = *allowed_eap_method;
hgs
parents:
diff changeset
  1453
				break;
hgs
parents:
diff changeset
  1454
			}
hgs
parents:
diff changeset
  1455
		}
hgs
parents:
diff changeset
  1456
	} // for()
hgs
parents:
diff changeset
  1457
hgs
parents:
diff changeset
  1458
hgs
parents:
diff changeset
  1459
	if (m_selected_eapol_key_authentication_type == eapol_key_authentication_type_WPS)
hgs
parents:
diff changeset
  1460
	{
hgs
parents:
diff changeset
  1461
		expandedEAPType = eap_expanded_type_simple_config.get_type();
hgs
parents:
diff changeset
  1462
	}
hgs
parents:
diff changeset
  1463
	else if (ind_type >= iEnabledEapMethodsArray.get_object_count())
hgs
parents:
diff changeset
  1464
	{
hgs
parents:
diff changeset
  1465
		// No enabled EAP types.
hgs
parents:
diff changeset
  1466
		EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
  1467
			iTools,
hgs
parents:
diff changeset
  1468
			TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1469
			(EAPL("ERROR: No enabled EAP types.\n")));
hgs
parents:
diff changeset
  1470
		EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
  1471
			iTools,
hgs
parents:
diff changeset
  1472
			TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT,
hgs
parents:
diff changeset
  1473
			(EAPL("ERROR: Indication sent to WLM: eap_status_failed_completely.\n")));
hgs
parents:
diff changeset
  1474
hgs
parents:
diff changeset
  1475
		status = iPartner->complete_get_802_11_authentication_mode(
hgs
parents:
diff changeset
  1476
			eap_status_illegal_eap_type,
hgs
parents:
diff changeset
  1477
			receive_network_id,
hgs
parents:
diff changeset
  1478
			eapol_key_802_11_authentication_mode_none);
hgs
parents:
diff changeset
  1479
hgs
parents:
diff changeset
  1480
		EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);	
hgs
parents:
diff changeset
  1481
		return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
  1482
	}	
hgs
parents:
diff changeset
  1483
hgs
parents:
diff changeset
  1484
	eapol_key_802_11_authentication_mode_e a802_11_authentication_mode(eapol_key_802_11_authentication_mode_none);
hgs
parents:
diff changeset
  1485
hgs
parents:
diff changeset
  1486
	if (expandedEAPType == eap_type_leap)
hgs
parents:
diff changeset
  1487
	{
hgs
parents:
diff changeset
  1488
		if (authentication_type == eapol_key_authentication_type_dynamic_WEP)
hgs
parents:
diff changeset
  1489
		{
hgs
parents:
diff changeset
  1490
			// LEAP uses it's own 802.11 authentication mode when 802.1X (dynamic WEP) is used.
hgs
parents:
diff changeset
  1491
			a802_11_authentication_mode = eapol_key_802_11_authentication_mode_leap;
hgs
parents:
diff changeset
  1492
hgs
parents:
diff changeset
  1493
			EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
  1494
				iTools,
hgs
parents:
diff changeset
  1495
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1496
				(EAPL("start_authentication(): Trying auth mode LEAP (802.1x mode).\n")));
hgs
parents:
diff changeset
  1497
		}
hgs
parents:
diff changeset
  1498
		else
hgs
parents:
diff changeset
  1499
		{
hgs
parents:
diff changeset
  1500
			// If security mode is WPA or RSNA then even LEAP uses open authentication!
hgs
parents:
diff changeset
  1501
			a802_11_authentication_mode = eapol_key_802_11_authentication_mode_open;
hgs
parents:
diff changeset
  1502
hgs
parents:
diff changeset
  1503
			EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
  1504
				iTools,
hgs
parents:
diff changeset
  1505
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1506
				(EAPL("start_authentication(): Trying auth mode OPEN (LEAP in WPA mode).\n")));
hgs
parents:
diff changeset
  1507
		}
hgs
parents:
diff changeset
  1508
hgs
parents:
diff changeset
  1509
	}
hgs
parents:
diff changeset
  1510
	else
hgs
parents:
diff changeset
  1511
	{
hgs
parents:
diff changeset
  1512
		a802_11_authentication_mode = eapol_key_802_11_authentication_mode_open;
hgs
parents:
diff changeset
  1513
hgs
parents:
diff changeset
  1514
		EAP_TRACE_ALWAYS(
hgs
parents:
diff changeset
  1515
			iTools,
hgs
parents:
diff changeset
  1516
			TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1517
			(EAPL("start_authentication(): Trying auth mode OPEN.\n")));
hgs
parents:
diff changeset
  1518
	}
hgs
parents:
diff changeset
  1519
hgs
parents:
diff changeset
  1520
	status = iPartner->complete_get_802_11_authentication_mode(
hgs
parents:
diff changeset
  1521
		status,
hgs
parents:
diff changeset
  1522
		receive_network_id,
hgs
parents:
diff changeset
  1523
		a802_11_authentication_mode);
hgs
parents:
diff changeset
  1524
hgs
parents:
diff changeset
  1525
	EAP_TRACE_END(iTools, TRACE_FLAGS_DEFAULT);
hgs
parents:
diff changeset
  1526
	return EAP_STATUS_RETURN(iTools, status);
hgs
parents:
diff changeset
  1527
}
hgs
parents:
diff changeset
  1528
hgs
parents:
diff changeset
  1529
//--------------------------------------------------
hgs
parents:
diff changeset
  1530
hgs
parents:
diff changeset
  1531
EAP_FUNC_EXPORT eap_am_stack_c * new_eap_am_stack_c(class abs_eap_am_tools_c * tools, bool is_client_when_true)
hgs
parents:
diff changeset
  1532
{
hgs
parents:
diff changeset
  1533
    eap_am_stack_symbian_c * am_stack = new eap_am_stack_symbian_c(tools, is_client_when_true);
hgs
parents:
diff changeset
  1534
hgs
parents:
diff changeset
  1535
	eap_automatic_variable_c<eap_am_stack_c> automatic_am_stack(
hgs
parents:
diff changeset
  1536
		tools,
hgs
parents:
diff changeset
  1537
		am_stack);
hgs
parents:
diff changeset
  1538
hgs
parents:
diff changeset
  1539
	if (am_stack == 0
hgs
parents:
diff changeset
  1540
		|| am_stack->get_is_valid() == false)
hgs
parents:
diff changeset
  1541
	{
hgs
parents:
diff changeset
  1542
		// ERROR.
hgs
parents:
diff changeset
  1543
		if (am_stack != 0)
hgs
parents:
diff changeset
  1544
		{
hgs
parents:
diff changeset
  1545
			EAP_TRACE_DEBUG(
hgs
parents:
diff changeset
  1546
				tools,
hgs
parents:
diff changeset
  1547
				TRACE_FLAGS_ALWAYS|TRACE_FLAGS_DEFAULT, 
hgs
parents:
diff changeset
  1548
				(EAPL("calls: new_eap_am_stack_c(): am_stack->shutdown(): %s.\n"),
hgs
parents:
diff changeset
  1549
				(is_client_when_true == true) ? "client": "server"));
hgs
parents:
diff changeset
  1550
hgs
parents:
diff changeset
  1551
			am_stack->shutdown();
hgs
parents:
diff changeset
  1552
		}
hgs
parents:
diff changeset
  1553
		return 0;
hgs
parents:
diff changeset
  1554
	}
hgs
parents:
diff changeset
  1555
hgs
parents:
diff changeset
  1556
	automatic_am_stack.do_not_free_variable();
hgs
parents:
diff changeset
  1557
hgs
parents:
diff changeset
  1558
    return am_stack;
hgs
parents:
diff changeset
  1559
}
hgs
parents:
diff changeset
  1560
hgs
parents:
diff changeset
  1561
//--------------------------------------------------
hgs
parents:
diff changeset
  1562
// end
hgs
parents:
diff changeset
  1563