From 7810a45a9c5344acc00eec256db67eb84d5c8b60 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Tue, 30 Aug 2016 10:09:48 -0500 Subject: [PATCH] eap-wsc: Rework state logic a bit Mostly so repetitive code is not required --- src/eap-wsc.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/src/eap-wsc.c b/src/eap-wsc.c index 63aaed3c..0baeff96 100644 --- a/src/eap-wsc.c +++ b/src/eap-wsc.c @@ -355,12 +355,12 @@ static void eap_wsc_handle_request(struct eap_state *eap, if (flags != 0) return; - switch (wsc->state) { - case STATE_EXPECT_START: - if (op != WSC_OP_START) + switch (op) { + case WSC_OP_START: + if (len != 2) return; - if (len != 2) + if (wsc->state != STATE_EXPECT_START) return; pdu = wsc_build_m1(wsc->m1, &pdu_len); @@ -369,14 +369,28 @@ static void eap_wsc_handle_request(struct eap_state *eap, eap_wsc_send_response(eap, pdu, pdu_len); wsc->state = STATE_EXPECT_M2; + return; + case WSC_OP_NACK: + /* TODO: Process NACK and respond with NACK */ + return; + case WSC_OP_ACK: + case WSC_OP_DONE: + /* Should never receive these as Enrollee */ + return; + case WSC_OP_FRAG_ACK: + /* TODO: Handle fragmentation */ + return; + case WSC_OP_MSG: break; + } + + if (len <= 2) + return; + + switch (wsc->state) { + case STATE_EXPECT_START: + return; case STATE_EXPECT_M2: - if (op != WSC_OP_MSG) - return; - - if (len <= 2) - return; - eap_wsc_handle_m2(eap, pkt + 2, len - 2); break; case STATE_EXPECT_M4: