Annotation of embedaddon/strongswan/src/libimcv/plugins/imc_scanner/imc_scanner_state.c, 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: #include "imc_scanner_state.h"
                     17: 
                     18: #include <tncif_names.h>
                     19: 
                     20: #include <utils/debug.h>
                     21: 
                     22: typedef struct private_imc_scanner_state_t private_imc_scanner_state_t;
                     23: 
                     24: /**
                     25:  * Private data of an imc_scanner_state_t object.
                     26:  */
                     27: struct private_imc_scanner_state_t {
                     28: 
                     29:        /**
                     30:         * Public members of imc_scanner_state_t
                     31:         */
                     32:        imc_scanner_state_t public;
                     33: 
                     34:        /**
                     35:         * TNCCS connection ID
                     36:         */
                     37:        TNC_ConnectionID connection_id;
                     38: 
                     39:        /**
                     40:         * TNCCS connection state
                     41:         */
                     42:        TNC_ConnectionState state;
                     43: 
                     44:        /**
                     45:         * Assessment/Evaluation Result
                     46:         */
                     47:        TNC_IMV_Evaluation_Result result;
                     48: 
                     49:        /**
                     50:         * Does the TNCCS connection support long message types?
                     51:         */
                     52:        bool has_long;
                     53: 
                     54:        /**
                     55:         * Does the TNCCS connection support exclusive delivery?
                     56:         */
                     57:        bool has_excl;
                     58: 
                     59:        /**
                     60:         * Maximum PA-TNC message size for this TNCCS connection
                     61:         */
                     62:        uint32_t max_msg_len;
                     63: 
                     64:        /**
                     65:         * PA-TNC attribute segmentation contracts associated with TNCCS connection
                     66:         */
                     67:        seg_contract_manager_t *contracts;
                     68: };
                     69: 
                     70: METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
                     71:        private_imc_scanner_state_t *this)
                     72: {
                     73:        return this->connection_id;
                     74: }
                     75: 
                     76: METHOD(imc_state_t, has_long, bool,
                     77:        private_imc_scanner_state_t *this)
                     78: {
                     79:        return this->has_long;
                     80: }
                     81: 
                     82: METHOD(imc_state_t, has_excl, bool,
                     83:        private_imc_scanner_state_t *this)
                     84: {
                     85:        return this->has_excl;
                     86: }
                     87: 
                     88: METHOD(imc_state_t, set_flags, void,
                     89:        private_imc_scanner_state_t *this, bool has_long, bool has_excl)
                     90: {
                     91:        this->has_long = has_long;
                     92:        this->has_excl = has_excl;
                     93: }
                     94: 
                     95: METHOD(imc_state_t, set_max_msg_len, void,
                     96:        private_imc_scanner_state_t *this, uint32_t max_msg_len)
                     97: {
                     98:        this->max_msg_len = max_msg_len;
                     99: }
                    100: 
                    101: METHOD(imc_state_t, get_max_msg_len, uint32_t,
                    102:        private_imc_scanner_state_t *this)
                    103: {
                    104:        return this->max_msg_len;
                    105: }
                    106: 
                    107: METHOD(imc_state_t, get_contracts, seg_contract_manager_t*,
                    108:        private_imc_scanner_state_t *this)
                    109: {
                    110:        return this->contracts;
                    111: }
                    112: 
                    113: METHOD(imc_state_t, change_state, TNC_ConnectionState,
                    114:        private_imc_scanner_state_t *this, TNC_ConnectionState new_state)
                    115: {
                    116:        TNC_ConnectionState old_state;
                    117: 
                    118:        old_state = this->state;
                    119:        this->state = new_state;
                    120:        return old_state;
                    121: }
                    122: 
                    123: METHOD(imc_state_t, set_result, void,
                    124:        private_imc_scanner_state_t *this, TNC_IMCID id,
                    125:        TNC_IMV_Evaluation_Result result)
                    126: {
                    127:        this->result = result;
                    128: }
                    129: 
                    130: METHOD(imc_state_t, get_result, bool,
                    131:        private_imc_scanner_state_t *this, TNC_IMCID id,
                    132:        TNC_IMV_Evaluation_Result *result)
                    133: {
                    134:        if (result)
                    135:        {
                    136:                *result = this->result;
                    137:        }
                    138:        return this->result != TNC_IMV_EVALUATION_RESULT_DONT_KNOW;
                    139: }
                    140: 
                    141: METHOD(imc_state_t, reset, void,
                    142:        private_imc_scanner_state_t *this)
                    143: {
                    144:        this->result = TNC_IMV_EVALUATION_RESULT_DONT_KNOW;
                    145: }
                    146: 
                    147: METHOD(imc_state_t, destroy, void,
                    148:        private_imc_scanner_state_t *this)
                    149: {
                    150:        this->contracts->destroy(this->contracts);
                    151:        free(this);
                    152: }
                    153: 
                    154: /**
                    155:  * Described in header.
                    156:  */
                    157: imc_state_t *imc_scanner_state_create(TNC_ConnectionID connection_id)
                    158: {
                    159:        private_imc_scanner_state_t *this;
                    160: 
                    161:        INIT(this,
                    162:                .public = {
                    163:                        .interface = {
                    164:                                .get_connection_id = _get_connection_id,
                    165:                                .has_long = _has_long,
                    166:                                .has_excl = _has_excl,
                    167:                                .set_flags = _set_flags,
                    168:                                .set_max_msg_len = _set_max_msg_len,
                    169:                                .get_max_msg_len = _get_max_msg_len,
                    170:                                .get_contracts = _get_contracts,
                    171:                                .change_state = _change_state,
                    172:                                .set_result = _set_result,
                    173:                                .get_result = _get_result,
                    174:                                .reset = _reset,
                    175:                                .destroy = _destroy,
                    176:                        },
                    177:                },
                    178:                .state = TNC_CONNECTION_STATE_CREATE,
                    179:                .result = TNC_IMV_EVALUATION_RESULT_DONT_KNOW,
                    180:                .connection_id = connection_id,
                    181:                .contracts = seg_contract_manager_create(),
                    182:        );
                    183: 
                    184:        return &this->public.interface;
                    185: }
                    186: 
                    187: 

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