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

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>