aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/tnc/tnccs/tnccs_manager.c
diff options
context:
space:
mode:
authorAndreas Steffen <andreas.steffen@strongswan.org>2010-11-16 21:07:02 +0100
committerAndreas Steffen <andreas.steffen@strongswan.org>2010-11-16 21:07:02 +0100
commit343f4793a8aa0afc7edda9578f9c28235bb6d227 (patch)
tree4de29f42088978e54df95df55ad7f03b524652f4 /src/libcharon/tnc/tnccs/tnccs_manager.c
parent92477a0625c5fba739d416cddd81edd9ae3caefe (diff)
downloadstrongswan-343f4793a8aa0afc7edda9578f9c28235bb6d227.tar.bz2
strongswan-343f4793a8aa0afc7edda9578f9c28235bb6d227.tar.xz
implement set_attribute() callback function
Diffstat (limited to 'src/libcharon/tnc/tnccs/tnccs_manager.c')
-rw-r--r--src/libcharon/tnc/tnccs/tnccs_manager.c36
1 files changed, 36 insertions, 0 deletions
diff --git a/src/libcharon/tnc/tnccs/tnccs_manager.c b/src/libcharon/tnc/tnccs/tnccs_manager.c
index d99ed85e7..c1ba452e9 100644
--- a/src/libcharon/tnc/tnccs/tnccs_manager.c
+++ b/src/libcharon/tnc/tnccs/tnccs_manager.c
@@ -352,6 +352,42 @@ METHOD(tnccs_manager_t, set_attribute, TNC_Result,
TNC_UInt32 buffer_len,
TNC_BufferReference buffer)
{
+ enumerator_t *enumerator;
+ tnccs_connection_entry_t *entry;
+ recommendations_t *recs = NULL;
+
+ if (attribute_id != TNC_ATTRIBUTEID_REASON_STRING &&
+ attribute_id != TNC_ATTRIBUTEID_REASON_LANGUAGE)
+ {
+ return TNC_RESULT_INVALID_PARAMETER;
+ }
+
+ this->connection_lock->read_lock(this->connection_lock);
+ enumerator = this->connections->create_enumerator(this->connections);
+ while (enumerator->enumerate(enumerator, &entry))
+ {
+ if (id == entry->id)
+ {
+ recs = entry->recs;
+ break;
+ }
+ }
+ enumerator->destroy(enumerator);
+ this->connection_lock->unlock(this->connection_lock);
+
+ if (recs)
+ {
+ chunk_t attribute = { buffer, buffer_len };
+
+ if (attribute_id == TNC_ATTRIBUTEID_REASON_STRING)
+ {
+ return recs->set_reason_string(recs, imv_id, attribute);
+ }
+ else
+ {
+ return recs->set_reason_language(recs, imv_id, attribute);
+ }
+ }
return TNC_RESULT_INVALID_PARAMETER;
}