Beispiel #1
0
void
wps_led_deinit()
{
	/* Show WPS OK or ERROR led before deinit */
	wps_led_update();
	WpsSleepMs(500); /* 500 ms */

	wps_hal_led_deinit();
}
Beispiel #2
0
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;
}
Beispiel #3
0
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;
}
Beispiel #4
0
void
WpsSleep(uint32 seconds)
{
	WpsSleepMs(1000*seconds);
}
Beispiel #5
0
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;
}