Return to imc_swima_state.c CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / strongswan / src / libimcv / plugins / imc_swima |
1.1 misho 1: /* 2: * Copyright (C) 2017 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_swima_state.h" 17: 18: #include <tncif_names.h> 19: 20: #include <utils/debug.h> 21: 22: typedef struct private_imc_swima_state_t private_imc_swima_state_t; 23: 24: /** 25: * Private data of an imc_swima_state_t object. 26: */ 27: struct private_imc_swima_state_t { 28: 29: /** 30: * Public members of imc_swima_state_t 31: */ 32: imc_swima_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: * Has a subscription been established? 71: */ 72: bool has_subscription; 73: 74: /** 75: * State information on subscriptions 76: */ 77: imc_swima_subscription_t *subscription; 78: 79: /** 80: * Earliest EID for the next subscription round 81: */ 82: uint32_t earliest_eid; 83: 84: }; 85: 86: static void free_subscription(imc_swima_subscription_t *this) 87: { 88: if (this) 89: { 90: this->targets->destroy(this->targets); 91: free(this); 92: } 93: } 94: 95: METHOD(imc_state_t, get_connection_id, TNC_ConnectionID, 96: private_imc_swima_state_t *this) 97: { 98: return this->connection_id; 99: } 100: 101: METHOD(imc_state_t, has_long, bool, 102: private_imc_swima_state_t *this) 103: { 104: return this->has_long; 105: } 106: 107: METHOD(imc_state_t, has_excl, bool, 108: private_imc_swima_state_t *this) 109: { 110: return this->has_excl; 111: } 112: 113: METHOD(imc_state_t, set_flags, void, 114: private_imc_swima_state_t *this, bool has_long, bool has_excl) 115: { 116: this->has_long = has_long; 117: this->has_excl = has_excl; 118: } 119: 120: METHOD(imc_state_t, set_max_msg_len, void, 121: private_imc_swima_state_t *this, uint32_t max_msg_len) 122: { 123: this->max_msg_len = max_msg_len; 124: } 125: 126: METHOD(imc_state_t, get_max_msg_len, uint32_t, 127: private_imc_swima_state_t *this) 128: { 129: return this->max_msg_len; 130: } 131: 132: METHOD(imc_state_t, get_contracts, seg_contract_manager_t*, 133: private_imc_swima_state_t *this) 134: { 135: return this->contracts; 136: } 137: 138: METHOD(imc_state_t, change_state, TNC_ConnectionState, 139: private_imc_swima_state_t *this, TNC_ConnectionState new_state) 140: { 141: TNC_ConnectionState old_state; 142: 143: old_state = this->state; 144: this->state = new_state; 145: return old_state; 146: } 147: 148: METHOD(imc_state_t, set_result, void, 149: private_imc_swima_state_t *this, TNC_IMCID id, 150: TNC_IMV_Evaluation_Result result) 151: { 152: this->result = result; 153: } 154: 155: METHOD(imc_state_t, get_result, bool, 156: private_imc_swima_state_t *this, TNC_IMCID id, 157: TNC_IMV_Evaluation_Result *result) 158: { 159: if (result) 160: { 161: *result = this->result; 162: } 163: return this->result != TNC_IMV_EVALUATION_RESULT_DONT_KNOW; 164: } 165: 166: METHOD(imc_state_t, reset, void, 167: private_imc_swima_state_t *this) 168: { 169: this->result = TNC_IMV_EVALUATION_RESULT_DONT_KNOW; 170: } 171: 172: METHOD(imc_state_t, destroy, void, 173: private_imc_swima_state_t *this) 174: { 175: free(this->subscription); 176: this->contracts->destroy(this->contracts); 177: free(this); 178: } 179: 180: METHOD(imc_swima_state_t, set_subscription, void, 181: private_imc_swima_state_t *this, imc_swima_subscription_t *subscription, 182: bool set) 183: { 184: free_subscription(this->subscription); 185: this->has_subscription = set; 186: 187: if (set) 188: { 189: this->subscription = subscription; 190: } 191: else 192: { 193: this->subscription = NULL; 194: } 195: } 196: 197: METHOD(imc_swima_state_t, get_subscription, bool, 198: private_imc_swima_state_t *this, imc_swima_subscription_t **subscription) 199: { 200: if (subscription) 201: { 202: *subscription = this->subscription; 203: } 204: return this->has_subscription; 205: } 206: 207: METHOD(imc_swima_state_t, set_earliest_eid, void, 208: private_imc_swima_state_t *this, uint32_t eid) 209: { 210: this->earliest_eid = eid; 211: } 212: 213: METHOD(imc_swima_state_t, get_earliest_eid, uint32_t, 214: private_imc_swima_state_t *this) 215: { 216: return this->earliest_eid; 217: } 218: 219: /** 220: * Described in header. 221: */ 222: imc_state_t *imc_swima_state_create(TNC_ConnectionID connection_id) 223: { 224: private_imc_swima_state_t *this; 225: 226: INIT(this, 227: .public = { 228: .interface = { 229: .get_connection_id = _get_connection_id, 230: .has_long = _has_long, 231: .has_excl = _has_excl, 232: .set_flags = _set_flags, 233: .set_max_msg_len = _set_max_msg_len, 234: .get_max_msg_len = _get_max_msg_len, 235: .get_contracts = _get_contracts, 236: .change_state = _change_state, 237: .set_result = _set_result, 238: .get_result = _get_result, 239: .reset = _reset, 240: .destroy = _destroy, 241: }, 242: .set_subscription = _set_subscription, 243: .get_subscription = _get_subscription, 244: .set_earliest_eid = _set_earliest_eid, 245: .get_earliest_eid = _get_earliest_eid, 246: }, 247: .state = TNC_CONNECTION_STATE_CREATE, 248: .result = TNC_IMV_EVALUATION_RESULT_DONT_KNOW, 249: .connection_id = connection_id, 250: .contracts = seg_contract_manager_create(), 251: ); 252: 253: return &this->public.interface; 254: } 255: 256: