Version bump to 5.9.3dr1
[strongswan.git] / src / libimcv / pa_tnc / pa_tnc_msg.h
1 /*
2 * Copyright (C) 2011-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 pa_tnc_msg pa_tnc_msg
18 * @{ @ingroup pa_tnc
19 */
20
21 #ifndef PA_TNC_MSG_H_
22 #define PA_TNC_MSG_H_
23
24 typedef struct pa_tnc_msg_t pa_tnc_msg_t;
25
26 #define PA_TNC_VERSION 0x01
27 #define PA_TNC_HEADER_SIZE 8
28
29 #include "pa_tnc_attr.h"
30
31 #include <library.h>
32
33 /**
34 * Interface for the RFC 5792 PA-TNC Posture Attribute protocol.
35 *
36 */
37 struct pa_tnc_msg_t {
38
39 /**
40 * Get the encoding of the PA-TNC message
41 *
42 * @return encoded PA-TNC message
43 */
44 chunk_t (*get_encoding)(pa_tnc_msg_t *this);
45
46 /**
47 * Get the remaining space in octets left in the PA-TNC message
48 *
49 * @return remaining space or 0 if max_msg_len is not set
50 */
51 size_t (*get_space)(pa_tnc_msg_t *this);
52
53 /**
54 * Add a PA-TNC attribute
55 *
56 * @param attr PA-TNC attribute to be added
57 * @return TRUE if attribute fit into message and was added
58 */
59 bool (*add_attribute)(pa_tnc_msg_t *this, pa_tnc_attr_t* attr);
60
61 /**
62 * Build the PA-TNC message
63 *
64 * @return TRUE if PA-TNC message was built successfully
65 */
66 bool (*build)(pa_tnc_msg_t *this);
67
68 /**
69 * Process the PA-TNC message
70 *
71 * @return return processing status
72 */
73 status_t (*process)(pa_tnc_msg_t *this);
74
75 /**
76 * Process all IETF standard error PA-TNC attributes
77 *
78 * @param non_fatal_types list of non fatal unsupported attribute types
79 * @return TRUE if at least one fatal error processed
80 */
81 bool (*process_ietf_std_errors)(pa_tnc_msg_t *this,
82 linked_list_t *non_fatal_types);
83
84 /**
85 * Enumerates over all PA-TNC attributes
86 *
87 * @return return attribute enumerator
88 */
89 enumerator_t* (*create_attribute_enumerator)(pa_tnc_msg_t *this);
90
91 /**
92 * Enumerates over all parsing errors
93 *
94 * @return return error enumerator
95 */
96 enumerator_t* (*create_error_enumerator)(pa_tnc_msg_t *this);
97
98 /**
99 * Destroys a pa_tnc_msg_t object.
100 */
101 void (*destroy)(pa_tnc_msg_t *this);
102 };
103
104 /**
105 * Create an empty PA-TNC message
106 */
107 pa_tnc_msg_t* pa_tnc_msg_create(size_t max_msg_len);
108
109 /**
110 * Create an unprocessed PA-TNC message from received data
111 *
112 * @param data PA-TNC message data
113 */
114 pa_tnc_msg_t* pa_tnc_msg_create_from_data(chunk_t data);
115
116 #endif /** PA_TNC_MSG_H_ @}*/