summaryrefslogtreecommitdiff
path: root/src/libcharon/tnc/tnccs
diff options
context:
space:
mode:
authorYves-Alexis Perez <corsac@corsac.net>2012-06-28 21:16:07 +0200
committerYves-Alexis Perez <corsac@corsac.net>2012-06-28 21:16:07 +0200
commitb34738ed08c2227300d554b139e2495ca5da97d6 (patch)
tree62f33b52820f2e49f0e53c0f8c636312037c8054 /src/libcharon/tnc/tnccs
parent0a9d51a49042a68daa15b0c74a2b7f152f52606b (diff)
downloadvyos-strongswan-b34738ed08c2227300d554b139e2495ca5da97d6.tar.gz
vyos-strongswan-b34738ed08c2227300d554b139e2495ca5da97d6.zip
Imported Upstream version 4.6.4
Diffstat (limited to 'src/libcharon/tnc/tnccs')
-rw-r--r--src/libcharon/tnc/tnccs/tnccs.c23
-rw-r--r--src/libcharon/tnc/tnccs/tnccs.h83
-rw-r--r--src/libcharon/tnc/tnccs/tnccs_manager.c505
-rw-r--r--src/libcharon/tnc/tnccs/tnccs_manager.h186
4 files changed, 0 insertions, 797 deletions
diff --git a/src/libcharon/tnc/tnccs/tnccs.c b/src/libcharon/tnc/tnccs/tnccs.c
deleted file mode 100644
index 575b850f5..000000000
--- a/src/libcharon/tnc/tnccs/tnccs.c
+++ /dev/null
@@ -1,23 +0,0 @@
-/*
- * Copyright (C) 2010 Andreas Steffen
- * HSR Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-#include "tnccs.h"
-
-ENUM(tnccs_type_names, TNCCS_UNKNOWN, TNCCS_2_0,
- "unknown TNCCS",
- "TNCCS 1.1",
- "TNCCS SOH",
- "TNCCS 2.0",
-);
diff --git a/src/libcharon/tnc/tnccs/tnccs.h b/src/libcharon/tnc/tnccs/tnccs.h
deleted file mode 100644
index 32f065f67..000000000
--- a/src/libcharon/tnc/tnccs/tnccs.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2010 Andreas Steffen
- * HSR Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-/**
- * @defgroup tnccs tnccs
- * @ingroup tnc
- *
- * @defgroup tnccst tnccs
- * @{ @ingroup tnccs
- */
-
-#ifndef TNCCS_H_
-#define TNCCS_H_
-
-#include <tnc/tncif.h>
-#include <tnc/tncifimc.h>
-#include <tnc/tncifimv.h>
-#include <library.h>
-
-#define IETF_VENDOR_ID 0x000000 /* 0 */
-#define MICROSOFT_VENDOR_ID 0x000137 /* 311 */
-#define OSC_VENDOR_ID 0x002358 /* 9048 */
-#define FHH_VENDOR_ID 0x0080ab /* 32939 */
-#define ITA_VENDOR_ID 0x00902a /* 36906 */
-#define RESERVED_VENDOR_ID 0xffffff /* 16777215 */
-
-typedef enum tnccs_type_t tnccs_type_t;
-
-/**
- * Type of TNC Client/Server protocol
- */
-enum tnccs_type_t {
- TNCCS_UNKNOWN,
- TNCCS_1_1,
- TNCCS_SOH,
- TNCCS_2_0,
- TNCCS_DYNAMIC
-};
-
-/**
- * enum names for tnccs_type_t.
- */
-extern enum_name_t *tnccs_type_names;
-
-typedef struct tnccs_t tnccs_t;
-
-/**
- * Constructor definition for a pluggable TNCCS protocol implementation.
- *
- * @param is_server TRUE if TNC Server, FALSE if TNC Client
- * @return implementation of the tnccs_t interface
- */
-typedef tnccs_t* (*tnccs_constructor_t)(bool is_server);
-
-/**
- * Callback function adding a message to a TNCCS batch
- *
- * @param imc_id ID of IMC or TNC_IMCID_ANY
- * @param imc_id ID of IMV or TNC_IMVID_ANY
- * @param msg message to be added
- * @param msg_len message length
- * @param msg_type message type
- * @return result code
- */
-typedef TNC_Result (*tnccs_send_message_t)(tnccs_t* tncss, TNC_IMCID imc_id,
- TNC_IMVID imv_id,
- TNC_BufferReference msg,
- TNC_UInt32 msg_len,
- TNC_MessageType msg_type);
-
-#endif /** TNCCS_H_ @}*/
diff --git a/src/libcharon/tnc/tnccs/tnccs_manager.c b/src/libcharon/tnc/tnccs/tnccs_manager.c
deleted file mode 100644
index 609742dc8..000000000
--- a/src/libcharon/tnc/tnccs/tnccs_manager.c
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
- * Copyright (C) 2010 Andreas Steffen
- * HSR Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-#include "tnccs_manager.h"
-
-#include <tnc/imv/imv_recommendations.h>
-
-#include <debug.h>
-#include <daemon.h>
-#include <utils/linked_list.h>
-#include <threading/rwlock.h>
-
-typedef struct private_tnccs_manager_t private_tnccs_manager_t;
-typedef struct tnccs_entry_t tnccs_entry_t;
-typedef struct tnccs_connection_entry_t tnccs_connection_entry_t;
-
-/**
- * TNCCS constructor entry
- */
-struct tnccs_entry_t {
-
- /**
- * TNCCS protocol type
- */
- tnccs_type_t type;
-
- /**
- * constructor function to create instance
- */
- tnccs_constructor_t constructor;
-};
-
-/**
- * TNCCS connection entry
- */
-struct tnccs_connection_entry_t {
-
- /**
- * TNCCS connection ID
- */
- TNC_ConnectionID id;
-
- /**
- * TNCCS instance
- */
- tnccs_t *tnccs;
-
- /**
- * TNCCS send message function
- */
- tnccs_send_message_t send_message;
-
- /**
- * TNCCS request handshake retry flag
- */
- bool *request_handshake_retry;
-
- /**
- * collection of IMV recommendations
- */
- recommendations_t *recs;
-};
-
-/**
- * private data of tnccs_manager
- */
-struct private_tnccs_manager_t {
-
- /**
- * public functions
- */
- tnccs_manager_t public;
-
- /**
- * list of TNCCS protocol entries
- */
- linked_list_t *protocols;
-
- /**
- * rwlock to lock the TNCCS protocol entries
- */
- rwlock_t *protocol_lock;
-
- /**
- * connection ID counter
- */
- TNC_ConnectionID connection_id;
-
- /**
- * list of TNCCS connection entries
- */
- linked_list_t *connections;
-
- /**
- * rwlock to lock TNCCS connection entries
- */
- rwlock_t *connection_lock;
-
-};
-
-METHOD(tnccs_manager_t, add_method, void,
- private_tnccs_manager_t *this, tnccs_type_t type,
- tnccs_constructor_t constructor)
-{
- tnccs_entry_t *entry;
-
- entry = malloc_thing(tnccs_entry_t);
- entry->type = type;
- entry->constructor = constructor;
-
- this->protocol_lock->write_lock(this->protocol_lock);
- this->protocols->insert_last(this->protocols, entry);
- this->protocol_lock->unlock(this->protocol_lock);
-}
-
-METHOD(tnccs_manager_t, remove_method, void,
- private_tnccs_manager_t *this, tnccs_constructor_t constructor)
-{
- enumerator_t *enumerator;
- tnccs_entry_t *entry;
-
- this->protocol_lock->write_lock(this->protocol_lock);
- enumerator = this->protocols->create_enumerator(this->protocols);
- while (enumerator->enumerate(enumerator, &entry))
- {
- if (constructor == entry->constructor)
- {
- this->protocols->remove_at(this->protocols, enumerator);
- free(entry);
- }
- }
- enumerator->destroy(enumerator);
- this->protocol_lock->unlock(this->protocol_lock);
-}
-
-METHOD(tnccs_manager_t, create_instance, tnccs_t*,
- private_tnccs_manager_t *this, tnccs_type_t type, bool is_server)
-{
- enumerator_t *enumerator;
- tnccs_entry_t *entry;
- tnccs_t *protocol = NULL;
-
- this->protocol_lock->read_lock(this->protocol_lock);
- enumerator = this->protocols->create_enumerator(this->protocols);
- while (enumerator->enumerate(enumerator, &entry))
- {
- if (type == entry->type)
- {
- protocol = entry->constructor(is_server);
- if (protocol)
- {
- break;
- }
- }
- }
- enumerator->destroy(enumerator);
- this->protocol_lock->unlock(this->protocol_lock);
-
- return protocol;
-}
-
-METHOD(tnccs_manager_t, create_connection, TNC_ConnectionID,
- private_tnccs_manager_t *this, tnccs_t *tnccs,
- tnccs_send_message_t send_message, bool* request_handshake_retry,
- recommendations_t **recs)
-{
- tnccs_connection_entry_t *entry;
-
- entry = malloc_thing(tnccs_connection_entry_t);
- entry->tnccs = tnccs;
- entry->send_message = send_message;
- entry->request_handshake_retry = request_handshake_retry;
- if (recs)
- {
- /* we assume a TNC Server needing recommendations from IMVs */
- if (!charon->imvs)
- {
- DBG1(DBG_TNC, "no IMV manager available!");
- free(entry);
- return 0;
- }
- entry->recs = charon->imvs->create_recommendations(charon->imvs);
- *recs = entry->recs;
- }
- else
- {
- /* we assume a TNC Client */
- if (!charon->imcs)
- {
- DBG1(DBG_TNC, "no IMC manager available!");
- free(entry);
- return 0;
- }
- entry->recs = NULL;
- }
- this->connection_lock->write_lock(this->connection_lock);
- entry->id = ++this->connection_id;
- this->connections->insert_last(this->connections, entry);
- this->connection_lock->unlock(this->connection_lock);
-
- DBG1(DBG_TNC, "assigned TNCCS Connection ID %u", entry->id);
- return entry->id;
-}
-
-METHOD(tnccs_manager_t, remove_connection, void,
- private_tnccs_manager_t *this, TNC_ConnectionID id, bool is_server)
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
-
- if (is_server)
- {
- if (charon->imvs)
- {
- charon->imvs->notify_connection_change(charon->imvs, id,
- TNC_CONNECTION_STATE_DELETE);
- }
- }
- else
- {
- if (charon->imcs)
- {
- charon->imcs->notify_connection_change(charon->imcs, id,
- TNC_CONNECTION_STATE_DELETE);
- }
- }
-
- this->connection_lock->write_lock(this->connection_lock);
- enumerator = this->connections->create_enumerator(this->connections);
- while (enumerator->enumerate(enumerator, &entry))
- {
- if (id == entry->id)
- {
- this->connections->remove_at(this->connections, enumerator);
- if (entry->recs)
- {
- entry->recs->destroy(entry->recs);
- }
- free(entry);
- DBG1(DBG_TNC, "removed TNCCS Connection ID %u", id);
- }
- }
- enumerator->destroy(enumerator);
- this->connection_lock->unlock(this->connection_lock);
-}
-
-METHOD(tnccs_manager_t, request_handshake_retry, TNC_Result,
- private_tnccs_manager_t *this, bool is_imc, TNC_UInt32 imcv_id,
- TNC_ConnectionID id,
- TNC_RetryReason reason)
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
-
- if (id == TNC_CONNECTIONID_ANY)
- {
- DBG2(DBG_TNC, "%s %u requests handshake retry for all connections "
- "(reason: %u)", is_imc ? "IMC":"IMV", reason);
- }
- else
- {
- DBG2(DBG_TNC, "%s %u requests handshake retry for Connection ID %u "
- "(reason: %u)", is_imc ? "IMC":"IMV", imcv_id, id, reason);
- }
- this->connection_lock->read_lock(this->connection_lock);
- enumerator = this->connections->create_enumerator(this->connections);
- while (enumerator->enumerate(enumerator, &entry))
- {
- if (id == TNC_CONNECTIONID_ANY || id == entry->id)
- {
- *entry->request_handshake_retry = TRUE;
- break;
- }
- }
- enumerator->destroy(enumerator);
- this->connection_lock->unlock(this->connection_lock);
-
- return TNC_RESULT_SUCCESS;
-}
-
-METHOD(tnccs_manager_t, send_message, TNC_Result,
- private_tnccs_manager_t *this, TNC_IMCID imc_id, TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_BufferReference msg,
- TNC_UInt32 msg_len,
- TNC_MessageType msg_type)
-
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
- tnccs_send_message_t send_message = NULL;
- tnccs_t *tnccs = NULL;
- TNC_VendorID msg_vid;
- TNC_MessageSubtype msg_subtype;
-
- msg_vid = (msg_type >> 8) & TNC_VENDORID_ANY;
- msg_subtype = msg_type & TNC_SUBTYPE_ANY;
-
- if (msg_vid == TNC_VENDORID_ANY || msg_subtype == TNC_SUBTYPE_ANY)
- {
- DBG1(DBG_TNC, "not sending message of invalid type 0x%08x", msg_type);
- 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)
- {
- tnccs = entry->tnccs;
- send_message = entry->send_message;
- break;
- }
- }
- enumerator->destroy(enumerator);
- this->connection_lock->unlock(this->connection_lock);
-
- if (tnccs && send_message)
- {
- return send_message(tnccs, imc_id, imv_id, msg, msg_len, msg_type);
- }
- return TNC_RESULT_FATAL;
-}
-
-METHOD(tnccs_manager_t, provide_recommendation, TNC_Result,
- private_tnccs_manager_t *this, TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_IMV_Action_Recommendation rec,
- TNC_IMV_Evaluation_Result eval)
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
- recommendations_t *recs = NULL;
-
- 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)
- {
- recs->provide_recommendation(recs, imv_id, rec, eval);
- return TNC_RESULT_SUCCESS;
- }
- return TNC_RESULT_FATAL;
-}
-
-METHOD(tnccs_manager_t, get_attribute, TNC_Result,
- private_tnccs_manager_t *this, TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_AttributeID attribute_id,
- TNC_UInt32 buffer_len,
- TNC_BufferReference buffer,
- TNC_UInt32 *out_value_len)
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
- recommendations_t *recs = NULL;
-
- if (id == TNC_CONNECTIONID_ANY ||
- attribute_id != TNC_ATTRIBUTEID_PREFERRED_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 pref_lang;
-
- pref_lang = recs->get_preferred_language(recs);
- if (pref_lang.len == 0)
- {
- return TNC_RESULT_INVALID_PARAMETER;
- }
- *out_value_len = pref_lang.len;
- if (buffer && buffer_len <= pref_lang.len)
- {
- memcpy(buffer, pref_lang.ptr, pref_lang.len);
- }
- return TNC_RESULT_SUCCESS;
- }
- return TNC_RESULT_INVALID_PARAMETER;
-}
-
-METHOD(tnccs_manager_t, set_attribute, TNC_Result,
- private_tnccs_manager_t *this, TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_AttributeID attribute_id,
- TNC_UInt32 buffer_len,
- TNC_BufferReference buffer)
-{
- enumerator_t *enumerator;
- tnccs_connection_entry_t *entry;
- recommendations_t *recs = NULL;
-
- if (id == TNC_CONNECTIONID_ANY ||
- (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;
-}
-
-METHOD(tnccs_manager_t, destroy, void,
- private_tnccs_manager_t *this)
-{
- this->protocols->destroy_function(this->protocols, free);
- this->protocol_lock->destroy(this->protocol_lock);
- this->connections->destroy_function(this->connections, free);
- this->connection_lock->destroy(this->connection_lock);
- free(this);
-}
-
-/*
- * See header
- */
-tnccs_manager_t *tnccs_manager_create()
-{
- private_tnccs_manager_t *this;
-
- INIT(this,
- .public = {
- .add_method = _add_method,
- .remove_method = _remove_method,
- .create_instance = _create_instance,
- .create_connection = _create_connection,
- .remove_connection = _remove_connection,
- .request_handshake_retry = _request_handshake_retry,
- .send_message = _send_message,
- .provide_recommendation = _provide_recommendation,
- .get_attribute = _get_attribute,
- .set_attribute = _set_attribute,
- .destroy = _destroy,
- },
- .protocols = linked_list_create(),
- .connections = linked_list_create(),
- .protocol_lock = rwlock_create(RWLOCK_TYPE_DEFAULT),
- .connection_lock = rwlock_create(RWLOCK_TYPE_DEFAULT),
- );
-
- return &this->public;
-}
-
diff --git a/src/libcharon/tnc/tnccs/tnccs_manager.h b/src/libcharon/tnc/tnccs/tnccs_manager.h
deleted file mode 100644
index 34f60029d..000000000
--- a/src/libcharon/tnc/tnccs/tnccs_manager.h
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
- * Copyright (C) 2010 Andreas Steffen
- * HSR Hochschule fuer Technik Rapperswil
- *
- * This program is free software; you can redistribute it and/or modify it
- * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2 of the License, or (at your
- * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
- *
- * This program is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
- * for more details.
- */
-
-/**
- * @defgroup tnccs_manager tnccs_manager
- * @{ @ingroup tnccs
- */
-
-#ifndef TNCCS_MANAGER_H_
-#define TNCCS_MANAGER_H_
-
-#include "tnccs.h"
-
-#include <tnc/imv/imv_recommendations.h>
-
-typedef struct tnccs_manager_t tnccs_manager_t;
-
-/**
- * The TNCCS manager manages all TNCCS implementations and creates instances.
- *
- * A plugin registers its implemented TNCCS protocol with the manager by
- * providing type and a constructor function. The manager then creates
- * TNCCS protocol instances via the provided constructor.
- */
-struct tnccs_manager_t {
-
- /**
- * Register a TNCCS protocol implementation.
- *
- * @param type TNCCS protocol type
- * @param constructor constructor, returns a TNCCS protocol implementation
- */
- void (*add_method)(tnccs_manager_t *this, tnccs_type_t type,
- tnccs_constructor_t constructor);
-
- /**
- * Unregister a TNCCS protocol implementation using it's constructor.
- *
- * @param constructor constructor function to remove, as added in add_method
- */
- void (*remove_method)(tnccs_manager_t *this, tnccs_constructor_t constructor);
-
- /**
- * Create a new TNCCS protocol instance.
- *
- * @param type type of the TNCCS protocol
- * @param is_server TRUE if TNC Server, FALSE if TNC Client
- * @return TNCCS protocol instance, NULL if no constructor found
- */
- tnccs_t* (*create_instance)(tnccs_manager_t *this, tnccs_type_t type,
- bool is_server);
-
- /**
- * Create a TNCCS connection and assign a unique connection ID as well a
- * callback function for adding a message to a TNCCS batch and create
- * an empty set for collecting IMV recommendations
- *
- * @param tnccs TNCCS connection instance
- * @param send_message TNCCS callback function
- * @param request_handshake_retry pointer to boolean variable
- * @param recs pointer to IMV recommendation set
- * @return assigned connection ID
- */
- TNC_ConnectionID (*create_connection)(tnccs_manager_t *this, tnccs_t *tnccs,
- tnccs_send_message_t send_message,
- bool *request_handshake_retry,
- recommendations_t **recs);
-
- /**
- * Remove a TNCCS connection using its connection ID.
- *
- * @param id ID of the connection to be removed
- * @param is_server TNC Server if TRUE, TNC Client if FALSE
- */
- void (*remove_connection)(tnccs_manager_t *this, TNC_ConnectionID id,
- bool is_server);
-
- /**
- * Request a handshake retry
- *
- * @param is_imc TRUE if IMC, FALSE if IMV
- * @param imcv_id ID of IMC or IMV requesting the retry
- * @param id ID of a specific connection or any connection
- * @param reason reason for the handshake retry
- * @return return code
- */
- TNC_Result (*request_handshake_retry)(tnccs_manager_t *this, bool is_imc,
- TNC_UInt32 imcv_id,
- TNC_ConnectionID id,
- TNC_RetryReason reason);
-
- /**
- * Add an IMC/IMV message to the batch of a given connection ID.
- *
- * @param imc_id ID of IMC or TNC_IMCID_ANY
- * @param imv_id ID of IMV or TNC_IMVID_ANY
- * @param id ID of target connection
- * @param msg message to be added
- * @param msg_len message length
- * @param msg_type message type
- * @return return code
- */
- TNC_Result (*send_message)(tnccs_manager_t *this, TNC_IMCID imc_id,
- TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_BufferReference msg,
- TNC_UInt32 msg_len,
- TNC_MessageType msg_type);
-
- /**
- * Deliver an IMV Action Recommendation and IMV Evaluation Result to the TNCS
- *
- * @param imv_id ID of the IMV providing the recommendation
- * @param id ID of target connection
- * @param rec action recommendation
- * @param eval evaluation result
- * @return return code
- */
- TNC_Result (*provide_recommendation)(tnccs_manager_t *this,
- TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_IMV_Action_Recommendation rec,
- TNC_IMV_Evaluation_Result eval);
-
- /**
- * Get the value of an attribute associated with a connection or with the
- * TNCS as a whole.
- *
- * @param imv_id ID of the IMV requesting the attribute
- * @param id ID of target connection
- * @param attribute_id ID of the requested attribute
- * @param buffer_len length of the buffer in bytes
- * @param buffer pointer to the buffer
- * @param out_value_len actual length of the returned attribute
- * @return return code
- */
- TNC_Result (*get_attribute)(tnccs_manager_t *this,
- TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_AttributeID attribute_id,
- TNC_UInt32 buffer_len,
- TNC_BufferReference buffer,
- TNC_UInt32 *out_value_len);
-
- /**
- * Set the value of an attribute associated with a connection or with the
- * TNCS as a whole.
- *
- * @param imv_id ID of the IMV setting the attribute
- * @param id ID of target connection
- * @param attribute_id ID of the attribute to be set
- * @param buffer_len length of the buffer in bytes
- * @param buffer pointer to the buffer
- * @return return code
- */
- TNC_Result (*set_attribute)(tnccs_manager_t *this,
- TNC_IMVID imv_id,
- TNC_ConnectionID id,
- TNC_AttributeID attribute_id,
- TNC_UInt32 buffer_len,
- TNC_BufferReference buffer);
-
- /**
- * Destroy a tnccs_manager instance.
- */
- void (*destroy)(tnccs_manager_t *this);
-};
-
-/**
- * Create a tnccs_manager instance.
- */
-tnccs_manager_t *tnccs_manager_create();
-
-#endif /** TNCCS_MANAGER_H_ @}*/