Annotation of embedaddon/strongswan/src/libimcv/imv/imv_agent.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2011-2014 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: *
18: * @defgroup imv_agent_t imv_agent
19: * @{ @ingroup libimcv_imv
20: */
21:
22: #ifndef IMV_AGENT_H_
23: #define IMV_AGENT_H_
24:
25: #include "imv_state.h"
26: #include "imv_database.h"
27: #include "pa_tnc/pa_tnc_msg.h"
28:
29: #include <tncifimv.h>
30: #include <pen/pen.h>
31: #include <collections/linked_list.h>
32:
33: #include <library.h>
34:
35: typedef struct imv_agent_t imv_agent_t;
36:
37: /**
38: * Core functions of an Integrity Measurement Verifier (IMV)
39: */
40: struct imv_agent_t {
41:
42: /**
43: * Ask a TNCS to retry an Integrity Check Handshake
44: *
45: * @param imv_id IMV ID assigned by TNCS
46: * @param connection_id network connection ID assigned by TNCS
47: * @param reason IMV retry reason
48: * @return TNC result code
49: */
50: TNC_Result (*request_handshake_retry)(TNC_IMVID imv_id,
51: TNC_ConnectionID connection_id,
52: TNC_RetryReason reason);
53:
54: /**
55: * Call when an IMV-IMC message is to be sent
56: *
57: * @param imv_id IMV ID assigned by TNCS
58: * @param connection_id network connection ID assigned by TNCS
59: * @param msg message to send
60: * @param msg_len message length in bytes
61: * @param msg_type message type
62: * @return TNC result code
63: */
64: TNC_Result (*send_message)(TNC_IMVID imv_id,
65: TNC_ConnectionID connection_id,
66: TNC_BufferReference msg,
67: TNC_UInt32 msg_len,
68: TNC_MessageType msg_type);
69:
70: /**
71: * Call when an IMV-IMC message is to be sent with long message types
72: *
73: * @param imv_id IMV ID assigned by TNCS
74: * @param connection_id network connection ID assigned by TNCS
75: * @param msg_flags message flags
76: * @param msg message to send
77: * @param msg_len message length in bytes
78: * @param msg_vid message vendor ID
79: * @param msg_subtype message subtype
80: * @param dst_imc_id destination IMC ID
81: * @return TNC result code
82: */
83: TNC_Result (*send_message_long)(TNC_IMVID imv_id,
84: TNC_ConnectionID connection_id,
85: TNC_UInt32 msg_flags,
86: TNC_BufferReference msg,
87: TNC_UInt32 msg_len,
88: TNC_VendorID msg_vid,
89: TNC_MessageSubtype msg_subtype,
90: TNC_UInt32 dst_imc_id);
91:
92: /**
93: * Bind TNCS functions
94: *
95: * @param bind_function function offered by the TNCS
96: * @return TNC result code
97: */
98: TNC_Result (*bind_functions)(imv_agent_t *this,
99: TNC_TNCS_BindFunctionPointer bind_function);
100:
101: /**
102: * Create the IMV state for a TNCCS connection instance
103: *
104: * @param state internal IMV state instance
105: * @return TNC result code
106: */
107: TNC_Result (*create_state)(imv_agent_t *this, imv_state_t *state);
108:
109: /**
110: * Delete the IMV state for a TNCCS connection instance
111: *
112: * @param connection_id network connection ID assigned by TNCS
113: * @return TNC result code
114: */
115: TNC_Result (*delete_state)(imv_agent_t *this,
116: TNC_ConnectionID connection_id);
117:
118: /**
119: * Change the current state of a TNCCS connection
120: *
121: * @param connection_id network connection ID assigned by TNCS
122: * @param new_state new state of TNCCS connection
123: * @param state_p internal IMV state instance [optional argument]
124: * @return TNC result code
125: */
126: TNC_Result (*change_state)(imv_agent_t *this,
127: TNC_ConnectionID connection_id,
128: TNC_ConnectionState new_state,
129: imv_state_t **state_p);
130:
131: /**
132: * Get the IMV state for a TNCCS connection instance
133: *
134: * @param connection_id network connection ID assigned by TNCS
135: * @param state internal IMV state instance
136: * @return TRUE if the state was found
137: */
138: bool (*get_state)(imv_agent_t *this,
139: TNC_ConnectionID connection_id, imv_state_t **state);
140:
141: /**
142: * Get IMV name
143: *
144: * return IMV name
145: */
146: const char* (*get_name)(imv_agent_t *this);
147:
148: /**
149: * Get base IMV ID
150: *
151: * return base IMV ID
152: */
153: TNC_IMVID (*get_id)(imv_agent_t *this);
154:
155: /**
156: * Reserve additional IMV IDs from TNCS
157: *
158: * @param count number of additional IMV IDs to be assigned
159: * @return TNC result code
160: */
161: TNC_Result (*reserve_additional_ids)(imv_agent_t *this, int count);
162:
163: /**
164: * Return the number of additional IMV IDs assigned by the TNCS
165: *
166: * @return number of additional IMV IDs
167: */
168: int (*count_additional_ids)(imv_agent_t *this);
169:
170: /**
171: * Create an enumerator for the additional IMV IDs
172: */
173: enumerator_t* (*create_id_enumerator)(imv_agent_t *this);
174:
175: /**
176: * Create a preferred languages enumerator
177: *
178: * @param state of TNCCS connection
179: */
180: enumerator_t* (*create_language_enumerator)(imv_agent_t *this,
181: imv_state_t *state);
182:
183: /**
184: * Deliver IMV Action Recommendation and IMV Evaluation Result to the TNCS
185: *
186: * @param state state bound to a connection ID
187: * @return TNC result code
188: */
189: TNC_Result (*provide_recommendation)(imv_agent_t *this, imv_state_t* state);
190:
191: /**
192: * Add an item to the list of non-fatal unsupported PA-TNC attribute types
193: */
194: void (*add_non_fatal_attr_type)(imv_agent_t *this, pen_type_t type);
195:
196: /**
197: * Get a list of non-fatal unsupported PA-TNC attribute types
198: */
199: linked_list_t* (*get_non_fatal_attr_types)(imv_agent_t *this);
200:
201: /**
202: * Destroys an imv_agent_t object
203: */
204: void (*destroy)(imv_agent_t *this);
205: };
206:
207: /**
208: * Create an imv_agent_t object
209: *
210: * @param name name of the IMV
211: * @param supported_types list of message types registered by the IMV
212: * @param type_count number of registered message types
213: * @param id ID of the IMV as assigned by the TNCS
214: * @param actual_version actual version of the IF-IMV API
215: *
216: */
217: imv_agent_t *imv_agent_create(const char *name,
218: pen_type_t *supported_types, uint32_t type_count,
219: TNC_IMVID id, TNC_Version *actual_version);
220:
221: #endif /** IMV_AGENT_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>