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>