void wps_led_deinit() { /* Show WPS OK or ERROR led before deinit */ wps_led_update(); WpsSleepMs(500); /* 500 ms */ wps_hal_led_deinit(); }
static int wpssta_success(wpssta_wksp_t *sta_wksp) { int retVal = WPS_RESULT_SUCCESS, ssidlen = 0; char ssid[SIZE_SSID_LENGTH]; WpsEnrCred *credential = (WpsEnrCred *)malloc(sizeof(WpsEnrCred)); /* Remove WPS IE before doing 4-way handshake */ rem_wps_ie(NULL, 0, VNDR_IE_PRBREQ_FLAG); if (b_wps_version2) rem_wps_ie(NULL, 0, VNDR_IE_ASSOCREQ_FLAG); if (credential == NULL) { TUTRACE((TUTRACE_INFO, "memory allocate failed!!\n")); wpsenr_osl_proc_states(WPS_MSG_ERR); /* FAILED */ return WPS_RESULT_FAILURE; } TUTRACE((TUTRACE_INFO, "WPS Protocol SUCCEEDED !!\n")); /* get credentials */ if (sta_wksp->mode == WPSM_STA_BUILTINREG) { if (sta_wksp->configap == true) wps_get_reg_M8credentials(credential); else wps_get_reg_M7credentials(credential); } else { wps_get_ssid(ssid, &ssidlen); wps_get_credentials(credential, ssid, ssidlen); } wpssta_print_credential(credential, "Current AP Credential"); wpsenr_osl_proc_states(WPS_OK); /* SUCCEEDED */ if (wpsenr_osl_set_wsec(sta_wksp->ess_id, credential, (sta_wksp->mode == WPSM_STA_BUILTINREG) ? EModeRegistrar : EModeClient)) retVal = WPS_RESULT_SUCCESS_RESTART; else retVal = WPS_RESULT_SUCCESS; /* free memory */ free(credential); /* WPS 2.0. test 5.1.1, leave network before do_wpa_psk with new security */ WpsSleepMs(500); leave_network(); return retVal; }
void ap_eap_sm_Failure(int deauthFlag) { apEapState->state = EAP_FAILURED; ap_eap_sm_sendFailure(); /* Sleep a short time to avoid de-auth send before EAP-Failure */ if (deauthFlag) WpsSleepMs(10); cleanUpSta(0, deauthFlag); return; }
void WpsSleep(uint32 seconds) { WpsSleepMs(1000*seconds); }
static int wpssta_process(wpssta_wksp_t *sta_wksp, char *buf, int len, int msgtype) { uint32 buf_len = len; char *sendBuf; int last_recv_msg; char msg_type; unsigned long now = get_current_time(); uint32 retVal; int state; #ifdef _TUDEBUGTRACE char *assoc_state_name[] = {"init", "scanning", "findingap", "associating", "associated"}; #endif /* associate state checking */ if (assoc_state != WPS_ASSOC_STATE_ASSOCIATED) { TUTRACE((TUTRACE_INFO, "In assoc state %s, ignore this packet\n", assoc_state_name[(int)assoc_state])); return WPS_CONT; /* ingore it */ } /* eapol packet validation */ retVal = wpsenr_eapol_validate(buf, &buf_len); if (retVal == WPS_SUCCESS) { /* Show receive message */ msg_type = wps_get_msg_type(buf, buf_len); TUTRACE((TUTRACE_INFO, "Receive EAP-Request%s\n", wps_get_msg_string((int)msg_type))); /* process ap message */ retVal = wps_process_ap_msg(buf, buf_len); /* check return code to do more things */ if (retVal == WPS_SEND_MSG_CONT || retVal == WPS_SEND_MSG_SUCCESS || retVal == WPS_SEND_MSG_ERROR || retVal == WPS_ERR_ENROLLMENT_PINFAIL) { len = wps_get_eapol_msg_to_send(&sendBuf, now); if (sendBuf) { msg_type = wps_get_msg_type(sendBuf, len); send_eapol_packet(sendBuf, len); TUTRACE((TUTRACE_INFO, "Send EAP-Response%s\n", wps_get_msg_string((int)msg_type))); } if (retVal == WPS_ERR_ENROLLMENT_PINFAIL) retVal = WPS_SEND_MSG_ERROR; /* * sleep a short time for driver to send last WPS DONE message, * otherwise doing leave_network before do_wpa_psk in * enroll_device() may cause driver to drop the last WPS DONE * message if it not transmit. */ if (retVal == WPS_SEND_MSG_SUCCESS || retVal == WPS_SEND_MSG_ERROR) WpsSleepMs(2); /* over-write retVal */ if (retVal == WPS_SEND_MSG_SUCCESS) retVal = WPS_SUCCESS; else if (retVal == WPS_SEND_MSG_ERROR) retVal = REG_FAILURE; else retVal = WPS_CONT; } else if (retVal == EAP_FAILURE) { /* we received an eap failure from registrar */ /* * check if this is coming AFTER the protocol passed the M2 * mark or is the end of the discovery after M2D. */ last_recv_msg = wps_get_recv_msg_id(); TUTRACE((TUTRACE_INFO, "Received eap failure, last recv msg EAP-Request%s\n", wps_get_msg_string(last_recv_msg))); if (last_recv_msg > WPS_ID_MESSAGE_M2D) { retVal = REG_FAILURE; } else { /* do join again */ wpssta_do_join(true); retVal = WPS_CONT; } } /* special case, without doing wps_eap_create_pkt */ else if (retVal == WPS_SEND_MSG_IDRESP) { len = wps_get_msg_to_send(&sendBuf, now); if (sendBuf) { send_eapol_packet(sendBuf, len); TUTRACE((TUTRACE_INFO, "Send EAP-Response / Identity\n")); } retVal = WPS_CONT; } /* Re-transmit last sent message, because we receive a re-transmit packet */ else if (retVal == WPS_SEND_RET_MSG_CONT) { len = wps_get_retrans_msg_to_send(&sendBuf, now, &msg_type); if (sendBuf) { state = wps_get_eap_state(); if (state == EAPOL_START_SENT) TUTRACE((TUTRACE_INFO, "Re-Send EAPOL-Start\n")); else if (state == EAP_IDENTITY_SENT) TUTRACE((TUTRACE_INFO, "Re-Send EAP-Response / Identity\n")); else TUTRACE((TUTRACE_INFO, "Re-Send EAP-Response%s\n", wps_get_msg_string((int)msg_type))); send_eapol_packet(sendBuf, len); } retVal = WPS_CONT; } else if (retVal == WPS_SEND_FRAG_CONT || retVal == WPS_SEND_FRAG_ACK_CONT) { len = wps_get_frag_msg_to_send(&sendBuf, now); if (sendBuf) { if (retVal == WPS_SEND_FRAG_CONT) TUTRACE((TUTRACE_INFO, "Send EAP-Response(FRAG)\n")); else TUTRACE((TUTRACE_INFO, "Send EAP-Response(FRAG_ACK)\n")); send_eapol_packet(sendBuf, len); } retVal = WPS_CONT; } /* * exits with either success, failure or indication that * the registrar has not started its end of the protocol yet. */ if (retVal == WPS_SUCCESS) { retVal = wpssta_success(sta_wksp); } else if (retVal != WPS_CONT) { TUTRACE((TUTRACE_INFO, "WPS Protocol FAILED. CODE = %x\n", retVal)); wpsenr_osl_proc_states(WPS_MSG_ERR); /* FAILED */ retVal = WPS_RESULT_FAILURE; } /* Failure, restore original wireless settings */ if (retVal != WPS_RESULT_SUCCESS_RESTART && retVal != WPS_RESULT_SUCCESS && retVal != WPS_CONT) { wpsenr_osl_restore_wsec(); } } return retVal; }