Return to imc_os_state.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libimcv / plugins / imc_os |
1.1 misho 1: /* 2: * Copyright (C) 2012-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_os_state.h" 17: 18: #include <tncif_names.h> 19: 20: #include <utils/debug.h> 21: 22: typedef struct private_imc_os_state_t private_imc_os_state_t; 23: 24: /** 25: * Private data of an imc_os_state_t object. 26: */ 27: struct private_imc_os_state_t { 28: 29: /** 30: * Public members of imc_os_state_t 31: */ 32: imc_os_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_os_state_t *this) 72: { 73: return this->connection_id; 74: } 75: 76: METHOD(imc_state_t, has_long, bool, 77: private_imc_os_state_t *this) 78: { 79: return this->has_long; 80: } 81: 82: METHOD(imc_state_t, has_excl, bool, 83: private_imc_os_state_t *this) 84: { 85: return this->has_excl; 86: } 87: 88: METHOD(imc_state_t, set_flags, void, 89: private_imc_os_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_os_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_os_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_os_state_t *this) 109: { 110: return this->contracts; 111: } 112: 113: METHOD(imc_state_t, change_state, TNC_ConnectionState, 114: private_imc_os_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_os_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_os_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_os_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_os_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_os_state_create(TNC_ConnectionID connection_id) 158: { 159: private_imc_os_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: