aboutsummaryrefslogtreecommitdiffstats
path: root/src/libimcv/plugins/imc_attestation/imc_attestation_state.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libimcv/plugins/imc_attestation/imc_attestation_state.c')
-rw-r--r--src/libimcv/plugins/imc_attestation/imc_attestation_state.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/src/libimcv/plugins/imc_attestation/imc_attestation_state.c b/src/libimcv/plugins/imc_attestation/imc_attestation_state.c
index 9087b711c..4a99cf800 100644
--- a/src/libimcv/plugins/imc_attestation/imc_attestation_state.c
+++ b/src/libimcv/plugins/imc_attestation/imc_attestation_state.c
@@ -15,6 +15,7 @@
#include "imc_attestation_state.h"
+#include <utils/linked_list.h>
#include <debug.h>
typedef struct private_imc_attestation_state_t private_imc_attestation_state_t;
@@ -44,6 +45,11 @@ struct private_imc_attestation_state_t {
*/
pts_t *pts;
+ /**
+ * PTS Component Evidence list
+ */
+ linked_list_t *list;
+
};
METHOD(imc_state_t, get_connection_id, TNC_ConnectionID,
@@ -58,10 +64,12 @@ METHOD(imc_state_t, change_state, void,
this->state = new_state;
}
+
METHOD(imc_state_t, destroy, void,
private_imc_attestation_state_t *this)
{
this->pts->destroy(this->pts);
+ this->list->destroy_offset(this->list, offsetof(pts_comp_evidence_t, destroy));
free(this);
}
@@ -71,6 +79,32 @@ METHOD(imc_attestation_state_t, get_pts, pts_t*,
return this->pts;
}
+METHOD(imc_attestation_state_t, add_evidence, void,
+ private_imc_attestation_state_t *this, pts_comp_evidence_t *evidence)
+{
+ this->list->insert_last(this->list, evidence);
+}
+
+METHOD(imc_attestation_state_t, get_evid_count, int,
+ private_imc_attestation_state_t *this)
+{
+ return this->list->get_count(this->list);
+}
+
+METHOD(imc_attestation_state_t, next_evidence, pts_comp_evidence_t*,
+ private_imc_attestation_state_t *this)
+{
+ pts_comp_evidence_t *evidence;
+
+ if (this->list->remove_first(this->list, (void**)&evidence) == SUCCESS)
+ {
+ return evidence;
+ }
+ else
+ {
+ return NULL;
+ }
+}
/**
* Described in header.
*/
@@ -87,10 +121,14 @@ imc_state_t *imc_attestation_state_create(TNC_ConnectionID connection_id)
.destroy = _destroy,
},
.get_pts = _get_pts,
+ .add_evidence = _add_evidence,
+ .get_evid_count = _get_evid_count,
+ .next_evidence = _next_evidence,
},
.connection_id = connection_id,
.state = TNC_CONNECTION_STATE_CREATE,
.pts = pts_create(TRUE),
+ .list = linked_list_create(),
);
platform_info = lib->settings->get_str(lib->settings,