/*
 * Minimal example IMC for TNC testing
 * Copyright (c) 2014, Jouni Malinen <j@w1.fi>
 *
 * This software may be distributed under the terms of the BSD license.
 * See README for more details.
 */

#include "includes.h"

#include "common.h"
#include "common/tnc.h"

static int initialized = 0;
static TNC_IMCID my_id = -1;

TNC_Result TNC_IMC_Initialize(
	/*in*/ TNC_IMCID imcID,
	/*in*/ TNC_Version minVersion,
	/*in*/ TNC_Version maxVersion,
	/*out*/ TNC_Version *pOutActualVersion)
{
	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);

	if (initialized)
		return TNC_RESULT_ALREADY_INITIALIZED;

	if (minVersion < TNC_IFIMC_VERSION_1 ||
	    maxVersion > TNC_IFIMC_VERSION_1)
		return TNC_RESULT_NO_COMMON_VERSION;

	if (!pOutActualVersion)
		return TNC_RESULT_INVALID_PARAMETER;
	*pOutActualVersion = TNC_IFIMC_VERSION_1;
	my_id = imcID;

	initialized = 1;

	return TNC_RESULT_SUCCESS;
}


TNC_Result TNC_IMC_BeginHandshake(
	/*in*/ TNC_IMCID imcID,
	/*in*/ TNC_ConnectionID connectionID)
{
	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);

	if (!initialized)
		return TNC_RESULT_NOT_INITIALIZED;

	if (imcID != my_id)
		return TNC_RESULT_INVALID_PARAMETER;

	return TNC_RESULT_SUCCESS;
}


TNC_Result TNC_IMC_ProvideBindFunction(
	/*in*/ TNC_IMCID imcID,
	/*in*/ TNC_TNCC_BindFunctionPointer bindFunction)
{
	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);

	if (!initialized)
		return TNC_RESULT_NOT_INITIALIZED;

	if (imcID != my_id)
		return TNC_RESULT_INVALID_PARAMETER;

	return TNC_RESULT_SUCCESS;
}