|
1 /* |
|
2 * Copyright (c) 2001-2006 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of the License "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: EAP and WLAN authentication protocols. |
|
15 * |
|
16 */ |
|
17 |
|
18 |
|
19 // This is enumeration of EAPOL source code. |
|
20 #if defined(USE_EAP_MINIMUM_RELEASE_TRACES) |
|
21 #undef EAP_FILE_NUMBER_ENUM |
|
22 #define EAP_FILE_NUMBER_ENUM 40 |
|
23 #undef EAP_FILE_NUMBER_DATE |
|
24 #define EAP_FILE_NUMBER_DATE 1127594498 |
|
25 #endif //#if defined(USE_EAP_MINIMUM_RELEASE_TRACES) |
|
26 |
|
27 |
|
28 |
|
29 #include "eap_am_memory.h" |
|
30 #include "eap_automatic_variable.h" |
|
31 #include "eapol_handle_tlv_message_data.h" |
|
32 #include "eap_variable_data.h" |
|
33 #include "eap_am_network_id.h" |
|
34 #include "eap_buffer.h" |
|
35 #include "eapol_session_key.h" |
|
36 #include "abs_eap_state_notification.h" |
|
37 #include "eap_state_notification.h" |
|
38 |
|
39 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
40 #include "simple_config_types.h" |
|
41 #include "simple_config_credential.h" |
|
42 #include "simple_config_payloads.h" |
|
43 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
44 |
|
45 |
|
46 /** @file */ |
|
47 |
|
48 |
|
49 //-------------------------------------------------- |
|
50 |
|
51 EAP_FUNC_EXPORT eapol_handle_tlv_message_data_c::~eapol_handle_tlv_message_data_c() |
|
52 { |
|
53 } |
|
54 |
|
55 //-------------------------------------------------- |
|
56 |
|
57 EAP_FUNC_EXPORT eapol_handle_tlv_message_data_c::eapol_handle_tlv_message_data_c( |
|
58 abs_eap_am_tools_c * const tools) |
|
59 : eap_tlv_message_data_c(tools) |
|
60 , m_am_tools(tools) |
|
61 , m_is_valid(true) |
|
62 { |
|
63 } |
|
64 |
|
65 //------------------------------------------------------------------- |
|
66 |
|
67 /** |
|
68 * This function should increase reference count. |
|
69 */ |
|
70 EAP_FUNC_EXPORT void eapol_handle_tlv_message_data_c::object_increase_reference_count() |
|
71 { |
|
72 } |
|
73 |
|
74 //------------------------------------------------------------------- |
|
75 |
|
76 /** |
|
77 * This function should first decrease reference count |
|
78 * and second return the remaining reference count. |
|
79 * Reference count must not be decreased when it is zero. |
|
80 */ |
|
81 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::object_decrease_reference_count() |
|
82 { |
|
83 return 0; |
|
84 } |
|
85 |
|
86 //-------------------------------------------------- |
|
87 |
|
88 EAP_FUNC_EXPORT bool eapol_handle_tlv_message_data_c::get_is_valid() |
|
89 { |
|
90 return m_is_valid && eap_tlv_message_data_c::get_is_valid(); |
|
91 } |
|
92 |
|
93 //-------------------------------------------------- |
|
94 |
|
95 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
96 const eap_am_network_id_c * const network_id) const |
|
97 { |
|
98 return |
|
99 (3ul * eap_tlv_header_c::get_header_length() // Each attribute have their own header. |
|
100 + network_id->get_source_id()->get_data_length() |
|
101 + network_id->get_destination_id()->get_data_length() |
|
102 + sizeof(network_id->get_type())); |
|
103 } |
|
104 |
|
105 //-------------------------------------------------- |
|
106 |
|
107 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
108 const abs_eap_state_notification_c * const state) const |
|
109 { |
|
110 return |
|
111 (7ul * eap_tlv_header_c::get_header_length()) // Each attribute have their own header. |
|
112 + (get_payload_size(state->get_send_network_id()) |
|
113 + sizeof(u32_t) // eap_protocol_layer_e |
|
114 + sizeof(state->get_protocol()) |
|
115 + eap_expanded_type_c::get_eap_expanded_type_size() |
|
116 + sizeof(state->get_current_state()) |
|
117 + sizeof(u32_t) // bool is_client |
|
118 + sizeof(u32_t) // eap_status_e authentication error |
|
119 ); |
|
120 } |
|
121 |
|
122 //-------------------------------------------------- |
|
123 |
|
124 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
125 const eapol_session_key_c * const session_key) const |
|
126 { |
|
127 return |
|
128 ((5ul * eap_tlv_header_c::get_header_length()) // Each attribute have their own header. |
|
129 + session_key->get_key()->get_data_length() |
|
130 + session_key->get_sequence_number()->get_data_length() |
|
131 + sizeof(u32_t) // const eapol_key_type_e m_key_type |
|
132 + sizeof(session_key->get_key_index()) |
|
133 + sizeof(u32_t) // const bool m_key_tx_bit |
|
134 ); |
|
135 } |
|
136 |
|
137 //-------------------------------------------------- |
|
138 |
|
139 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
140 |
|
141 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
142 network_key_and_index_c * key) const |
|
143 { |
|
144 u32_t size(0ul); |
|
145 |
|
146 if (key != 0) |
|
147 { |
|
148 size += eap_tlv_header_c::get_header_length() |
|
149 + sizeof(key->get_network_key_index()) // Size of Network Key Index |
|
150 + eap_tlv_header_c::get_header_length() |
|
151 + key->get_network_key()->get_data_length() // Size of Network Key |
|
152 ; |
|
153 } |
|
154 |
|
155 return (size); |
|
156 } |
|
157 |
|
158 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
159 |
|
160 //-------------------------------------------------- |
|
161 |
|
162 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
163 |
|
164 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
165 EAP_TEMPLATE_CONST eap_array_c<network_key_and_index_c> * network_keys) const |
|
166 { |
|
167 u32_t size(0ul); |
|
168 |
|
169 for (u32_t ind_network_key = 0ul; ind_network_key < network_keys->get_object_count(); ind_network_key++) |
|
170 { |
|
171 network_key_and_index_c * const key = network_keys->get_object(ind_network_key); |
|
172 if (key != 0) |
|
173 { |
|
174 size += eap_tlv_header_c::get_header_length() // Size of structure header |
|
175 + get_payload_size(key); // Size of Network Key |
|
176 } |
|
177 } // for () |
|
178 |
|
179 return (size); |
|
180 } |
|
181 |
|
182 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
183 |
|
184 //-------------------------------------------------- |
|
185 |
|
186 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
187 |
|
188 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
189 simple_config_credential_c * const credential) const |
|
190 { |
|
191 u32_t size(0ul); |
|
192 |
|
193 if (credential != 0) |
|
194 { |
|
195 size += eap_tlv_header_c::get_header_length() |
|
196 + sizeof(credential->get_network_index()) // Size of Network Index |
|
197 + eap_tlv_header_c::get_header_length() |
|
198 + credential->get_SSID()->get_data_length() // Size of SSID |
|
199 + eap_tlv_header_c::get_header_length() |
|
200 + sizeof(u16_t) // Size of Authentiction type |
|
201 + eap_tlv_header_c::get_header_length() |
|
202 + sizeof(u16_t) // Size of Encryption type |
|
203 ; |
|
204 |
|
205 size += eap_tlv_header_c::get_header_length() // Size of header of Array |
|
206 + get_payload_size(credential->get_network_keys()); |
|
207 |
|
208 size += eap_tlv_header_c::get_header_length() |
|
209 + credential->get_MAC_address()->get_data_length() // Size of MAC Address |
|
210 ; |
|
211 } |
|
212 |
|
213 return (size); |
|
214 } |
|
215 |
|
216 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
217 |
|
218 //-------------------------------------------------- |
|
219 |
|
220 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
221 |
|
222 EAP_FUNC_EXPORT u32_t eapol_handle_tlv_message_data_c::get_payload_size( |
|
223 EAP_TEMPLATE_CONST eap_array_c<simple_config_credential_c> * const credential_array) const |
|
224 { |
|
225 u32_t size(0ul); |
|
226 |
|
227 for (u32_t ind_credential = 0ul; ind_credential < credential_array->get_object_count(); ind_credential++) |
|
228 { |
|
229 simple_config_credential_c * const credential = credential_array->get_object(ind_credential); |
|
230 if (credential != 0) |
|
231 { |
|
232 size += eap_tlv_header_c::get_header_length() // Size of structure header |
|
233 + get_payload_size(credential); |
|
234 } |
|
235 } // for () |
|
236 |
|
237 return (size); |
|
238 } |
|
239 |
|
240 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
241 |
|
242 //-------------------------------------------------- |
|
243 |
|
244 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_structured_parameter_header( |
|
245 const eapol_tlv_message_type_e type, |
|
246 const u32_t length) |
|
247 { |
|
248 EAP_TRACE_DEBUG( |
|
249 m_am_tools, |
|
250 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
251 (EAPL("eapol_handle_tlv_message_data_c::add_structured_parameter_header(): type=%s\n"), |
|
252 get_type_string(type))); |
|
253 |
|
254 return add_message_header( |
|
255 type, |
|
256 length); |
|
257 } |
|
258 |
|
259 //-------------------------------------------------- |
|
260 |
|
261 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
262 const eapol_tlv_message_type_e type, |
|
263 const u32_t integer) |
|
264 { |
|
265 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
266 |
|
267 EAP_TRACE_DEBUG( |
|
268 m_am_tools, |
|
269 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
270 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
271 get_type_string(type))); |
|
272 |
|
273 const u32_t network_order_integer(eap_htonl(integer)); |
|
274 |
|
275 eap_status_e status = add_message_data( |
|
276 type, |
|
277 sizeof(network_order_integer), |
|
278 &network_order_integer); |
|
279 |
|
280 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
281 return EAP_STATUS_RETURN(m_am_tools, status); |
|
282 } |
|
283 |
|
284 //-------------------------------------------------- |
|
285 |
|
286 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
287 const u64_t long_integer) |
|
288 { |
|
289 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
290 |
|
291 EAP_TRACE_DEBUG( |
|
292 m_am_tools, |
|
293 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
294 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
295 get_type_string(eapol_tlv_message_type_u64_t))); |
|
296 |
|
297 const u64_t network_order_long_integer(eap_htonll(long_integer)); |
|
298 |
|
299 eap_status_e status = add_message_data( |
|
300 eapol_tlv_message_type_u64_t, |
|
301 sizeof(network_order_long_integer), |
|
302 &network_order_long_integer); |
|
303 |
|
304 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
305 return EAP_STATUS_RETURN(m_am_tools, status); |
|
306 } |
|
307 |
|
308 //-------------------------------------------------- |
|
309 |
|
310 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
311 const u32_t integer) |
|
312 { |
|
313 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
314 |
|
315 EAP_TRACE_DEBUG( |
|
316 m_am_tools, |
|
317 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
318 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
319 get_type_string(eapol_tlv_message_type_u32_t))); |
|
320 |
|
321 const u32_t network_order_integer(eap_htonl(integer)); |
|
322 |
|
323 eap_status_e status = add_message_data( |
|
324 eapol_tlv_message_type_u32_t, |
|
325 sizeof(network_order_integer), |
|
326 &network_order_integer); |
|
327 |
|
328 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
329 return EAP_STATUS_RETURN(m_am_tools, status); |
|
330 } |
|
331 |
|
332 //-------------------------------------------------- |
|
333 |
|
334 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
335 const u16_t short_integer) |
|
336 { |
|
337 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
338 |
|
339 EAP_TRACE_DEBUG( |
|
340 m_am_tools, |
|
341 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
342 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
343 get_type_string(eapol_tlv_message_type_u16_t))); |
|
344 |
|
345 const u16_t network_order_short_integer(eap_htons(short_integer)); |
|
346 |
|
347 eap_status_e status = add_message_data( |
|
348 eapol_tlv_message_type_u16_t, |
|
349 sizeof(network_order_short_integer), |
|
350 &network_order_short_integer); |
|
351 |
|
352 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
353 return EAP_STATUS_RETURN(m_am_tools, status); |
|
354 } |
|
355 |
|
356 //-------------------------------------------------- |
|
357 |
|
358 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
359 const u8_t byte_integer) |
|
360 { |
|
361 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
362 |
|
363 EAP_TRACE_DEBUG( |
|
364 m_am_tools, |
|
365 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
366 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
367 get_type_string(eapol_tlv_message_type_u8_t))); |
|
368 |
|
369 eap_status_e status = add_message_data( |
|
370 eapol_tlv_message_type_u8_t, |
|
371 sizeof(byte_integer), |
|
372 &byte_integer); |
|
373 |
|
374 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
375 return EAP_STATUS_RETURN(m_am_tools, status); |
|
376 } |
|
377 |
|
378 //-------------------------------------------------- |
|
379 |
|
380 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
381 const bool boolean) |
|
382 { |
|
383 const u32_t value((boolean == false) ? 0u: 1u); |
|
384 |
|
385 return add_parameter_data( |
|
386 eapol_tlv_message_type_boolean, |
|
387 value); |
|
388 } |
|
389 |
|
390 //-------------------------------------------------- |
|
391 |
|
392 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
393 const eap_status_e status) |
|
394 { |
|
395 const u32_t value(static_cast<u32_t>(status)); |
|
396 |
|
397 return add_parameter_data( |
|
398 eapol_tlv_message_type_eap_status, |
|
399 value); |
|
400 } |
|
401 |
|
402 //-------------------------------------------------- |
|
403 |
|
404 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
405 const eapol_tlv_message_type_function_e function) |
|
406 { |
|
407 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
408 |
|
409 EAP_TRACE_DEBUG( |
|
410 m_am_tools, |
|
411 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
412 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s, function=%s\n"), |
|
413 get_type_string(eapol_tlv_message_type_function), |
|
414 get_function_string(function))); |
|
415 |
|
416 if (function < eapol_tlv_message_type_function_none |
|
417 || function >= eapol_tlv_message_type_function_illegal_value) |
|
418 { |
|
419 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
420 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
421 } |
|
422 |
|
423 const u32_t network_order_function(eap_htonl(function)); |
|
424 |
|
425 eap_status_e status = add_message_data( |
|
426 eapol_tlv_message_type_function, |
|
427 sizeof(network_order_function), |
|
428 &network_order_function); |
|
429 |
|
430 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
431 return EAP_STATUS_RETURN(m_am_tools, status); |
|
432 } |
|
433 |
|
434 //-------------------------------------------------- |
|
435 |
|
436 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
437 const eap_variable_data_c * const variable_data) |
|
438 { |
|
439 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
440 |
|
441 EAP_TRACE_DEBUG( |
|
442 m_am_tools, |
|
443 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
444 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
445 get_type_string(eapol_tlv_message_type_variable_data))); |
|
446 |
|
447 if (variable_data == 0) |
|
448 { |
|
449 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
450 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
451 } |
|
452 |
|
453 eap_status_e status(eap_status_process_general_error); |
|
454 |
|
455 if (variable_data->get_is_valid_data() == false) |
|
456 { |
|
457 // Empty variable data. Add just the header. |
|
458 status = add_structured_parameter_header( |
|
459 eapol_tlv_message_type_variable_data, |
|
460 0ul); |
|
461 } |
|
462 else |
|
463 { |
|
464 status = add_message_data( |
|
465 eapol_tlv_message_type_variable_data, |
|
466 variable_data->get_data_length(), |
|
467 variable_data->get_data()); |
|
468 } |
|
469 |
|
470 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
471 return EAP_STATUS_RETURN(m_am_tools, status); |
|
472 } |
|
473 |
|
474 //-------------------------------------------------- |
|
475 |
|
476 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
477 const eap_am_network_id_c * const network_id) |
|
478 { |
|
479 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
480 |
|
481 EAP_TRACE_DEBUG( |
|
482 m_am_tools, |
|
483 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
484 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
485 get_type_string(eapol_tlv_message_type_network_id))); |
|
486 |
|
487 if (network_id == 0 |
|
488 || network_id->get_is_valid() == false) |
|
489 { |
|
490 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
491 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
492 } |
|
493 |
|
494 const u32_t size_of_network_id = get_payload_size(network_id); |
|
495 |
|
496 eap_status_e status = add_structured_parameter_header( |
|
497 eapol_tlv_message_type_network_id, |
|
498 size_of_network_id); |
|
499 if (status != eap_status_ok) |
|
500 { |
|
501 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
502 return EAP_STATUS_RETURN(m_am_tools, status); |
|
503 } |
|
504 |
|
505 status = add_parameter_data( |
|
506 network_id->get_source_id()); |
|
507 if (status != eap_status_ok) |
|
508 { |
|
509 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
510 return EAP_STATUS_RETURN(m_am_tools, status); |
|
511 } |
|
512 |
|
513 status = add_parameter_data( |
|
514 network_id->get_destination_id()); |
|
515 if (status != eap_status_ok) |
|
516 { |
|
517 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
518 return EAP_STATUS_RETURN(m_am_tools, status); |
|
519 } |
|
520 |
|
521 status = add_parameter_data( |
|
522 network_id->get_type()); |
|
523 if (status != eap_status_ok) |
|
524 { |
|
525 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
526 return EAP_STATUS_RETURN(m_am_tools, status); |
|
527 } |
|
528 |
|
529 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
530 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
531 } |
|
532 |
|
533 //-------------------------------------------------- |
|
534 |
|
535 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
536 const eap_buf_chain_wr_c * const packet_buffer) |
|
537 { |
|
538 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
539 |
|
540 EAP_TRACE_DEBUG( |
|
541 m_am_tools, |
|
542 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
543 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
544 get_type_string(eapol_tlv_message_type_variable_data))); |
|
545 |
|
546 if (packet_buffer == 0 |
|
547 || packet_buffer->get_is_valid() == false) |
|
548 { |
|
549 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
550 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
551 } |
|
552 |
|
553 eap_status_e status = add_message_data( |
|
554 eapol_tlv_message_type_variable_data, |
|
555 packet_buffer->get_data_length(), |
|
556 packet_buffer->get_data(packet_buffer->get_data_length())); |
|
557 |
|
558 |
|
559 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
560 return EAP_STATUS_RETURN(m_am_tools, status); |
|
561 } |
|
562 |
|
563 //-------------------------------------------------- |
|
564 |
|
565 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
566 const eapol_session_key_c * const session_key) |
|
567 { |
|
568 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
569 |
|
570 EAP_TRACE_DEBUG( |
|
571 m_am_tools, |
|
572 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
573 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
574 get_type_string(eapol_tlv_message_type_session_key))); |
|
575 |
|
576 if (session_key == 0 |
|
577 || session_key->get_is_valid() == false) |
|
578 { |
|
579 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
580 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
581 } |
|
582 |
|
583 const u32_t size_of_session_key(get_payload_size(session_key)); |
|
584 |
|
585 eap_status_e status = add_structured_parameter_header( |
|
586 eapol_tlv_message_type_session_key, |
|
587 size_of_session_key); |
|
588 if (status != eap_status_ok) |
|
589 { |
|
590 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
591 return EAP_STATUS_RETURN(m_am_tools, status); |
|
592 } |
|
593 |
|
594 status = add_parameter_data( |
|
595 session_key->get_key()); |
|
596 if (status != eap_status_ok) |
|
597 { |
|
598 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
599 return EAP_STATUS_RETURN(m_am_tools, status); |
|
600 } |
|
601 |
|
602 status = add_parameter_data( |
|
603 session_key->get_sequence_number()); |
|
604 if (status != eap_status_ok) |
|
605 { |
|
606 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
607 return EAP_STATUS_RETURN(m_am_tools, status); |
|
608 } |
|
609 |
|
610 status = add_parameter_data( |
|
611 eapol_tlv_message_type_eapol_key_type, |
|
612 static_cast<u32_t>(session_key->get_key_type())); |
|
613 if (status != eap_status_ok) |
|
614 { |
|
615 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
616 return EAP_STATUS_RETURN(m_am_tools, status); |
|
617 } |
|
618 |
|
619 status = add_parameter_data(session_key->get_key_index()); |
|
620 if (status != eap_status_ok) |
|
621 { |
|
622 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
623 return EAP_STATUS_RETURN(m_am_tools, status); |
|
624 } |
|
625 |
|
626 status = add_parameter_data(session_key->get_key_tx_bit()); |
|
627 if (status != eap_status_ok) |
|
628 { |
|
629 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
630 return EAP_STATUS_RETURN(m_am_tools, status); |
|
631 } |
|
632 |
|
633 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
634 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
635 } |
|
636 |
|
637 //-------------------------------------------------- |
|
638 |
|
639 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
640 const abs_eap_state_notification_c * const state) |
|
641 { |
|
642 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
643 |
|
644 EAP_TRACE_DEBUG( |
|
645 m_am_tools, |
|
646 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
647 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
648 get_type_string(eapol_tlv_message_type_eap_state_notification))); |
|
649 |
|
650 if (state == 0) |
|
651 { |
|
652 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
653 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
654 } |
|
655 |
|
656 const u32_t size_of_state(get_payload_size(state)); |
|
657 |
|
658 eap_status_e status = add_structured_parameter_header( |
|
659 eapol_tlv_message_type_eap_state_notification, |
|
660 size_of_state); |
|
661 if (status != eap_status_ok) |
|
662 { |
|
663 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
664 return EAP_STATUS_RETURN(m_am_tools, status); |
|
665 } |
|
666 |
|
667 status = add_parameter_data(state->get_send_network_id()); |
|
668 if (status != eap_status_ok) |
|
669 { |
|
670 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
671 return EAP_STATUS_RETURN(m_am_tools, status); |
|
672 } |
|
673 |
|
674 status = add_parameter_data( |
|
675 eapol_tlv_message_type_eap_protocol_layer, |
|
676 static_cast<u32_t>(state->get_protocol_layer())); |
|
677 if (status != eap_status_ok) |
|
678 { |
|
679 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
680 return EAP_STATUS_RETURN(m_am_tools, status); |
|
681 } |
|
682 |
|
683 status = add_parameter_data(state->get_protocol()); |
|
684 if (status != eap_status_ok) |
|
685 { |
|
686 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
687 return EAP_STATUS_RETURN(m_am_tools, status); |
|
688 } |
|
689 |
|
690 status = add_parameter_data(state->get_eap_type()); |
|
691 if (status != eap_status_ok) |
|
692 { |
|
693 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
694 return EAP_STATUS_RETURN(m_am_tools, status); |
|
695 } |
|
696 |
|
697 status = add_parameter_data(state->get_current_state()); |
|
698 if (status != eap_status_ok) |
|
699 { |
|
700 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
701 return EAP_STATUS_RETURN(m_am_tools, status); |
|
702 } |
|
703 |
|
704 status = add_parameter_data(state->get_is_client()); |
|
705 if (status != eap_status_ok) |
|
706 { |
|
707 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
708 return EAP_STATUS_RETURN(m_am_tools, status); |
|
709 } |
|
710 |
|
711 status = add_parameter_data(state->get_authentication_error()); |
|
712 if (status != eap_status_ok) |
|
713 { |
|
714 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
715 return EAP_STATUS_RETURN(m_am_tools, status); |
|
716 } |
|
717 |
|
718 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
719 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
720 } |
|
721 |
|
722 //-------------------------------------------------- |
|
723 |
|
724 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
725 const eap_type_value_e eap_type) |
|
726 { |
|
727 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
728 |
|
729 EAP_TRACE_DEBUG( |
|
730 m_am_tools, |
|
731 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
732 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
733 get_type_string(eapol_tlv_message_type_eap_type))); |
|
734 |
|
735 void * type_buffer = 0; |
|
736 |
|
737 eap_status_e status = allocate_message_buffer( |
|
738 eapol_tlv_message_type_eap_type, |
|
739 eap_expanded_type_c::get_eap_expanded_type_size(), |
|
740 &type_buffer); |
|
741 if (status != eap_status_ok) |
|
742 { |
|
743 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
744 return EAP_STATUS_RETURN(m_am_tools, status); |
|
745 } |
|
746 |
|
747 status = eap_expanded_type_c::write_type( |
|
748 m_am_tools, |
|
749 0ul, ///< Index is from 0 to n. Index 0 is the first EAP type field after base EAP header. |
|
750 type_buffer, |
|
751 eap_expanded_type_c::get_eap_expanded_type_size(), |
|
752 true, ///< True value writes always Extented Type. |
|
753 eap_type ///< The EAP type to be written. |
|
754 ); |
|
755 |
|
756 EAP_TRACE_DEBUG( |
|
757 m_am_tools, |
|
758 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
759 (EAPL("eap_tlv_message_data_c::add_message_data(): type %2d=0x%08x, length %3d=0x%08x\n"), |
|
760 eapol_tlv_message_type_eap_type, |
|
761 eapol_tlv_message_type_eap_type, |
|
762 eap_expanded_type_c::get_eap_expanded_type_size(), |
|
763 eap_expanded_type_c::get_eap_expanded_type_size())); |
|
764 |
|
765 EAP_TRACE_DATA_DEBUG( |
|
766 m_am_tools, |
|
767 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
768 (EAPL("add_message_data()"), |
|
769 type_buffer, |
|
770 eap_expanded_type_c::get_eap_expanded_type_size())); |
|
771 |
|
772 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
773 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
774 } |
|
775 |
|
776 //-------------------------------------------------- |
|
777 |
|
778 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
779 const eap_general_header_base_c * const packet_data) |
|
780 { |
|
781 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
782 |
|
783 EAP_TRACE_DEBUG( |
|
784 m_am_tools, |
|
785 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
786 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
787 get_type_string(eapol_tlv_message_type_variable_data))); |
|
788 |
|
789 if (packet_data == 0 |
|
790 || packet_data->get_is_valid() == false) |
|
791 { |
|
792 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
793 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
794 } |
|
795 |
|
796 eap_status_e status = add_message_data( |
|
797 eapol_tlv_message_type_variable_data, |
|
798 packet_data->get_header_buffer_length(), |
|
799 packet_data->get_header_buffer(packet_data->get_header_buffer_length())); |
|
800 |
|
801 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
802 return EAP_STATUS_RETURN(m_am_tools, status); |
|
803 } |
|
804 |
|
805 //-------------------------------------------------- |
|
806 |
|
807 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
808 |
|
809 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::add_parameter_data( |
|
810 EAP_TEMPLATE_CONST eap_array_c<simple_config_credential_c> * const credential_array) |
|
811 { |
|
812 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
813 |
|
814 EAP_TRACE_DEBUG( |
|
815 m_am_tools, |
|
816 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
817 (EAPL("eapol_handle_tlv_message_data_c::add_parameter_data(): type=%s\n"), |
|
818 get_type_string(eapol_tlv_message_type_protected_setup_credential))); |
|
819 |
|
820 if (credential_array == 0) |
|
821 { |
|
822 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
823 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
824 } |
|
825 |
|
826 const u32_t size_of_credential_array(get_payload_size(credential_array)); |
|
827 |
|
828 eap_status_e status = add_structured_parameter_header( |
|
829 eapol_tlv_message_type_array, |
|
830 size_of_credential_array); |
|
831 if (status != eap_status_ok) |
|
832 { |
|
833 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
834 return EAP_STATUS_RETURN(m_am_tools, status); |
|
835 } |
|
836 |
|
837 |
|
838 for (u32_t ind_credential = 0ul; ind_credential < credential_array->get_object_count(); ind_credential++) |
|
839 { |
|
840 simple_config_credential_c * const credential = credential_array->get_object(ind_credential); |
|
841 if (credential != 0) |
|
842 { |
|
843 const u32_t size_of_credential(get_payload_size(credential)); |
|
844 |
|
845 eap_status_e status = add_structured_parameter_header( |
|
846 eapol_tlv_message_type_protected_setup_credential, |
|
847 size_of_credential); |
|
848 if (status != eap_status_ok) |
|
849 { |
|
850 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
851 return EAP_STATUS_RETURN(m_am_tools, status); |
|
852 } |
|
853 |
|
854 status = add_parameter_data(credential->get_network_index()); |
|
855 if (status != eap_status_ok) |
|
856 { |
|
857 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
858 return EAP_STATUS_RETURN(m_am_tools, status); |
|
859 } |
|
860 |
|
861 status = add_parameter_data(credential->get_SSID()); |
|
862 if (status != eap_status_ok) |
|
863 { |
|
864 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
865 return EAP_STATUS_RETURN(m_am_tools, status); |
|
866 } |
|
867 |
|
868 status = add_parameter_data(static_cast<u16_t>(credential->get_Authentication_Type())); |
|
869 if (status != eap_status_ok) |
|
870 { |
|
871 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
872 return EAP_STATUS_RETURN(m_am_tools, status); |
|
873 } |
|
874 |
|
875 status = add_parameter_data(static_cast<u16_t>(credential->get_Encryption_Type())); |
|
876 if (status != eap_status_ok) |
|
877 { |
|
878 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
879 return EAP_STATUS_RETURN(m_am_tools, status); |
|
880 } |
|
881 |
|
882 const u32_t size_of_network_key_array(get_payload_size(credential->get_network_keys())); |
|
883 |
|
884 status = add_structured_parameter_header( |
|
885 eapol_tlv_message_type_array, |
|
886 size_of_network_key_array); |
|
887 if (status != eap_status_ok) |
|
888 { |
|
889 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
890 return EAP_STATUS_RETURN(m_am_tools, status); |
|
891 } |
|
892 |
|
893 for (u32_t ind_network_key = 0ul; ind_network_key < credential->get_network_keys()->get_object_count(); ind_network_key++) |
|
894 { |
|
895 network_key_and_index_c * const network_key = credential->get_network_keys()->get_object(ind_network_key); |
|
896 if (network_key != 0) |
|
897 { |
|
898 const u32_t size_of_network_key(get_payload_size(network_key)); |
|
899 |
|
900 status = add_structured_parameter_header( |
|
901 eapol_tlv_message_type_network_key, |
|
902 size_of_network_key); |
|
903 if (status != eap_status_ok) |
|
904 { |
|
905 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
906 return EAP_STATUS_RETURN(m_am_tools, status); |
|
907 } |
|
908 |
|
909 status = add_parameter_data(network_key->get_network_key_index()); |
|
910 if (status != eap_status_ok) |
|
911 { |
|
912 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
913 return EAP_STATUS_RETURN(m_am_tools, status); |
|
914 } |
|
915 |
|
916 status = add_parameter_data(network_key->get_network_key()); |
|
917 if (status != eap_status_ok) |
|
918 { |
|
919 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
920 return EAP_STATUS_RETURN(m_am_tools, status); |
|
921 } |
|
922 } |
|
923 } // for () |
|
924 |
|
925 status = add_parameter_data(credential->get_MAC_address()); |
|
926 if (status != eap_status_ok) |
|
927 { |
|
928 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
929 return EAP_STATUS_RETURN(m_am_tools, status); |
|
930 } |
|
931 } |
|
932 } // for () |
|
933 |
|
934 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
935 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
936 } |
|
937 |
|
938 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
939 |
|
940 //-------------------------------------------------- |
|
941 |
|
942 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
943 const eap_tlv_header_c * const integer_header, |
|
944 u64_t * const value) |
|
945 { |
|
946 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
947 |
|
948 EAP_TRACE_DEBUG( |
|
949 m_am_tools, |
|
950 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
951 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
952 get_type_string(static_cast<eapol_tlv_message_type_e>(integer_header->get_type())))); |
|
953 |
|
954 EAP_TRACE_DATA_DEBUG( |
|
955 m_am_tools, |
|
956 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
957 (EAPL("get_parameter_data(u64_t *)"), |
|
958 integer_header->get_header_buffer(integer_header->get_header_buffer_length()), |
|
959 integer_header->get_header_buffer_length())); |
|
960 |
|
961 if (static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
962 != eapol_tlv_message_type_u64_t) |
|
963 { |
|
964 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
965 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
966 } |
|
967 |
|
968 const u8_t * const data = integer_header->get_value(sizeof(u64_t)); |
|
969 if (data == 0) |
|
970 { |
|
971 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
972 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
973 } |
|
974 |
|
975 *value = |
|
976 eap_read_u64_t_network_order( |
|
977 data, |
|
978 sizeof(u64_t)); |
|
979 |
|
980 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
981 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
982 } |
|
983 |
|
984 //-------------------------------------------------- |
|
985 |
|
986 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
987 const eap_tlv_header_c * const integer_header, |
|
988 u32_t * const value) |
|
989 { |
|
990 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
991 |
|
992 EAP_TRACE_DEBUG( |
|
993 m_am_tools, |
|
994 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
995 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
996 get_type_string(static_cast<eapol_tlv_message_type_e>(integer_header->get_type())))); |
|
997 |
|
998 EAP_TRACE_DATA_DEBUG( |
|
999 m_am_tools, |
|
1000 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1001 (EAPL("get_parameter_data(u32_t *)"), |
|
1002 integer_header->get_header_buffer(integer_header->get_header_buffer_length()), |
|
1003 integer_header->get_header_buffer_length())); |
|
1004 |
|
1005 if (static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1006 != eapol_tlv_message_type_boolean |
|
1007 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1008 != eapol_tlv_message_type_eap_protocol_layer |
|
1009 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1010 != eapol_tlv_message_type_eapol_key_802_11_authentication_mode |
|
1011 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1012 != eapol_tlv_message_type_eapol_key_authentication_type |
|
1013 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1014 != eapol_tlv_message_type_eapol_key_type |
|
1015 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1016 != eapol_tlv_message_type_eapol_tkip_mic_failure_type |
|
1017 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1018 != eapol_tlv_message_type_eapol_wlan_authentication_state |
|
1019 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1020 != eapol_tlv_message_type_error |
|
1021 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1022 != eapol_tlv_message_type_function |
|
1023 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1024 != eapol_tlv_message_type_RSNA_cipher |
|
1025 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1026 != eapol_tlv_message_type_u32_t |
|
1027 && static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1028 != eapol_tlv_message_type_eap_status |
|
1029 ) |
|
1030 { |
|
1031 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1032 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1033 } |
|
1034 |
|
1035 const u8_t * const data = integer_header->get_value(sizeof(u32_t)); |
|
1036 if (data == 0) |
|
1037 { |
|
1038 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1039 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1040 } |
|
1041 |
|
1042 *value = |
|
1043 eap_read_u32_t_network_order( |
|
1044 data, |
|
1045 sizeof(u32_t)); |
|
1046 |
|
1047 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1048 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1049 } |
|
1050 |
|
1051 //-------------------------------------------------- |
|
1052 |
|
1053 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1054 const eap_tlv_header_c * const integer_header, |
|
1055 u16_t * const value) |
|
1056 { |
|
1057 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1058 |
|
1059 EAP_TRACE_DEBUG( |
|
1060 m_am_tools, |
|
1061 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1062 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1063 get_type_string(static_cast<eapol_tlv_message_type_e>(integer_header->get_type())))); |
|
1064 |
|
1065 EAP_TRACE_DATA_DEBUG( |
|
1066 m_am_tools, |
|
1067 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1068 (EAPL("get_parameter_data(u16_t *)"), |
|
1069 integer_header->get_header_buffer(integer_header->get_header_buffer_length()), |
|
1070 integer_header->get_header_buffer_length())); |
|
1071 |
|
1072 if (static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1073 != eapol_tlv_message_type_u16_t) |
|
1074 { |
|
1075 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1076 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1077 } |
|
1078 |
|
1079 const u8_t * const data = integer_header->get_value(sizeof(u16_t)); |
|
1080 if (data == 0) |
|
1081 { |
|
1082 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1083 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1084 } |
|
1085 |
|
1086 *value = |
|
1087 eap_read_u16_t_network_order( |
|
1088 data, |
|
1089 sizeof(u16_t)); |
|
1090 |
|
1091 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1092 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1093 } |
|
1094 |
|
1095 //-------------------------------------------------- |
|
1096 |
|
1097 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1098 const eap_tlv_header_c * const integer_header, |
|
1099 u8_t * const value) |
|
1100 { |
|
1101 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1102 |
|
1103 EAP_TRACE_DEBUG( |
|
1104 m_am_tools, |
|
1105 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1106 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1107 get_type_string(static_cast<eapol_tlv_message_type_e>(integer_header->get_type())))); |
|
1108 |
|
1109 EAP_TRACE_DATA_DEBUG( |
|
1110 m_am_tools, |
|
1111 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1112 (EAPL("get_parameter_data(u8_t *)"), |
|
1113 integer_header->get_header_buffer(integer_header->get_header_buffer_length()), |
|
1114 integer_header->get_header_buffer_length())); |
|
1115 |
|
1116 if (static_cast<eapol_tlv_message_type_e>(integer_header->get_type()) |
|
1117 != eapol_tlv_message_type_u8_t) |
|
1118 { |
|
1119 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1120 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1121 } |
|
1122 |
|
1123 const u8_t * const data = integer_header->get_value(sizeof(u8_t)); |
|
1124 if (data == 0) |
|
1125 { |
|
1126 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1127 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1128 } |
|
1129 |
|
1130 *value = *data; |
|
1131 |
|
1132 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1133 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1134 } |
|
1135 |
|
1136 //-------------------------------------------------- |
|
1137 |
|
1138 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1139 const eap_tlv_header_c * const function_header, |
|
1140 eapol_tlv_message_type_function_e * const function) |
|
1141 { |
|
1142 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1143 |
|
1144 EAP_TRACE_DEBUG( |
|
1145 m_am_tools, |
|
1146 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1147 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1148 get_type_string(static_cast<eapol_tlv_message_type_e>(function_header->get_type())))); |
|
1149 |
|
1150 EAP_TRACE_DATA_DEBUG( |
|
1151 m_am_tools, |
|
1152 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1153 (EAPL("get_parameter_data(eapol_tlv_message_type_function_e *)"), |
|
1154 function_header->get_header_buffer(function_header->get_header_buffer_length()), |
|
1155 function_header->get_header_buffer_length())); |
|
1156 |
|
1157 if (static_cast<eapol_tlv_message_type_e>(function_header->get_type()) |
|
1158 != eapol_tlv_message_type_function) |
|
1159 { |
|
1160 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1161 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1162 } |
|
1163 |
|
1164 u32_t host_order(0ul); |
|
1165 |
|
1166 eap_status_e status = get_parameter_data( |
|
1167 function_header, |
|
1168 &host_order); |
|
1169 if (status != eap_status_ok) |
|
1170 { |
|
1171 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1172 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1173 } |
|
1174 |
|
1175 *function = static_cast<eapol_tlv_message_type_function_e>(host_order); |
|
1176 |
|
1177 EAP_TRACE_DEBUG( |
|
1178 m_am_tools, |
|
1179 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1180 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s, function=%s\n"), |
|
1181 get_type_string(eapol_tlv_message_type_function), |
|
1182 get_function_string(*function) |
|
1183 )); |
|
1184 |
|
1185 if (*function < eapol_tlv_message_type_function_none |
|
1186 || eapol_tlv_message_type_function_illegal_value <= *function) |
|
1187 { |
|
1188 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1189 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1190 } |
|
1191 |
|
1192 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1193 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1194 } |
|
1195 |
|
1196 //-------------------------------------------------- |
|
1197 |
|
1198 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1199 const eap_tlv_header_c * const network_id_header, |
|
1200 eap_am_network_id_c * const new_network_id) |
|
1201 { |
|
1202 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1203 |
|
1204 EAP_TRACE_DEBUG( |
|
1205 m_am_tools, |
|
1206 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1207 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1208 get_type_string(static_cast<eapol_tlv_message_type_e>(network_id_header->get_type())))); |
|
1209 |
|
1210 EAP_TRACE_DATA_DEBUG( |
|
1211 m_am_tools, |
|
1212 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1213 (EAPL("get_parameter_data(eap_am_network_id_c *)"), |
|
1214 network_id_header->get_header_buffer(network_id_header->get_header_buffer_length()), |
|
1215 network_id_header->get_header_buffer_length())); |
|
1216 |
|
1217 if (static_cast<eapol_tlv_message_type_e>(network_id_header->get_type()) |
|
1218 != eapol_tlv_message_type_network_id) |
|
1219 { |
|
1220 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1221 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1222 } |
|
1223 |
|
1224 eapol_handle_tlv_message_data_c network_id_data(m_am_tools); |
|
1225 |
|
1226 if (network_id_data.get_is_valid() == false) |
|
1227 { |
|
1228 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1229 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1230 } |
|
1231 |
|
1232 eap_status_e status = network_id_data.set_message_data( |
|
1233 network_id_header->get_value_length(), |
|
1234 network_id_header->get_value(network_id_header->get_value_length())); |
|
1235 |
|
1236 if (status != eap_status_ok) |
|
1237 { |
|
1238 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1239 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1240 } |
|
1241 |
|
1242 eap_array_c<eap_tlv_header_c> network_id_members(m_am_tools); |
|
1243 |
|
1244 status = network_id_data.parse_message_data(&network_id_members); |
|
1245 |
|
1246 if (status != eap_status_ok) |
|
1247 { |
|
1248 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1249 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1250 } |
|
1251 |
|
1252 |
|
1253 u32_t member_index(0ul); |
|
1254 |
|
1255 eap_variable_data_c source_id( |
|
1256 m_am_tools); |
|
1257 |
|
1258 if (source_id.get_is_valid() == false) |
|
1259 { |
|
1260 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1261 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1262 } |
|
1263 |
|
1264 { |
|
1265 const eap_tlv_header_c * const source_id_header = network_id_members.get_object(member_index); |
|
1266 if (source_id_header == 0) |
|
1267 { |
|
1268 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1269 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1270 } |
|
1271 |
|
1272 status = network_id_data.get_parameter_data(source_id_header, &source_id); |
|
1273 if (status != eap_status_ok) |
|
1274 { |
|
1275 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1276 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1277 } |
|
1278 } |
|
1279 |
|
1280 |
|
1281 ++member_index; |
|
1282 |
|
1283 eap_variable_data_c destination_id( |
|
1284 m_am_tools); |
|
1285 |
|
1286 if (destination_id.get_is_valid() == false) |
|
1287 { |
|
1288 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1289 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1290 } |
|
1291 |
|
1292 { |
|
1293 const eap_tlv_header_c * const destination_id_header = network_id_members.get_object(member_index); |
|
1294 if (destination_id_header == 0) |
|
1295 { |
|
1296 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1297 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1298 } |
|
1299 |
|
1300 status = network_id_data.get_parameter_data(destination_id_header, &destination_id); |
|
1301 if (status != eap_status_ok) |
|
1302 { |
|
1303 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1304 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1305 } |
|
1306 } |
|
1307 |
|
1308 |
|
1309 ++member_index; |
|
1310 |
|
1311 u16_t type_value(0ul); |
|
1312 |
|
1313 { |
|
1314 const eap_tlv_header_c * const type_header = network_id_members.get_object(member_index); |
|
1315 if (type_header == 0) |
|
1316 { |
|
1317 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1318 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1319 } |
|
1320 |
|
1321 status = network_id_data.get_parameter_data(type_header, &type_value); |
|
1322 if (status != eap_status_ok) |
|
1323 { |
|
1324 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1325 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1326 } |
|
1327 } |
|
1328 |
|
1329 |
|
1330 status = new_network_id->set_copy_of_am_network_id( |
|
1331 source_id.get_data(), |
|
1332 source_id.get_data_length(), |
|
1333 destination_id.get_data(), |
|
1334 destination_id.get_data_length(), |
|
1335 type_value); |
|
1336 if (status != eap_status_ok) |
|
1337 { |
|
1338 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1339 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1340 } |
|
1341 |
|
1342 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1343 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1344 } |
|
1345 |
|
1346 //-------------------------------------------------- |
|
1347 |
|
1348 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1349 const eap_tlv_header_c * const variable_data_header, |
|
1350 eap_variable_data_c * const variable_data) |
|
1351 { |
|
1352 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1353 |
|
1354 EAP_TRACE_DEBUG( |
|
1355 m_am_tools, |
|
1356 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1357 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1358 get_type_string(static_cast<eapol_tlv_message_type_e>(variable_data_header->get_type())))); |
|
1359 |
|
1360 EAP_TRACE_DATA_DEBUG( |
|
1361 m_am_tools, |
|
1362 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1363 (EAPL("get_parameter_data(eap_variable_data_c *)"), |
|
1364 variable_data_header->get_header_buffer(variable_data_header->get_header_buffer_length()), |
|
1365 variable_data_header->get_header_buffer_length())); |
|
1366 |
|
1367 if (static_cast<eapol_tlv_message_type_e>(variable_data_header->get_type()) |
|
1368 != eapol_tlv_message_type_variable_data) |
|
1369 { |
|
1370 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1371 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1372 } |
|
1373 |
|
1374 eap_status_e status = variable_data->set_copy_of_buffer( |
|
1375 variable_data_header->get_value(variable_data_header->get_value_length()), |
|
1376 variable_data_header->get_value_length()); |
|
1377 if (status != eap_status_ok) |
|
1378 { |
|
1379 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1380 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1381 } |
|
1382 |
|
1383 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1384 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1385 } |
|
1386 |
|
1387 //-------------------------------------------------- |
|
1388 |
|
1389 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1390 const eap_tlv_header_c * const session_key_header, |
|
1391 eapol_session_key_c * const session_key) |
|
1392 { |
|
1393 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1394 |
|
1395 EAP_TRACE_DEBUG( |
|
1396 m_am_tools, |
|
1397 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1398 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1399 get_type_string(static_cast<eapol_tlv_message_type_e>(session_key_header->get_type())))); |
|
1400 |
|
1401 EAP_TRACE_DATA_DEBUG( |
|
1402 m_am_tools, |
|
1403 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1404 (EAPL("get_parameter_data(eapol_session_key_c *)"), |
|
1405 session_key_header->get_header_buffer(session_key_header->get_header_buffer_length()), |
|
1406 session_key_header->get_header_buffer_length())); |
|
1407 |
|
1408 if (static_cast<eapol_tlv_message_type_e>(session_key_header->get_type()) |
|
1409 != eapol_tlv_message_type_session_key) |
|
1410 { |
|
1411 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1412 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1413 } |
|
1414 |
|
1415 eapol_handle_tlv_message_data_c session_key_data(m_am_tools); |
|
1416 |
|
1417 if (session_key_data.get_is_valid() == false) |
|
1418 { |
|
1419 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1420 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1421 } |
|
1422 |
|
1423 eap_status_e status = session_key_data.set_message_data( |
|
1424 session_key_header->get_value_length(), |
|
1425 session_key_header->get_value(session_key_header->get_value_length())); |
|
1426 |
|
1427 if (status != eap_status_ok) |
|
1428 { |
|
1429 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1430 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1431 } |
|
1432 |
|
1433 eap_array_c<eap_tlv_header_c> session_key_members(m_am_tools); |
|
1434 |
|
1435 status = session_key_data.parse_message_data(&session_key_members); |
|
1436 |
|
1437 if (status != eap_status_ok) |
|
1438 { |
|
1439 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1440 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1441 } |
|
1442 |
|
1443 u32_t member_index(0ul); |
|
1444 |
|
1445 { |
|
1446 const eap_tlv_header_c * const tmp_session_key_header = session_key_members.get_object(member_index); |
|
1447 if (tmp_session_key_header == 0) |
|
1448 { |
|
1449 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1450 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1451 } |
|
1452 |
|
1453 eap_variable_data_c key( |
|
1454 m_am_tools); |
|
1455 |
|
1456 if (key.get_is_valid() == false) |
|
1457 { |
|
1458 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1459 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1460 } |
|
1461 |
|
1462 status = session_key_data.get_parameter_data(tmp_session_key_header, &key); |
|
1463 if (status != eap_status_ok) |
|
1464 { |
|
1465 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1466 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1467 } |
|
1468 |
|
1469 status = session_key->set_key(&key); |
|
1470 if (status != eap_status_ok) |
|
1471 { |
|
1472 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1473 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1474 } |
|
1475 } |
|
1476 |
|
1477 ++member_index; |
|
1478 |
|
1479 { |
|
1480 const eap_tlv_header_c * const sequence_number_header = session_key_members.get_object(member_index); |
|
1481 if (sequence_number_header == 0) |
|
1482 { |
|
1483 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1484 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1485 } |
|
1486 |
|
1487 eap_variable_data_c sequence_number( |
|
1488 m_am_tools); |
|
1489 |
|
1490 if (sequence_number.get_is_valid() == false) |
|
1491 { |
|
1492 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1493 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1494 } |
|
1495 |
|
1496 status = session_key_data.get_parameter_data(sequence_number_header, &sequence_number); |
|
1497 if (status != eap_status_ok) |
|
1498 { |
|
1499 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1500 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1501 } |
|
1502 |
|
1503 status = session_key->set_sequence_number(&sequence_number); |
|
1504 if (status != eap_status_ok) |
|
1505 { |
|
1506 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1507 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1508 } |
|
1509 } |
|
1510 |
|
1511 ++member_index; |
|
1512 |
|
1513 { |
|
1514 const eap_tlv_header_c * const key_type_header = session_key_members.get_object(member_index); |
|
1515 if (key_type_header == 0) |
|
1516 { |
|
1517 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1518 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1519 } |
|
1520 |
|
1521 u32_t value(0ul); |
|
1522 |
|
1523 status = session_key_data.get_parameter_data(key_type_header, &value); |
|
1524 if (status != eap_status_ok) |
|
1525 { |
|
1526 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1527 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1528 } |
|
1529 |
|
1530 session_key->set_key_type(static_cast<eapol_key_type_e>(value)); |
|
1531 } |
|
1532 |
|
1533 ++member_index; |
|
1534 |
|
1535 { |
|
1536 const eap_tlv_header_c * const key_index_header = session_key_members.get_object(member_index); |
|
1537 if (key_index_header == 0) |
|
1538 { |
|
1539 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1540 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1541 } |
|
1542 |
|
1543 u32_t value(0ul); |
|
1544 |
|
1545 status = session_key_data.get_parameter_data(key_index_header, &value); |
|
1546 if (status != eap_status_ok) |
|
1547 { |
|
1548 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1549 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1550 } |
|
1551 |
|
1552 session_key->set_key_index(value); |
|
1553 } |
|
1554 |
|
1555 ++member_index; |
|
1556 |
|
1557 { |
|
1558 const eap_tlv_header_c * const key_tx_bit_header = session_key_members.get_object(member_index); |
|
1559 if (key_tx_bit_header == 0) |
|
1560 { |
|
1561 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1562 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1563 } |
|
1564 |
|
1565 u32_t value(0ul); |
|
1566 |
|
1567 status = session_key_data.get_parameter_data(key_tx_bit_header, &value); |
|
1568 if (status != eap_status_ok) |
|
1569 { |
|
1570 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1571 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1572 } |
|
1573 |
|
1574 session_key->set_key_tx_bit((value == 0) ? false : true); |
|
1575 } |
|
1576 |
|
1577 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1578 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1579 } |
|
1580 |
|
1581 //-------------------------------------------------- |
|
1582 |
|
1583 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1584 const eap_tlv_header_c * const state_header, |
|
1585 eap_state_notification_c * * const state) |
|
1586 |
|
1587 { |
|
1588 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1589 |
|
1590 EAP_TRACE_DEBUG( |
|
1591 m_am_tools, |
|
1592 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1593 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1594 get_type_string(static_cast<eapol_tlv_message_type_e>(state_header->get_type())))); |
|
1595 |
|
1596 EAP_TRACE_DATA_DEBUG( |
|
1597 m_am_tools, |
|
1598 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1599 (EAPL("get_parameter_data(eap_state_notification_c *)"), |
|
1600 state_header->get_header_buffer(state_header->get_header_buffer_length()), |
|
1601 state_header->get_header_buffer_length())); |
|
1602 |
|
1603 if (static_cast<eapol_tlv_message_type_e>(state_header->get_type()) |
|
1604 != eapol_tlv_message_type_eap_state_notification) |
|
1605 { |
|
1606 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1607 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1608 } |
|
1609 |
|
1610 eapol_handle_tlv_message_data_c session_key_data(m_am_tools); |
|
1611 |
|
1612 if (session_key_data.get_is_valid() == false) |
|
1613 { |
|
1614 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1615 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1616 } |
|
1617 |
|
1618 eap_status_e status = session_key_data.set_message_data( |
|
1619 state_header->get_value_length(), |
|
1620 state_header->get_value(state_header->get_value_length())); |
|
1621 |
|
1622 if (status != eap_status_ok) |
|
1623 { |
|
1624 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1625 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1626 } |
|
1627 |
|
1628 eap_array_c<eap_tlv_header_c> session_key_members(m_am_tools); |
|
1629 |
|
1630 status = session_key_data.parse_message_data(&session_key_members); |
|
1631 if (status != eap_status_ok) |
|
1632 { |
|
1633 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1634 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1635 } |
|
1636 |
|
1637 |
|
1638 u32_t member_index(0ul); |
|
1639 |
|
1640 eap_am_network_id_c send_network_id(m_am_tools); |
|
1641 |
|
1642 { |
|
1643 const eap_tlv_header_c * const send_network_id_header = session_key_members.get_object(member_index); |
|
1644 if (send_network_id_header == 0) |
|
1645 { |
|
1646 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1647 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1648 } |
|
1649 |
|
1650 status = get_parameter_data(send_network_id_header, &send_network_id); |
|
1651 if (status != eap_status_ok) |
|
1652 { |
|
1653 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1654 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1655 } |
|
1656 } |
|
1657 |
|
1658 |
|
1659 ++member_index; |
|
1660 |
|
1661 eap_protocol_layer_e protocol_layer(eap_protocol_layer_none); |
|
1662 |
|
1663 { |
|
1664 const eap_tlv_header_c * const protocol_layer_header = session_key_members.get_object(member_index); |
|
1665 if (protocol_layer_header == 0) |
|
1666 { |
|
1667 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1668 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1669 } |
|
1670 |
|
1671 u32_t value(0ul); |
|
1672 |
|
1673 status = session_key_data.get_parameter_data(protocol_layer_header, &value); |
|
1674 if (status != eap_status_ok) |
|
1675 { |
|
1676 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1677 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1678 } |
|
1679 |
|
1680 protocol_layer = static_cast<eap_protocol_layer_e>(value); |
|
1681 } |
|
1682 |
|
1683 |
|
1684 ++member_index; |
|
1685 |
|
1686 u32_t protocol(0ul); |
|
1687 |
|
1688 { |
|
1689 const eap_tlv_header_c * const protocol_header = session_key_members.get_object(member_index); |
|
1690 if (protocol_header == 0) |
|
1691 { |
|
1692 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1693 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1694 } |
|
1695 |
|
1696 status = session_key_data.get_parameter_data(protocol_header, &protocol); |
|
1697 if (status != eap_status_ok) |
|
1698 { |
|
1699 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1700 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1701 } |
|
1702 } |
|
1703 |
|
1704 |
|
1705 ++member_index; |
|
1706 |
|
1707 eap_type_value_e eap_type(eap_type_none); |
|
1708 |
|
1709 { |
|
1710 const eap_tlv_header_c * const eap_type_header = session_key_members.get_object(member_index); |
|
1711 if (eap_type_header == 0) |
|
1712 { |
|
1713 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1714 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1715 } |
|
1716 |
|
1717 status = session_key_data.get_parameter_data(eap_type_header, &eap_type); |
|
1718 if (status != eap_status_ok) |
|
1719 { |
|
1720 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1721 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1722 } |
|
1723 } |
|
1724 |
|
1725 |
|
1726 ++member_index; |
|
1727 |
|
1728 u32_t current_state(0ul); |
|
1729 |
|
1730 { |
|
1731 const eap_tlv_header_c * const current_state_header = session_key_members.get_object(member_index); |
|
1732 if (current_state_header == 0) |
|
1733 { |
|
1734 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1735 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1736 } |
|
1737 |
|
1738 status = session_key_data.get_parameter_data(current_state_header, ¤t_state); |
|
1739 if (status != eap_status_ok) |
|
1740 { |
|
1741 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1742 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1743 } |
|
1744 } |
|
1745 |
|
1746 |
|
1747 ++member_index; |
|
1748 |
|
1749 bool is_client(true); |
|
1750 |
|
1751 { |
|
1752 const eap_tlv_header_c * const is_client_header = session_key_members.get_object(member_index); |
|
1753 if (is_client_header == 0) |
|
1754 { |
|
1755 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1756 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1757 } |
|
1758 |
|
1759 u32_t value(0ul); |
|
1760 |
|
1761 status = session_key_data.get_parameter_data(is_client_header, &value); |
|
1762 if (status != eap_status_ok) |
|
1763 { |
|
1764 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1765 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1766 } |
|
1767 |
|
1768 is_client = (value == 0ul) ? false : true; |
|
1769 } |
|
1770 |
|
1771 |
|
1772 ++member_index; |
|
1773 |
|
1774 eap_status_e authentication_error(eap_status_ok); |
|
1775 |
|
1776 { |
|
1777 const eap_tlv_header_c * const authentication_error_header = session_key_members.get_object(member_index); |
|
1778 if (authentication_error_header == 0) |
|
1779 { |
|
1780 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1781 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1782 } |
|
1783 |
|
1784 u32_t value(0ul); |
|
1785 |
|
1786 status = session_key_data.get_parameter_data(authentication_error_header, &value); |
|
1787 if (status != eap_status_ok) |
|
1788 { |
|
1789 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1790 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1791 } |
|
1792 |
|
1793 authentication_error = static_cast<eap_status_e>(value); |
|
1794 } |
|
1795 |
|
1796 |
|
1797 if (eap_type != eap_type_none) |
|
1798 { |
|
1799 *state = new eap_state_notification_c( |
|
1800 m_am_tools, |
|
1801 &send_network_id, |
|
1802 is_client, |
|
1803 eap_state_notification_eap, |
|
1804 protocol_layer, |
|
1805 eap_type, |
|
1806 current_state, |
|
1807 current_state, |
|
1808 0ul, |
|
1809 false); |
|
1810 } |
|
1811 else |
|
1812 { |
|
1813 |
|
1814 |
|
1815 *state = new eap_state_notification_c( |
|
1816 m_am_tools, |
|
1817 &send_network_id, |
|
1818 is_client, |
|
1819 eap_state_notification_generic, |
|
1820 protocol_layer, |
|
1821 protocol, |
|
1822 current_state, |
|
1823 current_state, |
|
1824 0ul, |
|
1825 false); |
|
1826 } |
|
1827 |
|
1828 if ((*state) == 0) |
|
1829 { |
|
1830 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1831 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1832 } |
|
1833 |
|
1834 (*state)->set_authentication_error(authentication_error); |
|
1835 |
|
1836 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1837 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1838 } |
|
1839 |
|
1840 //-------------------------------------------------- |
|
1841 |
|
1842 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1843 const eap_tlv_header_c * const eap_type_header, |
|
1844 eap_type_value_e * const eap_type) |
|
1845 { |
|
1846 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1847 |
|
1848 EAP_TRACE_DEBUG( |
|
1849 m_am_tools, |
|
1850 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1851 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1852 get_type_string(static_cast<eapol_tlv_message_type_e>(eap_type_header->get_type())))); |
|
1853 |
|
1854 EAP_TRACE_DATA_DEBUG( |
|
1855 m_am_tools, |
|
1856 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1857 (EAPL("get_parameter_data(eap_type_value_e *)"), |
|
1858 eap_type_header->get_header_buffer(eap_type_header->get_header_buffer_length()), |
|
1859 eap_type_header->get_header_buffer_length())); |
|
1860 |
|
1861 if (static_cast<eapol_tlv_message_type_e>(eap_type_header->get_type()) |
|
1862 != eapol_tlv_message_type_eap_type) |
|
1863 { |
|
1864 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1865 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1866 } |
|
1867 |
|
1868 eap_status_e status = eap_expanded_type_c::read_type( |
|
1869 m_am_tools, |
|
1870 0ul, |
|
1871 eap_type_header->get_value(eap_type_header->get_value_length()), |
|
1872 eap_type_header->get_value_length(), |
|
1873 eap_type); |
|
1874 |
|
1875 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1876 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1877 } |
|
1878 |
|
1879 //-------------------------------------------------- |
|
1880 |
|
1881 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
1882 |
|
1883 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1884 const eap_tlv_header_c * const network_key_header, |
|
1885 network_key_and_index_c * const network_key) |
|
1886 { |
|
1887 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1888 |
|
1889 EAP_TRACE_DEBUG( |
|
1890 m_am_tools, |
|
1891 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1892 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
1893 get_type_string(static_cast<eapol_tlv_message_type_e>(network_key_header->get_type())))); |
|
1894 |
|
1895 EAP_TRACE_DATA_DEBUG( |
|
1896 m_am_tools, |
|
1897 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
1898 (EAPL("get_parameter_data(simple_config_credential_c *)"), |
|
1899 network_key_header->get_header_buffer(network_key_header->get_header_buffer_length()), |
|
1900 network_key_header->get_header_buffer_length())); |
|
1901 |
|
1902 if (static_cast<eapol_tlv_message_type_e>(network_key_header->get_type()) |
|
1903 != eapol_tlv_message_type_network_key) |
|
1904 { |
|
1905 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1906 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
1907 } |
|
1908 |
|
1909 eapol_handle_tlv_message_data_c credential_data(m_am_tools); |
|
1910 |
|
1911 if (credential_data.get_is_valid() == false) |
|
1912 { |
|
1913 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1914 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
1915 } |
|
1916 |
|
1917 eap_status_e status = credential_data.set_message_data( |
|
1918 network_key_header->get_value_length(), |
|
1919 network_key_header->get_value(network_key_header->get_value_length())); |
|
1920 |
|
1921 if (status != eap_status_ok) |
|
1922 { |
|
1923 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1924 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1925 } |
|
1926 |
|
1927 eap_array_c<eap_tlv_header_c> credential_members(m_am_tools); |
|
1928 |
|
1929 status = credential_data.parse_message_data(&credential_members); |
|
1930 |
|
1931 if (status != eap_status_ok) |
|
1932 { |
|
1933 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1934 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1935 } |
|
1936 |
|
1937 u32_t member_index(0ul); |
|
1938 |
|
1939 u8_t network_key_index(0ul); |
|
1940 |
|
1941 { |
|
1942 const eap_tlv_header_c * const network_key_index_header = credential_members.get_object(member_index); |
|
1943 if (network_key_index_header == 0) |
|
1944 { |
|
1945 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1946 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1947 } |
|
1948 |
|
1949 status = credential_data.get_parameter_data(network_key_index_header, &network_key_index); |
|
1950 if (status != eap_status_ok) |
|
1951 { |
|
1952 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1953 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1954 } |
|
1955 } |
|
1956 |
|
1957 ++member_index; |
|
1958 |
|
1959 eap_variable_data_c key(m_am_tools); |
|
1960 |
|
1961 { |
|
1962 const eap_tlv_header_c * const key_header = credential_members.get_object(member_index); |
|
1963 if (key_header == 0) |
|
1964 { |
|
1965 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1966 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
1967 } |
|
1968 |
|
1969 status = credential_data.get_parameter_data(key_header, &key); |
|
1970 if (status != eap_status_ok) |
|
1971 { |
|
1972 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1973 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1974 } |
|
1975 } |
|
1976 |
|
1977 ++member_index; |
|
1978 |
|
1979 network_key->set_network_key_index(network_key_index); |
|
1980 |
|
1981 status = network_key->get_network_key()->set_copy_of_buffer(&key); |
|
1982 if (status != eap_status_ok) |
|
1983 { |
|
1984 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1985 return EAP_STATUS_RETURN(m_am_tools, status); |
|
1986 } |
|
1987 |
|
1988 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
1989 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
1990 } |
|
1991 |
|
1992 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
1993 |
|
1994 //-------------------------------------------------- |
|
1995 |
|
1996 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
1997 |
|
1998 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
1999 const eap_tlv_header_c * const network_keys_array_header, |
|
2000 eap_array_c<network_key_and_index_c> * const network_keys_array) |
|
2001 { |
|
2002 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2003 |
|
2004 EAP_TRACE_DEBUG( |
|
2005 m_am_tools, |
|
2006 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2007 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
2008 get_type_string(static_cast<eapol_tlv_message_type_e>(network_keys_array_header->get_type())))); |
|
2009 |
|
2010 EAP_TRACE_DATA_DEBUG( |
|
2011 m_am_tools, |
|
2012 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2013 (EAPL("get_parameter_data(eap_array_c<simple_config_credential_c> *)"), |
|
2014 network_keys_array_header->get_header_buffer(network_keys_array_header->get_header_buffer_length()), |
|
2015 network_keys_array_header->get_header_buffer_length())); |
|
2016 |
|
2017 if (static_cast<eapol_tlv_message_type_e>(network_keys_array_header->get_type()) |
|
2018 != eapol_tlv_message_type_array) |
|
2019 { |
|
2020 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2021 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
2022 } |
|
2023 |
|
2024 eapol_handle_tlv_message_data_c credential_array_data(m_am_tools); |
|
2025 |
|
2026 if (credential_array_data.get_is_valid() == false) |
|
2027 { |
|
2028 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2029 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
2030 } |
|
2031 |
|
2032 eap_status_e status = credential_array_data.set_message_data( |
|
2033 network_keys_array_header->get_value_length(), |
|
2034 network_keys_array_header->get_value(network_keys_array_header->get_value_length())); |
|
2035 |
|
2036 if (status != eap_status_ok) |
|
2037 { |
|
2038 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2039 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2040 } |
|
2041 |
|
2042 eap_array_c<eap_tlv_header_c> credential_array_members(m_am_tools); |
|
2043 |
|
2044 status = credential_array_data.parse_message_data(&credential_array_members); |
|
2045 |
|
2046 if (status != eap_status_ok) |
|
2047 { |
|
2048 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2049 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2050 } |
|
2051 |
|
2052 |
|
2053 for (u32_t ind_member = 0ul; ind_member < credential_array_members.get_object_count(); ind_member++) |
|
2054 { |
|
2055 network_key_and_index_c * const network_key = new network_key_and_index_c(m_am_tools); |
|
2056 |
|
2057 eap_automatic_variable_c<network_key_and_index_c> automatic_network_key(m_am_tools, network_key); |
|
2058 |
|
2059 if (network_key == 0 |
|
2060 || network_key->get_is_valid() == false) |
|
2061 { |
|
2062 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2063 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
2064 } |
|
2065 |
|
2066 { |
|
2067 const eap_tlv_header_c * const simple_config_credential_header = credential_array_members.get_object(ind_member); |
|
2068 if (simple_config_credential_header == 0) |
|
2069 { |
|
2070 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2071 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2072 } |
|
2073 |
|
2074 status = credential_array_data.get_parameter_data(simple_config_credential_header, network_key); |
|
2075 if (status != eap_status_ok) |
|
2076 { |
|
2077 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2078 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2079 } |
|
2080 |
|
2081 automatic_network_key.do_not_free_variable(); |
|
2082 |
|
2083 status = network_keys_array->add_object(network_key, true); |
|
2084 if (status != eap_status_ok) |
|
2085 { |
|
2086 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2087 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2088 } |
|
2089 } |
|
2090 } // for () |
|
2091 |
|
2092 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2093 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
2094 } |
|
2095 |
|
2096 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
2097 |
|
2098 //-------------------------------------------------- |
|
2099 |
|
2100 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
2101 |
|
2102 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
2103 const eap_tlv_header_c * const credential_header, |
|
2104 simple_config_credential_c * const credential) |
|
2105 { |
|
2106 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2107 |
|
2108 EAP_TRACE_DEBUG( |
|
2109 m_am_tools, |
|
2110 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2111 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
2112 get_type_string(static_cast<eapol_tlv_message_type_e>(credential_header->get_type())))); |
|
2113 |
|
2114 EAP_TRACE_DATA_DEBUG( |
|
2115 m_am_tools, |
|
2116 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2117 (EAPL("get_parameter_data(simple_config_credential_c *)"), |
|
2118 credential_header->get_header_buffer(credential_header->get_header_buffer_length()), |
|
2119 credential_header->get_header_buffer_length())); |
|
2120 |
|
2121 if (static_cast<eapol_tlv_message_type_e>(credential_header->get_type()) |
|
2122 != eapol_tlv_message_type_protected_setup_credential) |
|
2123 { |
|
2124 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2125 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
2126 } |
|
2127 |
|
2128 eapol_handle_tlv_message_data_c credential_data(m_am_tools); |
|
2129 |
|
2130 if (credential_data.get_is_valid() == false) |
|
2131 { |
|
2132 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2133 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
2134 } |
|
2135 |
|
2136 eap_status_e status = credential_data.set_message_data( |
|
2137 credential_header->get_value_length(), |
|
2138 credential_header->get_value(credential_header->get_value_length())); |
|
2139 |
|
2140 if (status != eap_status_ok) |
|
2141 { |
|
2142 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2143 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2144 } |
|
2145 |
|
2146 eap_array_c<eap_tlv_header_c> credential_members(m_am_tools); |
|
2147 |
|
2148 status = credential_data.parse_message_data(&credential_members); |
|
2149 |
|
2150 if (status != eap_status_ok) |
|
2151 { |
|
2152 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2153 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2154 } |
|
2155 |
|
2156 u32_t member_index(0ul); |
|
2157 |
|
2158 u8_t network_index(0ul); |
|
2159 |
|
2160 { |
|
2161 const eap_tlv_header_c * const network_index_header = credential_members.get_object(member_index); |
|
2162 if (network_index_header == 0) |
|
2163 { |
|
2164 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2165 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2166 } |
|
2167 |
|
2168 status = credential_data.get_parameter_data(network_index_header, &network_index); |
|
2169 if (status != eap_status_ok) |
|
2170 { |
|
2171 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2172 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2173 } |
|
2174 } |
|
2175 |
|
2176 ++member_index; |
|
2177 |
|
2178 eap_variable_data_c SSID(m_am_tools); |
|
2179 |
|
2180 { |
|
2181 const eap_tlv_header_c * const SSID_header = credential_members.get_object(member_index); |
|
2182 if (SSID_header == 0) |
|
2183 { |
|
2184 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2185 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2186 } |
|
2187 |
|
2188 status = credential_data.get_parameter_data(SSID_header, &SSID); |
|
2189 if (status != eap_status_ok) |
|
2190 { |
|
2191 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2192 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2193 } |
|
2194 } |
|
2195 |
|
2196 ++member_index; |
|
2197 |
|
2198 simple_config_Authentication_Type_e authentication_type(simple_config_Authentication_Type_None); |
|
2199 |
|
2200 { |
|
2201 const eap_tlv_header_c * const authentication_type_header = credential_members.get_object(member_index); |
|
2202 if (authentication_type_header == 0) |
|
2203 { |
|
2204 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2205 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2206 } |
|
2207 |
|
2208 u16_t integer_value(0ul); |
|
2209 |
|
2210 status = credential_data.get_parameter_data(authentication_type_header, &integer_value); |
|
2211 if (status != eap_status_ok) |
|
2212 { |
|
2213 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2214 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2215 } |
|
2216 |
|
2217 authentication_type = static_cast<simple_config_Authentication_Type_e>(integer_value); |
|
2218 } |
|
2219 |
|
2220 ++member_index; |
|
2221 |
|
2222 simple_config_Encryption_Type_e encryption_type(simple_config_Encryption_Type_None); |
|
2223 |
|
2224 { |
|
2225 const eap_tlv_header_c * const encryption_type_header = credential_members.get_object(member_index); |
|
2226 if (encryption_type_header == 0) |
|
2227 { |
|
2228 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2229 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2230 } |
|
2231 |
|
2232 u16_t integer_value(0ul); |
|
2233 |
|
2234 status = credential_data.get_parameter_data(encryption_type_header, &integer_value); |
|
2235 if (status != eap_status_ok) |
|
2236 { |
|
2237 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2238 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2239 } |
|
2240 |
|
2241 encryption_type = static_cast<simple_config_Encryption_Type_e>(integer_value); |
|
2242 } |
|
2243 |
|
2244 ++member_index; |
|
2245 |
|
2246 eap_array_c<network_key_and_index_c> network_keys_array(m_am_tools); |
|
2247 |
|
2248 { |
|
2249 const eap_tlv_header_c * const network_keys_array_header = credential_members.get_object(member_index); |
|
2250 if (network_keys_array_header == 0) |
|
2251 { |
|
2252 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2253 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2254 } |
|
2255 |
|
2256 status = credential_data.get_parameter_data(network_keys_array_header, &network_keys_array); |
|
2257 if (status != eap_status_ok) |
|
2258 { |
|
2259 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2260 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2261 } |
|
2262 } |
|
2263 |
|
2264 ++member_index; |
|
2265 |
|
2266 eap_variable_data_c MAC_address(m_am_tools); |
|
2267 |
|
2268 { |
|
2269 const eap_tlv_header_c * const MAC_address_header = credential_members.get_object(member_index); |
|
2270 if (MAC_address_header == 0) |
|
2271 { |
|
2272 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2273 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2274 } |
|
2275 |
|
2276 status = credential_data.get_parameter_data(MAC_address_header, &MAC_address); |
|
2277 if (status != eap_status_ok) |
|
2278 { |
|
2279 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2280 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2281 } |
|
2282 } |
|
2283 |
|
2284 ++member_index; |
|
2285 |
|
2286 |
|
2287 credential->set_network_index(network_index); |
|
2288 |
|
2289 status = credential->get_SSID()->set_copy_of_buffer(&SSID); |
|
2290 if (status != eap_status_ok) |
|
2291 { |
|
2292 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2293 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2294 } |
|
2295 |
|
2296 credential->set_Authentication_Type(authentication_type); |
|
2297 |
|
2298 credential->set_Encryption_Type(encryption_type); |
|
2299 |
|
2300 status = copy( |
|
2301 &network_keys_array, |
|
2302 credential->get_network_keys(), |
|
2303 m_am_tools, |
|
2304 false); |
|
2305 if (status != eap_status_ok) |
|
2306 { |
|
2307 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2308 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2309 } |
|
2310 |
|
2311 status = credential->get_MAC_address()->set_copy_of_buffer(&MAC_address); |
|
2312 if (status != eap_status_ok) |
|
2313 { |
|
2314 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2315 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2316 } |
|
2317 |
|
2318 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2319 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
2320 } |
|
2321 |
|
2322 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
2323 |
|
2324 //-------------------------------------------------- |
|
2325 |
|
2326 #if defined(USE_EAP_SIMPLE_CONFIG) |
|
2327 |
|
2328 EAP_FUNC_EXPORT eap_status_e eapol_handle_tlv_message_data_c::get_parameter_data( |
|
2329 const eap_tlv_header_c * const credential_array_header, |
|
2330 eap_array_c<simple_config_credential_c> * const credential_array) |
|
2331 { |
|
2332 EAP_TRACE_BEGIN(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2333 |
|
2334 EAP_TRACE_DEBUG( |
|
2335 m_am_tools, |
|
2336 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2337 (EAPL("eapol_handle_tlv_message_data_c::get_parameter_data(): type=%s\n"), |
|
2338 get_type_string(static_cast<eapol_tlv_message_type_e>(credential_array_header->get_type())))); |
|
2339 |
|
2340 EAP_TRACE_DATA_DEBUG( |
|
2341 m_am_tools, |
|
2342 EAP_TRACE_FLAGS_MESSAGE_DATA, |
|
2343 (EAPL("get_parameter_data(eap_array_c<simple_config_credential_c> *)"), |
|
2344 credential_array_header->get_header_buffer(credential_array_header->get_header_buffer_length()), |
|
2345 credential_array_header->get_header_buffer_length())); |
|
2346 |
|
2347 if (static_cast<eapol_tlv_message_type_e>(credential_array_header->get_type()) |
|
2348 != eapol_tlv_message_type_array) |
|
2349 { |
|
2350 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2351 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_payload); |
|
2352 } |
|
2353 |
|
2354 eapol_handle_tlv_message_data_c credential_array_data(m_am_tools); |
|
2355 |
|
2356 if (credential_array_data.get_is_valid() == false) |
|
2357 { |
|
2358 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2359 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
2360 } |
|
2361 |
|
2362 eap_status_e status = credential_array_data.set_message_data( |
|
2363 credential_array_header->get_value_length(), |
|
2364 credential_array_header->get_value(credential_array_header->get_value_length())); |
|
2365 |
|
2366 if (status != eap_status_ok) |
|
2367 { |
|
2368 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2369 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2370 } |
|
2371 |
|
2372 eap_array_c<eap_tlv_header_c> credential_array_members(m_am_tools); |
|
2373 |
|
2374 status = credential_array_data.parse_message_data(&credential_array_members); |
|
2375 |
|
2376 if (status != eap_status_ok) |
|
2377 { |
|
2378 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2379 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2380 } |
|
2381 |
|
2382 |
|
2383 for (u32_t ind_member = 0ul; ind_member < credential_array_members.get_object_count(); ind_member++) |
|
2384 { |
|
2385 simple_config_credential_c * const simple_config_credential = new simple_config_credential_c(m_am_tools); |
|
2386 |
|
2387 eap_automatic_variable_c<simple_config_credential_c> automatic_simple_config_credential(m_am_tools, simple_config_credential); |
|
2388 |
|
2389 if (simple_config_credential == 0 |
|
2390 || simple_config_credential->get_is_valid() == false) |
|
2391 { |
|
2392 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2393 return EAP_STATUS_RETURN(m_am_tools, eap_status_allocation_error); |
|
2394 } |
|
2395 |
|
2396 { |
|
2397 const eap_tlv_header_c * const simple_config_credential_header = credential_array_members.get_object(ind_member); |
|
2398 if (simple_config_credential_header == 0) |
|
2399 { |
|
2400 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2401 return EAP_STATUS_RETURN(m_am_tools, eap_status_illegal_parameter); |
|
2402 } |
|
2403 |
|
2404 status = credential_array_data.get_parameter_data(simple_config_credential_header, simple_config_credential); |
|
2405 if (status != eap_status_ok) |
|
2406 { |
|
2407 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2408 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2409 } |
|
2410 |
|
2411 automatic_simple_config_credential.do_not_free_variable(); |
|
2412 |
|
2413 status = credential_array->add_object(simple_config_credential, true); |
|
2414 if (status != eap_status_ok) |
|
2415 { |
|
2416 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2417 return EAP_STATUS_RETURN(m_am_tools, status); |
|
2418 } |
|
2419 } |
|
2420 } // for () |
|
2421 |
|
2422 EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT); |
|
2423 return EAP_STATUS_RETURN(m_am_tools, eap_status_ok); |
|
2424 } |
|
2425 |
|
2426 #endif // #if defined(USE_EAP_SIMPLE_CONFIG) |
|
2427 |
|
2428 //-------------------------------------------------- |
|
2429 |
|
2430 EAP_FUNC_EXPORT eap_const_string eapol_handle_tlv_message_data_c::get_type_string(const eapol_tlv_message_type_e type) |
|
2431 { |
|
2432 #if defined(USE_EAP_TRACE_STRINGS) |
|
2433 EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_none) |
|
2434 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_array) |
|
2435 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_boolean) |
|
2436 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eap_protocol_layer) |
|
2437 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eap_state_notification) |
|
2438 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eap_type) |
|
2439 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eapol_key_802_11_authentication_mode) |
|
2440 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eapol_key_authentication_type) |
|
2441 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eapol_key_type) |
|
2442 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eapol_tkip_mic_failure_type) |
|
2443 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_eapol_wlan_authentication_state) |
|
2444 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_error) |
|
2445 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_function) |
|
2446 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_network_id) |
|
2447 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_RSNA_cipher) |
|
2448 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_session_key) |
|
2449 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_u8_t) |
|
2450 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_u16_t) |
|
2451 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_u32_t) |
|
2452 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_u64_t) |
|
2453 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_variable_data) |
|
2454 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_network_key) |
|
2455 else EAP_IF_RETURN_STRING(type, eapol_tlv_message_type_protected_setup_credential) |
|
2456 else |
|
2457 #endif // #if defined(USE_EAP_TRACE_STRINGS) |
|
2458 { |
|
2459 EAP_UNREFERENCED_PARAMETER(type); |
|
2460 |
|
2461 return EAPL("Unknown EAPOL-TLV message type"); |
|
2462 } |
|
2463 } |
|
2464 |
|
2465 //-------------------------------------------------- |
|
2466 |
|
2467 EAP_FUNC_EXPORT eap_const_string eapol_handle_tlv_message_data_c::get_function_string(const eapol_tlv_message_type_function_e function) |
|
2468 { |
|
2469 #if defined(USE_EAP_TRACE_STRINGS) |
|
2470 EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_none) |
|
2471 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_check_pmksa_cache) |
|
2472 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_start_authentication) |
|
2473 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_complete_association) |
|
2474 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_disassociation) |
|
2475 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_start_preauthentication) |
|
2476 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_start_reassociation) |
|
2477 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_complete_reassociation) |
|
2478 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_start_WPXM_reassociation) |
|
2479 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_complete_WPXM_reassociation) |
|
2480 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_packet_process) |
|
2481 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_tkip_mic_failure) |
|
2482 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_eap_acknowledge) |
|
2483 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_update_header_offset) |
|
2484 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_complete_check_pmksa_cache) |
|
2485 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_packet_send) |
|
2486 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_associate) |
|
2487 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_disassociate) |
|
2488 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_packet_data_session_key) |
|
2489 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_state_notification) |
|
2490 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_reassociate) |
|
2491 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_update_wlan_database_reference_values) |
|
2492 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_complete_start_WPXM_reassociation) |
|
2493 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_new_protected_setup_credentials) |
|
2494 else EAP_IF_RETURN_STRING(function, eapol_tlv_message_type_function_illegal_value) |
|
2495 else |
|
2496 #endif // #if defined(USE_EAP_TRACE_STRINGS) |
|
2497 { |
|
2498 EAP_UNREFERENCED_PARAMETER(function); |
|
2499 |
|
2500 return EAPL("Unknown EAPOL-TLV message function"); |
|
2501 } |
|
2502 } |
|
2503 |
|
2504 //-------------------------------------------------- |
|
2505 |
|
2506 // End. |