Lines Matching refs:data
63 static void eap_tnc_set_state(struct eap_tnc_data *data, in eap_tnc_set_state() argument
67 eap_tnc_state_txt(data->state), in eap_tnc_set_state()
69 data->state = new_state; in eap_tnc_set_state()
75 struct eap_tnc_data *data; in eap_tnc_init() local
77 data = os_zalloc(sizeof(*data)); in eap_tnc_init()
78 if (data == NULL) in eap_tnc_init()
80 eap_tnc_set_state(data, START); in eap_tnc_init()
81 data->tncs = tncs_init(); in eap_tnc_init()
82 if (data->tncs == NULL) { in eap_tnc_init()
83 os_free(data); in eap_tnc_init()
87 data->fragment_size = sm->cfg->fragment_size > 100 ? in eap_tnc_init()
90 return data; in eap_tnc_init()
96 struct eap_tnc_data *data = priv; in eap_tnc_reset() local
97 wpabuf_free(data->in_buf); in eap_tnc_reset()
98 wpabuf_free(data->out_buf); in eap_tnc_reset()
99 tncs_deinit(data->tncs); in eap_tnc_reset()
100 os_free(data); in eap_tnc_reset()
105 struct eap_tnc_data *data, u8 id) in eap_tnc_build_start() argument
114 eap_tnc_set_state(data, FAIL); in eap_tnc_build_start()
120 eap_tnc_set_state(data, CONTINUE); in eap_tnc_build_start()
127 struct eap_tnc_data *data) in eap_tnc_build() argument
136 imv_len = tncs_total_send_len(data->tncs); in eap_tnc_build()
138 start_buf = tncs_if_tnccs_start(data->tncs); in eap_tnc_build()
161 rpos = tncs_copy_send_buf(data->tncs, rpos1); in eap_tnc_build()
175 struct eap_tnc_data *data) in eap_tnc_build_recommendation() argument
177 switch (data->recommendation) { in eap_tnc_build_recommendation()
179 eap_tnc_set_state(data, DONE); in eap_tnc_build_recommendation()
182 eap_tnc_set_state(data, FAIL); in eap_tnc_build_recommendation()
186 eap_tnc_set_state(data, FAIL); in eap_tnc_build_recommendation()
189 eap_tnc_set_state(data, DONE); in eap_tnc_build_recommendation()
196 return eap_tnc_build(sm, data); in eap_tnc_build_recommendation()
218 static struct wpabuf * eap_tnc_build_msg(struct eap_tnc_data *data, u8 id) in eap_tnc_build_msg() argument
227 send_len = wpabuf_len(data->out_buf) - data->out_used; in eap_tnc_build_msg()
228 if (1 + send_len > data->fragment_size) { in eap_tnc_build_msg()
229 send_len = data->fragment_size - 1; in eap_tnc_build_msg()
231 if (data->out_used == 0) { in eap_tnc_build_msg()
247 wpabuf_put_be32(req, wpabuf_len(data->out_buf)); in eap_tnc_build_msg()
249 wpabuf_put_data(req, wpabuf_head_u8(data->out_buf) + data->out_used, in eap_tnc_build_msg()
251 data->out_used += send_len; in eap_tnc_build_msg()
253 if (data->out_used == wpabuf_len(data->out_buf)) { in eap_tnc_build_msg()
257 wpabuf_free(data->out_buf); in eap_tnc_build_msg()
258 data->out_buf = NULL; in eap_tnc_build_msg()
259 data->out_used = 0; in eap_tnc_build_msg()
260 if (data->was_fail) in eap_tnc_build_msg()
261 eap_tnc_set_state(data, FAIL); in eap_tnc_build_msg()
262 else if (data->was_done) in eap_tnc_build_msg()
263 eap_tnc_set_state(data, DONE); in eap_tnc_build_msg()
267 (unsigned long) wpabuf_len(data->out_buf) - in eap_tnc_build_msg()
268 data->out_used); in eap_tnc_build_msg()
269 if (data->state == FAIL) in eap_tnc_build_msg()
270 data->was_fail = 1; in eap_tnc_build_msg()
271 else if (data->state == DONE) in eap_tnc_build_msg()
272 data->was_done = 1; in eap_tnc_build_msg()
273 eap_tnc_set_state(data, WAIT_FRAG_ACK); in eap_tnc_build_msg()
282 struct eap_tnc_data *data = priv; in eap_tnc_buildReq() local
284 switch (data->state) { in eap_tnc_buildReq()
286 tncs_init_connection(data->tncs); in eap_tnc_buildReq()
287 return eap_tnc_build_start(sm, data, id); in eap_tnc_buildReq()
289 if (data->out_buf == NULL) { in eap_tnc_buildReq()
290 data->out_buf = eap_tnc_build(sm, data); in eap_tnc_buildReq()
291 if (data->out_buf == NULL) { in eap_tnc_buildReq()
296 data->out_used = 0; in eap_tnc_buildReq()
298 return eap_tnc_build_msg(data, id); in eap_tnc_buildReq()
300 if (data->out_buf == NULL) { in eap_tnc_buildReq()
301 data->out_buf = eap_tnc_build_recommendation(sm, data); in eap_tnc_buildReq()
302 if (data->out_buf == NULL) { in eap_tnc_buildReq()
307 data->out_used = 0; in eap_tnc_buildReq()
309 return eap_tnc_build_msg(data, id); in eap_tnc_buildReq()
311 return eap_tnc_build_msg(data, id); in eap_tnc_buildReq()
326 struct eap_tnc_data *data = priv; in eap_tnc_check() local
337 if (len == 0 && data->state != WAIT_FRAG_ACK) { in eap_tnc_check()
360 static void tncs_process(struct eap_tnc_data *data, struct wpabuf *inbuf) in tncs_process() argument
364 res = tncs_process_if_tnccs(data->tncs, wpabuf_head(inbuf), in tncs_process()
369 eap_tnc_set_state(data, RECOMMENDATION); in tncs_process()
370 data->recommendation = ALLOW; in tncs_process()
374 eap_tnc_set_state(data, RECOMMENDATION); in tncs_process()
375 data->recommendation = NO_RECOMMENDATION; in tncs_process()
379 eap_tnc_set_state(data, RECOMMENDATION); in tncs_process()
380 data->recommendation = ISOLATE; in tncs_process()
384 eap_tnc_set_state(data, RECOMMENDATION); in tncs_process()
385 data->recommendation = NO_ACCESS; in tncs_process()
389 eap_tnc_set_state(data, FAIL); in tncs_process()
397 static int eap_tnc_process_cont(struct eap_tnc_data *data, in eap_tnc_process_cont() argument
401 if (len > wpabuf_tailroom(data->in_buf)) { in eap_tnc_process_cont()
403 eap_tnc_set_state(data, FAIL); in eap_tnc_process_cont()
407 wpabuf_put_data(data->in_buf, buf, len); in eap_tnc_process_cont()
410 (unsigned long) wpabuf_tailroom(data->in_buf)); in eap_tnc_process_cont()
416 static int eap_tnc_process_fragment(struct eap_tnc_data *data, in eap_tnc_process_fragment() argument
421 if (data->in_buf == NULL && !(flags & EAP_TNC_FLAGS_LENGTH_INCLUDED)) { in eap_tnc_process_fragment()
427 if (data->in_buf == NULL) { in eap_tnc_process_fragment()
429 data->in_buf = wpabuf_alloc(message_length); in eap_tnc_process_fragment()
430 if (data->in_buf == NULL) { in eap_tnc_process_fragment()
435 wpabuf_put_data(data->in_buf, buf, len); in eap_tnc_process_fragment()
439 (unsigned long) wpabuf_tailroom(data->in_buf)); in eap_tnc_process_fragment()
449 struct eap_tnc_data *data = priv; in eap_tnc_process() local
462 if (len == 1 && (data->state == DONE || data->state == FAIL)) { in eap_tnc_process()
477 eap_tnc_set_state(data, FAIL); in eap_tnc_process()
488 eap_tnc_set_state(data, FAIL); in eap_tnc_process()
495 if (data->state == WAIT_FRAG_ACK) { in eap_tnc_process()
499 eap_tnc_set_state(data, FAIL); in eap_tnc_process()
503 eap_tnc_set_state(data, CONTINUE); in eap_tnc_process()
507 if (data->in_buf && eap_tnc_process_cont(data, pos, end - pos) < 0) { in eap_tnc_process()
508 eap_tnc_set_state(data, FAIL); in eap_tnc_process()
513 if (eap_tnc_process_fragment(data, flags, message_length, in eap_tnc_process()
515 eap_tnc_set_state(data, FAIL); in eap_tnc_process()
517 eap_tnc_set_state(data, FRAG_ACK); in eap_tnc_process()
519 } else if (data->state == FRAG_ACK) { in eap_tnc_process()
521 eap_tnc_set_state(data, CONTINUE); in eap_tnc_process()
524 if (data->in_buf == NULL) { in eap_tnc_process()
527 data->in_buf = &tmpbuf; in eap_tnc_process()
531 wpabuf_head(data->in_buf), wpabuf_len(data->in_buf)); in eap_tnc_process()
532 tncs_process(data, data->in_buf); in eap_tnc_process()
534 if (data->in_buf != &tmpbuf) in eap_tnc_process()
535 wpabuf_free(data->in_buf); in eap_tnc_process()
536 data->in_buf = NULL; in eap_tnc_process()
542 struct eap_tnc_data *data = priv; in eap_tnc_isDone() local
543 return data->state == DONE || data->state == FAIL; in eap_tnc_isDone()
549 struct eap_tnc_data *data = priv; in eap_tnc_isSuccess() local
550 return data->state == DONE; in eap_tnc_isSuccess()