Annotation of embedaddon/strongswan/src/libimcv/seg/seg_contract.h, revision 1.1.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>