Annotation of embedaddon/strongswan/src/libimcv/imv/imv_workitem.c, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (C) 2013 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 "imv_workitem.h"
17:
18: #include <utils/debug.h>
19: #include <tncif_names.h>
20:
21: typedef struct private_imv_workitem_t private_imv_workitem_t;
22:
23: ENUM(imv_workitem_type_names, IMV_WORKITEM_PACKAGES, IMV_WORKITEM_TPM_ATTEST,
24: "PCKGS",
25: "UNSRC",
26: "FWDEN",
27: "PWDEN",
28: "FREFM",
29: "FMEAS",
30: "FMETA",
31: "DREFM",
32: "DMEAS",
33: "DMETA",
34: "TCPOP",
35: "TCPBL",
36: "UDPOP",
37: "UDPBL",
38: "SWIDT",
39: "TPMRA"
40: );
41:
42: /**
43: * Private data of a imv_workitem_t object.
44: *
45: */
46: struct private_imv_workitem_t {
47:
48: /**
49: * Public imv_workitem_t interface.
50: */
51: imv_workitem_t public;
52:
53: /**
54: * Primary workitem key
55: */
56: int id;
57:
58: /**
59: * IMV ID
60: */
61: TNC_IMVID imv_id;
62:
63: /**
64: * Workitem type
65: */
66: imv_workitem_type_t type;
67:
68: /**
69: * Argument string
70: */
71: char *arg_str;
72:
73: /**
74: * Argument integer
75: */
76: int arg_int;
77:
78: /**
79: * Result string
80: */
81: char *result;
82:
83: /**
84: * IMV action recommendation
85: */
86: TNC_IMV_Action_Recommendation rec_fail;
87:
88: /**
89: * IMV action recommendation
90: */
91: TNC_IMV_Action_Recommendation rec_noresult;
92:
93: /**
94: * IMV action recommendation
95: */
96: TNC_IMV_Action_Recommendation rec_final;
97:
98: };
99:
100: METHOD(imv_workitem_t, get_id, int,
101: private_imv_workitem_t *this)
102: {
103: return this->id;
104: }
105:
106: METHOD(imv_workitem_t, set_imv_id, void,
107: private_imv_workitem_t *this, TNC_IMVID imv_id)
108: {
109: this->imv_id = imv_id;
110:
111: DBG2(DBG_IMV, "IMV %d handles %N workitem %d", imv_id,
112: imv_workitem_type_names, this->type, this->id);
113: }
114:
115: METHOD(imv_workitem_t, get_imv_id, TNC_IMVID,
116: private_imv_workitem_t *this)
117: {
118: return this->imv_id;
119: }
120:
121: METHOD(imv_workitem_t, get_type, imv_workitem_type_t,
122: private_imv_workitem_t *this)
123: {
124: return this->type;
125: }
126:
127: METHOD(imv_workitem_t, get_arg_str, char*,
128: private_imv_workitem_t *this)
129: {
130: return this->arg_str;
131: }
132:
133: METHOD(imv_workitem_t, get_arg_int, int,
134: private_imv_workitem_t *this)
135: {
136: return this->arg_int;
137: }
138:
139: METHOD(imv_workitem_t, set_result, TNC_IMV_Action_Recommendation,
140: private_imv_workitem_t *this, char *result, TNC_IMV_Evaluation_Result eval)
141: {
142: this->result = strdup(result);
143: switch (eval)
144: {
145: case TNC_IMV_EVALUATION_RESULT_COMPLIANT:
146: this->rec_final = TNC_IMV_ACTION_RECOMMENDATION_ALLOW;
147: break;
148: case TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MINOR:
149: case TNC_IMV_EVALUATION_RESULT_NONCOMPLIANT_MAJOR:
150: this->rec_final = this->rec_fail;
151: break;
152: case TNC_IMV_EVALUATION_RESULT_ERROR:
153: case TNC_IMV_EVALUATION_RESULT_DONT_KNOW:
154: default:
155: this->rec_final = this->rec_noresult;
156: break;
157: }
158: DBG2(DBG_IMV, "IMV %d handled %N workitem %d: %N%s%s", this->imv_id,
159: imv_workitem_type_names, this->type, this->id,
160: TNC_IMV_Action_Recommendation_names, this->rec_final,
161: strlen(result) ? " - " : "", result);
162:
163: return this->rec_final;
164: }
165:
166: METHOD(imv_workitem_t, get_result, TNC_IMV_Action_Recommendation,
167: private_imv_workitem_t *this, char **result)
168: {
169: if (result)
170: {
171: *result = this->result;
172: }
173: return this->rec_final;
174: }
175:
176: METHOD(imv_workitem_t, destroy, void,
177: private_imv_workitem_t *this)
178: {
179: free(this->arg_str);
180: free(this->result);
181: free(this);
182: }
183:
184: /**
185: * See header
186: */
187: imv_workitem_t *imv_workitem_create(int id, imv_workitem_type_t type,
188: char *arg_str, int arg_int,
189: TNC_IMV_Action_Recommendation rec_fail,
190: TNC_IMV_Action_Recommendation rec_noresult)
191: {
192: private_imv_workitem_t *this;
193:
194: INIT(this,
195: .public = {
196: .get_id = _get_id,
197: .set_imv_id = _set_imv_id,
198: .get_imv_id = _get_imv_id,
199: .get_type = _get_type,
200: .get_arg_str = _get_arg_str,
201: .get_arg_int = _get_arg_int,
202: .set_result = _set_result,
203: .get_result = _get_result,
204: .destroy = _destroy,
205: },
206: .id = id,
207: .imv_id = TNC_IMVID_ANY,
208: .type = type,
209: .arg_str = arg_str ? strdup(arg_str) : NULL,
210: .arg_int = arg_int,
211: .rec_fail = rec_fail,
212: .rec_noresult = rec_noresult,
213: .rec_final = TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
214: );
215:
216: return &this->public;
217: }
218:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>