1 /*
2  * Minimal example IMC for TNC testing
3  * Copyright (c) 2014, Jouni Malinen <j@w1.fi>
4  *
5  * This software may be distributed under the terms of the BSD license.
6  * See README for more details.
7  */
8 
9 #include "includes.h"
10 
11 #include "common.h"
12 #include "common/tnc.h"
13 
14 static int initialized = 0;
15 static TNC_IMCID my_id = -1;
16 
TNC_IMC_Initialize(TNC_IMCID imcID,TNC_Version minVersion,TNC_Version maxVersion,TNC_Version * pOutActualVersion)17 TNC_Result TNC_IMC_Initialize(
18 	/*in*/ TNC_IMCID imcID,
19 	/*in*/ TNC_Version minVersion,
20 	/*in*/ TNC_Version maxVersion,
21 	/*out*/ TNC_Version *pOutActualVersion)
22 {
23 	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);
24 
25 	if (initialized)
26 		return TNC_RESULT_ALREADY_INITIALIZED;
27 
28 	if (minVersion < TNC_IFIMC_VERSION_1 ||
29 	    maxVersion > TNC_IFIMC_VERSION_1)
30 		return TNC_RESULT_NO_COMMON_VERSION;
31 
32 	if (!pOutActualVersion)
33 		return TNC_RESULT_INVALID_PARAMETER;
34 	*pOutActualVersion = TNC_IFIMC_VERSION_1;
35 	my_id = imcID;
36 
37 	initialized = 1;
38 
39 	return TNC_RESULT_SUCCESS;
40 }
41 
42 
TNC_IMC_BeginHandshake(TNC_IMCID imcID,TNC_ConnectionID connectionID)43 TNC_Result TNC_IMC_BeginHandshake(
44 	/*in*/ TNC_IMCID imcID,
45 	/*in*/ TNC_ConnectionID connectionID)
46 {
47 	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);
48 
49 	if (!initialized)
50 		return TNC_RESULT_NOT_INITIALIZED;
51 
52 	if (imcID != my_id)
53 		return TNC_RESULT_INVALID_PARAMETER;
54 
55 	return TNC_RESULT_SUCCESS;
56 }
57 
58 
TNC_IMC_ProvideBindFunction(TNC_IMCID imcID,TNC_TNCC_BindFunctionPointer bindFunction)59 TNC_Result TNC_IMC_ProvideBindFunction(
60 	/*in*/ TNC_IMCID imcID,
61 	/*in*/ TNC_TNCC_BindFunctionPointer bindFunction)
62 {
63 	wpa_printf(MSG_INFO, "IMC(hostap) %s", __func__);
64 
65 	if (!initialized)
66 		return TNC_RESULT_NOT_INITIALIZED;
67 
68 	if (imcID != my_id)
69 		return TNC_RESULT_INVALID_PARAMETER;
70 
71 	return TNC_RESULT_SUCCESS;
72 }
73