Exemplo n.º 1
0
void renewPasscode(Packet* up, CommunicationTask* ct) {
	newPasscode();
	passcode(up, ct);
}
EAP_FUNC_EXPORT void eap_am_type_securid_symbian_c::DlgComplete( TInt aStatus )  
{
	EAP_TRACE_DEBUG(
		m_am_tools, 
		TRACE_FLAGS_DEFAULT,
		(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): m_index_type=%d, m_index=%d, m_tunneling_type=0xfe%06x%08x\n"),
		m_index_type,
		m_index,
		m_tunneling_type.get_vendor_id(),
		m_tunneling_type.get_vendor_type()));

	if (aStatus == KErrCancel)
	{
		delete m_message_buf;
		m_message_buf = NULL;
		get_am_partner()->finish_unsuccessful_authentication(true);
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
		return;
	}
	
	if (aStatus != KErrNone)
	{
		delete m_message_buf;
		m_message_buf = NULL;
		// Something is very wrong...

		EAP_TRACE_ERROR(
			m_am_tools,
			TRACE_FLAGS_DEFAULT,
			(EAPL("ERROR: EAP - SecurID notifier or dialog\n")));

		send_error_notification(eap_status_authentication_failure);

		get_am_partner()->finish_unsuccessful_authentication(false);

		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
		return;
	}

	switch (m_state)
	{
	case EHandlingIdentityQuery:
		{
			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eap_am_type_securid_symbian_c::DlgComplete(): EHandlingIdentityQuery\n")));

			eap_variable_data_c identity(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iUsername"),
				m_dialog_data_ptr->iUsername.Ptr(),
				m_dialog_data_ptr->iUsername.Size()));

			eap_status_e status = identity.set_copy_of_buffer(
				m_dialog_data_ptr->iUsername.Ptr(),
				m_dialog_data_ptr->iUsername.Size());
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			eap_variable_data_c identity_utf8(m_am_tools);
			status = m_am_tools->convert_unicode_to_utf8(identity_utf8, identity);
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): identity_utf8"),
				identity_utf8.get_data(),
				identity_utf8.get_data_length()));

			status = get_am_partner()->complete_eap_identity_query(&identity_utf8);
		}
		break;

	case EHandlingPasscodeQuery:
		{
			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eap_am_type_securid_symbian_c::DlgComplete(): EHandlingPasscodeQuery\n")));

			eap_variable_data_c passcode(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iPassword"),
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size()));

			eap_status_e status = passcode.set_copy_of_buffer(
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size());
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			eap_variable_data_c passcode_utf8(m_am_tools);
			status = m_am_tools->convert_unicode_to_utf8(passcode_utf8, passcode);
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): passcode_utf8"),
				passcode_utf8.get_data(),
				passcode_utf8.get_data_length()));

			status = get_am_partner()->client_securid_complete_passcode_query(&passcode_utf8);
		}
		break;

	case EHandlingPincodeQuery:
		{
			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eap_am_type_securid_symbian_c::DlgComplete(): EHandlingPincodeQuery\n")));

			eap_variable_data_c identity(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iUsername"),
				m_dialog_data_ptr->iUsername.Ptr(),
				m_dialog_data_ptr->iUsername.Size()));

			eap_status_e status = identity.set_copy_of_buffer(
				m_dialog_data_ptr->iUsername.Ptr(),
				m_dialog_data_ptr->iUsername.Size());
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			eap_variable_data_c passcode(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iPassword"),
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size()));

			status = passcode.set_copy_of_buffer(
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size());
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}


			eap_variable_data_c identity_utf8(m_am_tools);
			status = m_am_tools->convert_unicode_to_utf8(identity_utf8, identity);
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): identity_utf8"),
				identity_utf8.get_data(),
				identity_utf8.get_data_length()));

			eap_variable_data_c passcode_utf8(m_am_tools);
			status = m_am_tools->convert_unicode_to_utf8(passcode_utf8, passcode);
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): passcode_utf8"),
				passcode_utf8.get_data(),
				passcode_utf8.get_data_length()));

			status = get_am_partner()->client_securid_complete_pincode_query(&passcode_utf8, &passcode_utf8);
		}
		break;

	case EHandlingGTCQuery:
		{
			EAP_TRACE_DEBUG(m_am_tools, TRACE_FLAGS_DEFAULT, (EAPL("eap_am_type_securid_symbian_c::DlgComplete(): EHandlingGTCQuery\n")));

			delete m_message_buf;
			m_message_buf = NULL;

			eap_variable_data_c identity(m_am_tools);
			eap_variable_data_c identity_utf8(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iUsername"),
				m_dialog_data_ptr->iUsername.Ptr(),
				m_dialog_data_ptr->iUsername.Size()));

			if (m_dialog_data_ptr->iUsername.Size() > 0)
			{
				eap_status_e status = identity.set_copy_of_buffer(
					m_dialog_data_ptr->iUsername.Ptr(),
					m_dialog_data_ptr->iUsername.Size());
				if (status != eap_status_ok)
				{
					EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
					(void)EAP_STATUS_RETURN(m_am_tools, status);
					return;
				}

				status = m_am_tools->convert_unicode_to_utf8(identity_utf8, identity);
				if (status != eap_status_ok)
				{
					EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
					(void)EAP_STATUS_RETURN(m_am_tools, status);
					return;
				}

				EAP_TRACE_DATA_DEBUG(
					m_am_tools,
					TRACE_FLAGS_DEFAULT,
					(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): identity_utf8"),
					identity_utf8.get_data(),
					identity_utf8.get_data_length()));
			}

			eap_variable_data_c passcode(m_am_tools);

			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): iPassword"),
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size()));

			eap_status_e status = passcode.set_copy_of_buffer(
				m_dialog_data_ptr->iPassword.Ptr(),
				m_dialog_data_ptr->iPassword.Size());
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}

			eap_variable_data_c passcode_utf8(m_am_tools);
			status = m_am_tools->convert_unicode_to_utf8(passcode_utf8, passcode);
			if (status != eap_status_ok)
			{
				EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
				(void)EAP_STATUS_RETURN(m_am_tools, status);
				return;
			}
			
			EAP_TRACE_DATA_DEBUG(
				m_am_tools,
				TRACE_FLAGS_DEFAULT,
				(EAPL("eap_am_type_securid_symbian_c::DlgComplete(): passcode_utf8"),
				passcode_utf8.get_data(),
				passcode_utf8.get_data_length()));

			// User must have entered some password and pressed OK.
			// Treat this as a full authentication and update the Last Auth Time.
			status = store_authentication_time();
			if (status != eap_status_ok)
			{
				// Storing failed. Don't care.
				EAP_TRACE_ERROR(m_am_tools, 
					TRACE_FLAGS_DEFAULT, (
					EAPL("eap_am_type_securid_symbian_c:Storing Last Full Authentication time failed, status=%d, but continuing\n"), 
					status));

				status = eap_status_ok;
			}			

			status = get_am_partner()->client_gtc_complete_user_input_query(&identity_utf8, &passcode_utf8);
		}
		break;

	default:
		EAP_TRACE_ERROR(
			m_am_tools,
			TRACE_FLAGS_DEFAULT,
			(EAPL("ERROR: EAP - SecurID illegal state in DlgComplete().\n")));
		EAP_TRACE_END(m_am_tools, TRACE_FLAGS_DEFAULT);	
		return;		
	}
}