Annotation of embedaddon/strongswan/src/libimcv/plugins/imc_scanner/imc_scanner_state.c, 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: #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>