|
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. |