Annotation of embedaddon/strongswan/src/libimcv/seg/seg_contract.h, revision 1.1
1.1 ! misho 1: /*
! 2: * Copyright (C) 2014-2015 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: * @defgroup seg_contract seg_contract
! 18: * @{ @ingroup libimcv_seg
! 19: */
! 20:
! 21: #ifndef SEG_CONTRACT_H_
! 22: #define SEG_CONTRACT_H_
! 23:
! 24: typedef struct seg_contract_t seg_contract_t;
! 25:
! 26: #include "pa_tnc/pa_tnc_attr.h"
! 27:
! 28: #include <library.h>
! 29: #include <pen/pen.h>
! 30:
! 31: #include <tncif.h>
! 32:
! 33: #define SEG_CONTRACT_MAX_SIZE_VALUE 0xffffffff
! 34: #define SEG_CONTRACT_NO_FRAGMENTATION SEG_CONTRACT_MAX_SIZE_VALUE
! 35:
! 36: /**
! 37: * Interface for a PA-TNC attribute segmentation contract
! 38: *
! 39: */
! 40: struct seg_contract_t {
! 41:
! 42: /**
! 43: * Get the PA-TNC message type.
! 44: *
! 45: * @return PA-TNC Message type
! 46: */
! 47: pen_type_t (*get_msg_type)(seg_contract_t *this);
! 48:
! 49: /**
! 50: * Set maximum PA-TNC attribute and segment size in octets
! 51: *
! 52: * @param max_attr_size Maximum PA-TNC attribute size in octets
! 53: * @param max_seg_size Maximum PA-TNC attribute segment size in octets
! 54: */
! 55: void (*set_max_size)(seg_contract_t *this, uint32_t max_attr_size,
! 56: uint32_t max_seg_size);
! 57:
! 58: /**
! 59: * Get maximum PA-TNC attribute and segment size in octets
! 60: *
! 61: * @param max_attr_size Maximum PA-TNC attribute size in octets
! 62: * @param max_seg_size Maximum PA-TNC attribute segment size in octets
! 63: */
! 64: void (*get_max_size)(seg_contract_t *this, uint32_t *max_attr_size,
! 65: uint32_t *max_seg_size);
! 66:
! 67: /**
! 68: * Check if a PA-TNC attribute must be segmented or is oversized
! 69: *
! 70: * @param attr PA-TNC attribute to be checked
! 71: * @param oversize PA-TNC attribute is larger than maximum size
! 72: * @return TRUE if PA-TNC attribute must be segmented
! 73: */
! 74: bool (*check_size)(seg_contract_t *this, pa_tnc_attr_t *attr,
! 75: bool *oversize);
! 76:
! 77: /**
! 78: * Generate first segment of a PA-TNC attribute according to the contract
! 79: *
! 80: * @param attr PA-TNC attribute to be segmented
! 81: * @param max_attr_len Maximum size of first segment envelope attribute
! 82: * @return First segment envelope attribute
! 83: */
! 84: pa_tnc_attr_t* (*first_segment)(seg_contract_t *this, pa_tnc_attr_t *attr,
! 85: size_t max_attr_len);
! 86:
! 87: /**
! 88: * Generate next segment of a PA-TNC attribute according to the contract
! 89: *
! 90: * @param base_attr_id Base Attribute ID
! 91: * @return Next segment envelope attribute
! 92: */
! 93: pa_tnc_attr_t* (*next_segment)(seg_contract_t *this, uint32_t base_attr_id);
! 94:
! 95: /**
! 96: * Add an attribute segments until the PA-TNC attribute is reconstructed
! 97: *
! 98: * @param attr Segment envelope attribute
! 99: * @param error Error attribute if an error occurred or NULL
! 100: * @param more Need more segments
! 101: * @return Completed PA-TNC attribute or NULL
! 102: */
! 103: pa_tnc_attr_t* (*add_segment)(seg_contract_t *this,
! 104: pa_tnc_attr_t *attr, pa_tnc_attr_t **error,
! 105: bool *more);
! 106:
! 107: /**
! 108: * Get contract role
! 109: *
! 110: * @return TRUE: contracting party (issuer),
! 111: * FALSE: contracted party
! 112: */
! 113: bool (*is_issuer)(seg_contract_t *this);
! 114:
! 115: /**
! 116: * Is this a null contract ?
! 117: *
! 118: * @return TRUE if null contract
! 119: */
! 120: bool (*is_null)(seg_contract_t *this);
! 121:
! 122: /**
! 123: * Set the responder ID
! 124: *
! 125: * @param responder IMC or IMV ID of responder
! 126: */
! 127: void (*set_responder)(seg_contract_t *this, TNC_UInt32 responder);
! 128:
! 129: /**
! 130: * Get the responder ID
! 131: *
! 132: * @return IMC or IMV ID of responder
! 133: */
! 134: TNC_UInt32 (*get_responder)(seg_contract_t *this);
! 135:
! 136: /**
! 137: * Get the issuer ID
! 138: *
! 139: * @return IMC or IMV ID of issuer
! 140: */
! 141: TNC_UInt32 (*get_issuer)(seg_contract_t *this);
! 142:
! 143: /**
! 144: * Clone a contract
! 145: *
! 146: * @return Cloned contract
! 147: */
! 148: seg_contract_t* (*clone)(seg_contract_t *this);
! 149:
! 150: /**
! 151: * Get an info string about the contract
! 152: *
! 153: * @param buf String buffer of at least size len
! 154: * @param len Size of string buffer
! 155: * @param request TRUE if contract request, FALSE if response
! 156: */
! 157: void (*get_info_string)(seg_contract_t *this, char *buf, size_t len,
! 158: bool request);
! 159:
! 160: /**
! 161: * Destroys a seg_contract_t object.
! 162: */
! 163: void (*destroy)(seg_contract_t *this);
! 164: };
! 165:
! 166: /**
! 167: * Create a PA-TNC attribute segmentation contract
! 168: *
! 169: * @param msg_type PA-TNC message type
! 170: * @param max_attr_size Maximum PA-TNC attribute size in octets
! 171: * @param max_seg_size Maximum PA-TNC attribute segment size in octets
! 172: * @param is_issuer TRUE if issuer of the contract
! 173: * @param issuer_id IMC or IMV ID of issuer
! 174: * @param is_imc TRUE if IMC, FALSE if IMV
! 175: */
! 176: seg_contract_t* seg_contract_create(pen_type_t msg_type,
! 177: uint32_t max_attr_size,
! 178: uint32_t max_seg_size,
! 179: bool is_issuer, TNC_UInt32 issuer_id,
! 180: bool is_imc);
! 181:
! 182: #endif /** SEG_CONTRACT_H_ @}*/
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>