diff options
author | Andreas Steffen <andreas.steffen@strongswan.org> | 2010-11-16 21:07:02 +0100 |
---|---|---|
committer | Andreas Steffen <andreas.steffen@strongswan.org> | 2010-11-16 21:07:02 +0100 |
commit | 343f4793a8aa0afc7edda9578f9c28235bb6d227 (patch) | |
tree | 4de29f42088978e54df95df55ad7f03b524652f4 /src/libcharon/tnc/tnccs/tnccs_manager.c | |
parent | 92477a0625c5fba739d416cddd81edd9ae3caefe (diff) | |
download | strongswan-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.c | 36 |
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; } |