moved tnc_imv plugin to libtnccs thanks to recommendation callback function
[strongswan.git] / src / libtnccs / tnc / tnccs / tnccs.h
1 /*
2 * Copyright (C) 2010-2013 Andreas Steffen
3 * HSR Hochschule fuer Technik Rapperswil
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or (at your
8 * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
9 *
10 * This program is distributed in the hope that it will be useful, but
11 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
12 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13 * for more details.
14 */
15
16 /**
17 * @defgroup tnccs tnccs
18 * @ingroup tnc
19 *
20 * @defgroup tnccst tnccs
21 * @{ @ingroup tnccs
22 */
23
24 #ifndef TNCCS_H_
25 #define TNCCS_H_
26
27 typedef struct tnccs_t tnccs_t;
28 typedef enum tnccs_type_t tnccs_type_t;
29 typedef enum tnc_ift_type_t tnc_ift_type_t;
30
31 #include <tncif.h>
32 #include <tncifimc.h>
33 #include <tncifimv.h>
34
35 #include <library.h>
36 #include <plugins/plugin.h>
37
38 #include <tls.h>
39
40 /**
41 * Callback function to communicate action recommendation and evaluation result
42 * generated by TNC server
43 *
44 * @param rec TNC Action Recommendation
45 * @param eval TNC Evaluation Result
46 * @return TRUE to terminate TNCCS connection, FALSE to keep it
47 */
48 typedef bool (*tnccs_cb_t)(TNC_IMV_Action_Recommendation rec,
49 TNC_IMV_Evaluation_Result eval);
50
51 /**
52 * Type of TNC Client/Server protocol
53 */
54 enum tnccs_type_t {
55 TNCCS_UNKNOWN,
56 TNCCS_1_1,
57 TNCCS_SOH,
58 TNCCS_2_0,
59 TNCCS_DYNAMIC
60 };
61
62 /**
63 * Type of TNC Transport protocol
64 */
65 enum tnc_ift_type_t {
66 TNC_IFT_UNKNOWN,
67 TNC_IFT_EAP_1_0,
68 TNC_IFT_EAP_1_1,
69 TNC_IFT_EAP_2_0,
70 TNC_IFT_TLS_1_0,
71 TNC_IFT_TLS_2_0
72 };
73
74 /**
75 * enum names for tnccs_type_t.
76 */
77 extern enum_name_t *tnccs_type_names;
78
79 /**
80 * TNCCS public interface
81 */
82 struct tnccs_t {
83
84 /**
85 * Implements tls_t
86 */
87 tls_t tls;
88
89 /**
90 * Get underlying TNC IF-T transport protocol
91 *
92 * @return TNC IF-T transport protocol
93 */
94 tnc_ift_type_t (*get_transport)(tnccs_t *this);
95
96 /**
97 * Set underlying TNC IF-T transport protocol
98 *
99 * @param transport TNC IF-T transport protocol
100 */
101 void (*set_transport)(tnccs_t *this, tnc_ift_type_t transport);
102
103 /**
104 * Get type of TNC Client authentication
105 *
106 * @return TNC Client authentication type
107 */
108 u_int32_t (*get_auth_type)(tnccs_t *this);
109
110 /**
111 * Set type of TNC Client authentication
112 *
113 * @param auth_type TNC Client authentication type
114 */
115 void (*set_auth_type)(tnccs_t *this, u_int32_t auth_type);
116
117 };
118
119 /**
120 * Constructor definition for a pluggable TNCCS protocol implementation.
121 *
122 * @param is_server TRUE if TNC Server, FALSE if TNC Client
123 * @param server Server identity
124 * @param peer Client identity
125 * @param transport Underlying TNC IF-T transport protocol used
126 * @param cb Callback function if TNC Server, NULL if TNC Client
127 * @return implementation of the tnccs_t interface
128 */
129 typedef tnccs_t *(*tnccs_constructor_t)(bool is_server,
130 identification_t *server,
131 identification_t *peer,
132 tnc_ift_type_t transport,
133 tnccs_cb_t cb);
134
135 /**
136 * Callback function adding a message to a TNCCS batch
137 *
138 * @param imc_id ID of IMC or TNC_IMCID_ANY
139 * @param imc_id ID of IMV or TNC_IMVID_ANY
140 * @param msg_flags message flags
141 * @param msg message to be added
142 * @param msg_len message length
143 * @param msg_vid message vendor ID
144 * @param msg_subtype message subtype
145 * @return return code
146 */
147 typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss,
148 TNC_IMCID imc_id,
149 TNC_IMVID imv_id,
150 TNC_UInt32 msg_flags,
151 TNC_BufferReference msg,
152 TNC_UInt32 msg_len,
153 TNC_VendorID msg_vid,
154 TNC_MessageSubtype msg_subtype);
155
156 #endif /** TNCCS_H_ @}*/