Lines Matching refs:data

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