Annotation of embedaddon/strongswan/src/libimcv/imv/imv_agent.h, revision 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>