--- a/eapol/eapol_framework/eapol_symbian/am/type/protected_setup/eap_am_type_protected_setup_symbian.cpp Fri Sep 17 08:30:11 2010 +0300
+++ b/eapol/eapol_framework/eapol_symbian/am/type/protected_setup/eap_am_type_protected_setup_symbian.cpp Mon Oct 04 00:19:54 2010 +0300
@@ -16,7 +16,7 @@
*/
/*
-* %version: 18.1.4.1.12 %
+* %version: 18.1.4.1.13 %
*/
// This is enumeration of EAPOL source code.
@@ -40,6 +40,7 @@
#include "abs_simple_config_am_services.h"
#include "simple_config_credential.h"
#include "abs_eap_configuration_if.h"
+#include "eap_network_id_selector.h"
#include "EapTraceSymbian.h"
#include <mmtsy_names.h>
@@ -595,43 +596,15 @@
eap_status_e status(eap_status_ok);
- eap_variable_data_c wanted_field(m_am_tools);
- eap_variable_data_c type_field(m_am_tools);
-
- status = wanted_field.set_buffer(
- field->get_field(),
- field->get_field_length(),
- false,
- false);
- if (status != eap_status_ok)
- {
- EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
- return EAP_STATUS_RETURN(m_am_tools, status);
- }
-
- status = type_field.set_buffer(
- cf_str_EAP_SIMPLE_CONFIG_device_password.get_field()->get_field(),
- cf_str_EAP_SIMPLE_CONFIG_device_password.get_field()->get_field_length(),
- false,
- false);
- if (status != eap_status_ok)
- {
- EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
- return EAP_STATUS_RETURN(m_am_tools, status);
- }
-
- if (!wanted_field.compare(&type_field))
+ if (cf_str_EAP_SIMPLE_CONFIG_device_password.get_field()->compare(
+ m_am_tools,
+ field) == true)
{
// We have to get the device password here. It is nothing but the PIN code in PIN based protected setup.
-
- TRAPD(err, read_device_passwordL(
- field->get_field(),
- field->get_field_length(),
- data));
- if (err != KErrNone)
- {
- status = m_am_tools->convert_am_error_to_eapol_error(err);
- }
+
+ status = read_memory_store(
+ eap_type_protected_setup_stored_preshared_key,
+ data);
m_am_tools->trace_configuration(
status,
@@ -640,8 +613,7 @@
EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
return EAP_STATUS_RETURN(m_am_tools, status);
-
- } // if (!wanted_field.compare(&type_field))
+ }
// Read is routed to partner object.
@@ -660,16 +632,271 @@
//--------------------------------------------------
//
+eap_status_e CEapAmProtectedSetupSymbian::read_memory_store(
+ const eap_type_protected_setup_stored_e data_type,
+ eap_variable_data_c * const data)
+{
+ // Read data from memory store.
+
+ eap_variable_data_c memory_store_key(m_am_tools);
+
+ eap_status_e status = memory_store_key.set_copy_of_buffer(
+ EAP_WPS_CONFIGURATION_MEMORY_STORE_KEY,
+ sizeof(EAP_WPS_CONFIGURATION_MEMORY_STORE_KEY));
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ status = memory_store_key.add_data(
+ &m_is_client,
+ sizeof(m_is_client));
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ eap_network_id_selector_c state_selector(
+ m_am_tools,
+ &m_receive_network_id);
+
+ status = memory_store_key.add_data(
+ &state_selector);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ eap_tlv_message_data_c tlv_data(m_am_tools);
+
+ status = m_am_tools->memory_store_get_data(
+ &memory_store_key,
+ &tlv_data);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): cannot get WPS credentials\n")));
+ }
+ else
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): WPS credentials found\n")));
+
+ // Parse read data.
+ eap_array_c<eap_tlv_header_c> tlv_blocks(m_am_tools);
+
+ status = tlv_data.parse_message_data(&tlv_blocks);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ for (u32_t ind = 0ul; ind < tlv_blocks.get_object_count(); ind++)
+ {
+ eap_tlv_header_c * const tlv = tlv_blocks.get_object(ind);
+ if (tlv != 0)
+ {
+ if (tlv->get_type() == data_type)
+ {
+ status = data->set_copy_of_buffer(
+ tlv->get_value(tlv->get_value_length()),
+ tlv->get_value_length());
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+ }
+ }
+ } // for()
+
+ if (data->get_is_valid_data() == false)
+ {
+ EAP_TRACE_ERROR(
+ m_am_tools,
+ TRACE_FLAGS_ERROR,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): cannot get data %d\n"),
+ data_type));
+
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
+ }
+ }
+
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+}
+
+//--------------------------------------------------
+
+#if 0
+
+//
void CEapAmProtectedSetupSymbian::read_device_passwordL(
- eap_config_string /*field*/,
- const u32_t /*field_length*/,
- eap_variable_data_c * const /* data */)
+ eap_variable_data_c * const data)
{
EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
// Get the things from commsdat here.
-#if 0
+#if 1
+
+ // Read PIN from memory store.
+
+ eap_status_e status = read_memory_store(
+ eap_type_protected_setup_stored_preshared_key,
+ data);
+
+#elif 0
+
+ {
+ eap_variable_data_c memory_store_key(m_am_tools);
+
+ eap_status_e status = memory_store_key.set_copy_of_buffer(
+ EAP_WPS_CONFIGURATION_MEMORY_STORE_KEY,
+ sizeof(EAP_WPS_CONFIGURATION_MEMORY_STORE_KEY));
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+
+ status = memory_store_key.add_data(
+ &m_is_client,
+ sizeof(m_is_client));
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+
+ eap_network_id_selector_c state_selector(
+ m_am_tools,
+ &m_receive_network_id);
+
+ status = memory_store_key.add_data(
+ &state_selector);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+
+ eap_tlv_message_data_c tlv_data(m_am_tools);
+
+ status = m_am_tools->memory_store_get_data(
+ &memory_store_key,
+ &tlv_data);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): cannot get WPS credentials\n")));
+ }
+ else
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): WPS credentials found\n")));
+
+ // Parse read data.
+ eap_array_c<eap_tlv_header_c> tlv_blocks(m_am_tools);
+
+ status = tlv_data.parse_message_data(&tlv_blocks);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+
+ for (u32_t ind = 0ul; ind < tlv_blocks.get_object_count(); ind++)
+ {
+ eap_tlv_header_c * const tlv = tlv_blocks.get_object(ind);
+ if (tlv != 0)
+ {
+ if (tlv->get_type() == eap_type_protected_setup_stored_preshared_key)
+ {
+ status = data->set_copy_of_buffer(
+ tlv->get_value(tlv->get_value_length()),
+ tlv->get_value_length());
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+ }
+ else if (tlv->get_type() == eap_type_protected_setup_stored_ssid)
+ {
+ status = m_SSID.set_copy_of_buffer(
+ tlv->get_value(tlv->get_value_length()),
+ tlv->get_value_length());
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, status);
+ return;
+ }
+ }
+ }
+ } // for()
+
+ if (data->get_is_valid_data() == false)
+ {
+ EAP_TRACE_ERROR(
+ m_am_tools,
+ TRACE_FLAGS_ERROR,
+ (EAPL("simple_config_record_c::complete_query_network_and_device_parameters(): cannot get WPS PIN\n")));
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ (void) EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter);
+ return;
+ }
+ }
+
+
+ EAP_TRACE_DATA_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("SIMPLE_CONFIG m_device_password"),
+ m_device_password.get_data(),
+ m_device_password.get_data_length()));
+
+ if (m_device_password.get_data_length() == SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN_SIZE
+ && m_am_tools->memcmp(m_device_password.get_data(), SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN, SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN_SIZE) == 0)
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("CEapAmProtectedSetupSymbian::read_device_passwordL(): WPS push button\n")));
+
+ m_Device_Password_ID = simple_config_Device_Password_ID_PushButton;
+ }
+ else
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("CEapAmProtectedSetupSymbian::read_device_passwordL(): WPS PIN\n")));
+
+ m_Device_Password_ID = simple_config_Device_Password_ID_Default_PIN;
+ }
+ }
+
+#else
// We need PSK (PIN code for protected setup) from the CommsDat.
// CommDbIf is used to get the PSK.
@@ -776,6 +1003,8 @@
EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
}
+#endif
+
//--------------------------------------------------
//
@@ -933,6 +1162,46 @@
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+ {
+ eap_variable_data_c device_password(m_am_tools);
+
+ status = read_memory_store(
+ eap_type_protected_setup_stored_preshared_key,
+ &device_password);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ EAP_TRACE_DATA_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("SIMPLE_CONFIG device_password"),
+ device_password.get_data(),
+ device_password.get_data_length()));
+
+ if (device_password.get_data_length() == SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN_SIZE
+ && m_am_tools->memcmp(device_password.get_data(), SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN, SIMPLE_CONFIG_PBC_DEVICE_PASSWORD_PIN_SIZE) == 0)
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("CEapAmProtectedSetupSymbian::read_device_passwordL(): WPS push button\n")));
+
+ m_Device_Password_ID = simple_config_Device_Password_ID_PushButton;
+ }
+ else
+ {
+ EAP_TRACE_DEBUG(
+ m_am_tools,
+ TRACE_FLAGS_DEFAULT,
+ (EAPL("CEapAmProtectedSetupSymbian::read_device_passwordL(): WPS PIN\n")));
+
+ m_Device_Password_ID = simple_config_Device_Password_ID_Default_PIN;
+ }
+ }
+
EAP_TRACE_DEBUG(
m_am_tools,
TRACE_FLAGS_DEFAULT,
@@ -1078,6 +1347,33 @@
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
+
+
+ {
+ eap_variable_data_c SSID(m_am_tools);
+
+ status = read_memory_store(
+ eap_type_protected_setup_stored_ssid,
+ &SSID);
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+
+ status = m_network_and_device_parameters.copy_attribute_data(
+ simple_config_Attribute_Type_SSID,
+ true,
+ SSID.get_data(),
+ SSID.get_data_length());
+ if (status != eap_status_ok)
+ {
+ EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
+ return EAP_STATUS_RETURN(m_am_tools, status);
+ }
+ }
+
+ // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
// Query the device details from the MMETEL connection.
TRAPD(error, m_prot_setup_if->QueryDeviceParametersL());