eapol/eapol_framework/wapi_common/src/wapi_core_retransmission.cpp
changeset 17 8840d3e38314
equal deleted inserted replaced
2:1c7bc153c08e 17:8840d3e38314
       
     1 /*
       
     2 * ============================================================================
       
     3 *  Name        : ./accesssec/eapol/eapol_framework/wapi_common/src/wapi_core_retransmission.cpp
       
     4 *  Part of     : WAPI / WAPI       *** Info from the SWAD
       
     5 *  Description : WAPI authentication
       
     6 *  Version     : %version: 10 % << Don't touch! Updated by Synergy at check-out.
       
     7 *
       
     8 *  Copyright © 2001-2009 Nokia.  All rights reserved.
       
     9 *  This material, including documentation and any related computer
       
    10 *  programs, is protected by copyright controlled by Nokia.  All
       
    11 *  rights are reserved.  Copying, including reproducing, storing,
       
    12 *  adapting or translating, any or all of this material requires the
       
    13 *  prior written consent of Nokia.  This material also contains
       
    14 *  confidential information which may not be disclosed to others
       
    15 *  without the prior written consent of Nokia.
       
    16 * ============================================================================
       
    17 * Template version: 4.1.1
       
    18 */
       
    19 
       
    20 // This is enumeration of WAPI source code.
       
    21 #if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
       
    22 	#undef EAP_FILE_NUMBER_ENUM
       
    23 	#define EAP_FILE_NUMBER_ENUM 47 
       
    24 	#undef EAP_FILE_NUMBER_DATE 
       
    25 	#define EAP_FILE_NUMBER_DATE 1127594498 
       
    26 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES)
       
    27 
       
    28 
       
    29 
       
    30 #include "eap_am_memory.h"
       
    31 #include "eap_tools.h"
       
    32 #include "eap_am_export.h"
       
    33 #include "abs_eap_base_timer.h"
       
    34 #include "wapi_core_retransmission.h"
       
    35 #include "eap_am_network_id.h"
       
    36 #include "wai_message.h"
       
    37 
       
    38 //--------------------------------------------------
       
    39 
       
    40 EAP_FUNC_EXPORT wapi_core_retransmission_c::~wapi_core_retransmission_c()
       
    41 {
       
    42 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
    43 
       
    44 	delete m_send_network_id;
       
    45 	m_send_network_id = 0;
       
    46 
       
    47 	delete m_wai_message_data;
       
    48 	m_wai_message_data = 0;
       
    49 
       
    50 	delete m_wai_received_message_data;
       
    51 	m_wai_received_message_data = 0;
       
    52 
       
    53 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
    54 }
       
    55 
       
    56 //--------------------------------------------------
       
    57 
       
    58 EAP_FUNC_EXPORT wapi_core_retransmission_c::wapi_core_retransmission_c(
       
    59 	abs_eap_am_tools_c * const tools,
       
    60 	const eap_am_network_id_c * const send_network_id,
       
    61 	const wai_message_c * const received_wai_message_data_or_null,
       
    62 	const wai_message_c * const wai_message_data,
       
    63 	const u32_t retransmission_time,
       
    64 	const u32_t retransmission_counter,
       
    65 	const u16_t packet_sequence_number,
       
    66 	const wai_protocol_subtype_e wapi_subtype)
       
    67 	: m_am_tools(tools)
       
    68 	, m_send_network_id(send_network_id->copy())
       
    69 	, m_wai_message_data(wai_message_data->copy())
       
    70 	, m_wai_received_message_data(0)
       
    71 	, m_is_valid(false)
       
    72 	, m_retransmission_time(retransmission_time)
       
    73 	, m_retransmission_counter(retransmission_counter)
       
    74 	, m_packet_sequence_number(packet_sequence_number)
       
    75 	, m_wapi_subtype(wapi_subtype)
       
    76 {
       
    77 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
    78 
       
    79 	//EAP_ASSERT(m_send_network_id->get_source() != 0);
       
    80 	//EAP_ASSERT(m_send_network_id->get_destination() != 0);
       
    81 
       
    82 	if (received_wai_message_data_or_null != 0)
       
    83 	{
       
    84 		m_wai_received_message_data = received_wai_message_data_or_null->copy();
       
    85 	}
       
    86 
       
    87 	if (m_send_network_id != 0
       
    88 		&& m_wai_message_data != 0
       
    89 		&& m_wai_message_data->get_is_valid() == true)
       
    90 	{
       
    91 		m_is_valid = true;
       
    92 	}
       
    93 	else
       
    94 	{
       
    95 		delete m_send_network_id;
       
    96 		m_send_network_id = 0;
       
    97 
       
    98 		delete m_wai_message_data;
       
    99 		m_wai_message_data = 0;
       
   100 	}
       
   101 
       
   102 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   103 }
       
   104 
       
   105 //--------------------------------------------------
       
   106 
       
   107 EAP_FUNC_EXPORT bool wapi_core_retransmission_c::get_is_valid() const
       
   108 {
       
   109 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   110 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   111 	return m_is_valid;
       
   112 }
       
   113 
       
   114 //--------------------------------------------------
       
   115 
       
   116 EAP_FUNC_EXPORT u32_t wapi_core_retransmission_c::get_next_retransmission_counter()
       
   117 {
       
   118 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   119 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   120 	return --m_retransmission_counter;
       
   121 }
       
   122 
       
   123 //--------------------------------------------------
       
   124 
       
   125 EAP_FUNC_EXPORT u32_t wapi_core_retransmission_c::get_retransmission_counter() const
       
   126 {
       
   127 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   128 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   129 	return m_retransmission_counter;
       
   130 }
       
   131 
       
   132 //--------------------------------------------------
       
   133 
       
   134 EAP_FUNC_EXPORT u32_t wapi_core_retransmission_c::get_next_retransmission_time()
       
   135 {
       
   136 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   137 	u32_t time = m_retransmission_time;
       
   138 
       
   139 	u32_t jitter_data = 0ul;
       
   140 	i32_t jitter = 0;
       
   141 	eap_status_e status = m_am_tools->get_crypto()->get_rand_bytes(
       
   142 		reinterpret_cast<u8_t *>(&jitter_data),
       
   143 		sizeof(jitter_data));
       
   144 	if (status != eap_status_ok)
       
   145 	{
       
   146 		jitter = 0;
       
   147 	}
       
   148 	else
       
   149 	{
       
   150 		// Jitter should be -m_retransmission_time/2 ... m_retransmission_time/2.
       
   151 		jitter_data = (jitter_data % (m_retransmission_time));
       
   152 		jitter = jitter_data - m_retransmission_time/2;
       
   153 	}
       
   154 	m_retransmission_time += (m_retransmission_time + jitter);
       
   155 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   156 	return time;
       
   157 }
       
   158 
       
   159 //--------------------------------------------------
       
   160 
       
   161 EAP_FUNC_EXPORT eap_am_network_id_c *wapi_core_retransmission_c::get_send_network_id() const
       
   162 {
       
   163 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   164 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   165 	return m_send_network_id;
       
   166 }
       
   167 
       
   168 //--------------------------------------------------
       
   169 
       
   170 EAP_FUNC_EXPORT const wai_message_c * wapi_core_retransmission_c::get_wai_message_data() const
       
   171 {
       
   172 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   173 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   174 	return m_wai_message_data;
       
   175 }
       
   176 
       
   177 //--------------------------------------------------
       
   178 
       
   179 EAP_FUNC_EXPORT u16_t wapi_core_retransmission_c::get_packet_sequence_number() const
       
   180 {
       
   181 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   182 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   183 	return m_packet_sequence_number;
       
   184 }
       
   185 
       
   186 //--------------------------------------------------
       
   187 
       
   188 EAP_FUNC_EXPORT const wai_message_c * wapi_core_retransmission_c::get_wai_received_message_data() const
       
   189 {
       
   190 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   191 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   192 	return m_wai_received_message_data;
       
   193 }
       
   194 
       
   195 //--------------------------------------------------
       
   196 
       
   197 EAP_FUNC_EXPORT wai_protocol_subtype_e wapi_core_retransmission_c::get_wapi_subtype() const
       
   198 {
       
   199 	EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   200 	EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);
       
   201 	return m_wapi_subtype;
       
   202 }
       
   203 
       
   204 //--------------------------------------------------
       
   205 
       
   206 // End.