allow registration of multiple message type
This commit is contained in:
@@ -42,11 +42,11 @@
|
||||
|
||||
static const char imc_name[] = "Attestation";
|
||||
|
||||
#define IMC_VENDOR_ID PEN_TCG
|
||||
#define IMC_SUBTYPE PA_SUBTYPE_TCG_PTS
|
||||
static pen_type_t msg_types[] = {
|
||||
{ PEN_TCG, PA_SUBTYPE_TCG_PTS }
|
||||
};
|
||||
|
||||
static imc_agent_t *imc_attestation;
|
||||
static os_info_t *os;
|
||||
|
||||
/**
|
||||
* Supported PTS measurement algorithms
|
||||
@@ -76,22 +76,13 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
|
||||
{
|
||||
return TNC_RESULT_FATAL;
|
||||
}
|
||||
imc_attestation = imc_agent_create(imc_name, IMC_VENDOR_ID, IMC_SUBTYPE,
|
||||
imc_id, actual_version);
|
||||
imc_attestation = imc_agent_create(imc_name, msg_types, 1, imc_id,
|
||||
actual_version);
|
||||
if (!imc_attestation)
|
||||
{
|
||||
return TNC_RESULT_FATAL;
|
||||
}
|
||||
|
||||
os = os_info_create();
|
||||
if (!os)
|
||||
{
|
||||
imc_attestation->destroy(imc_attestation);
|
||||
imc_attestation = NULL;
|
||||
|
||||
return TNC_RESULT_FATAL;
|
||||
}
|
||||
|
||||
libpts_init();
|
||||
|
||||
if (min_version > TNC_IFIMC_VERSION_1 || max_version < TNC_IFIMC_VERSION_1)
|
||||
@@ -147,27 +138,13 @@ TNC_Result TNC_IMC_NotifyConnectionChange(TNC_IMCID imc_id,
|
||||
TNC_Result TNC_IMC_BeginHandshake(TNC_IMCID imc_id,
|
||||
TNC_ConnectionID connection_id)
|
||||
{
|
||||
linked_list_t *attr_list;
|
||||
pa_tnc_attr_t *attr;
|
||||
TNC_Result result = TNC_RESULT_SUCCESS;
|
||||
|
||||
if (!imc_attestation)
|
||||
{
|
||||
DBG1(DBG_IMC, "IMC \"%s\" has not been initialized", imc_name);
|
||||
return TNC_RESULT_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
attr_list = linked_list_create();
|
||||
attr = ietf_attr_product_info_create(0, 0, os->get_name(os));
|
||||
attr_list->insert_last(attr_list, attr);
|
||||
attr = ietf_attr_string_version_create(os->get_version(os),
|
||||
chunk_empty, chunk_empty);
|
||||
attr_list->insert_last(attr_list, attr);
|
||||
result = imc_attestation->send_message(imc_attestation, connection_id,
|
||||
FALSE, 0, TNC_IMVID_ANY, attr_list);
|
||||
attr_list->destroy(attr_list);
|
||||
|
||||
return result;
|
||||
return TNC_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
static TNC_Result receive_message(TNC_IMCID imc_id,
|
||||
@@ -272,7 +249,8 @@ static TNC_Result receive_message(TNC_IMCID imc_id,
|
||||
if (result == TNC_RESULT_SUCCESS && attr_list->get_count(attr_list))
|
||||
{
|
||||
result = imc_attestation->send_message(imc_attestation, connection_id,
|
||||
FALSE, 0, TNC_IMVID_ANY, attr_list);
|
||||
FALSE, 0, TNC_IMVID_ANY, PEN_TCG, PA_SUBTYPE_TCG_PTS,
|
||||
attr_list);
|
||||
}
|
||||
attr_list->destroy(attr_list);
|
||||
|
||||
@@ -346,9 +324,6 @@ TNC_Result TNC_IMC_Terminate(TNC_IMCID imc_id)
|
||||
imc_attestation->destroy(imc_attestation);
|
||||
imc_attestation = NULL;
|
||||
|
||||
os->destroy(os);
|
||||
os = NULL;
|
||||
|
||||
return TNC_RESULT_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
@@ -43,8 +43,10 @@
|
||||
|
||||
static const char imv_name[] = "Attestation";
|
||||
|
||||
#define IMV_VENDOR_ID PEN_TCG
|
||||
#define IMV_SUBTYPE PA_SUBTYPE_TCG_PTS
|
||||
static pen_type_t msg_types[] = {
|
||||
{ PEN_TCG, PA_SUBTYPE_TCG_PTS },
|
||||
{ PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM }
|
||||
};
|
||||
|
||||
static imv_agent_t *imv_attestation;
|
||||
|
||||
@@ -93,8 +95,8 @@ TNC_Result TNC_IMV_Initialize(TNC_IMVID imv_id,
|
||||
{
|
||||
return TNC_RESULT_FATAL;
|
||||
}
|
||||
imv_attestation = imv_agent_create(imv_name, IMV_VENDOR_ID, IMV_SUBTYPE,
|
||||
imv_id, actual_version);
|
||||
imv_attestation = imv_agent_create(imv_name, msg_types, 2, imv_id,
|
||||
actual_version);
|
||||
if (!imv_attestation)
|
||||
{
|
||||
return TNC_RESULT_FATAL;
|
||||
@@ -187,7 +189,8 @@ static TNC_Result send_message(TNC_ConnectionID connection_id)
|
||||
if (attr_list->get_count(attr_list))
|
||||
{
|
||||
result = imv_attestation->send_message(imv_attestation,
|
||||
connection_id, FALSE, 0, TNC_IMCID_ANY, attr_list);
|
||||
connection_id, FALSE, 0, TNC_IMCID_ANY,
|
||||
PEN_TCG, PA_SUBTYPE_TCG_PTS, attr_list);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -331,13 +334,14 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
|
||||
TNC_IMV_ACTION_RECOMMENDATION_ISOLATE,
|
||||
TNC_IMV_EVALUATION_RESULT_ERROR);
|
||||
return imv_attestation->provide_recommendation(imv_attestation,
|
||||
connection_id, src_imc_id);
|
||||
connection_id, src_imc_id, PEN_TCG, PA_SUBTYPE_TCG_PTS);
|
||||
}
|
||||
|
||||
if (attr_list->get_count(attr_list))
|
||||
{
|
||||
result = imv_attestation->send_message(imv_attestation, connection_id,
|
||||
FALSE, 0, TNC_IMCID_ANY, attr_list);
|
||||
FALSE, 0, TNC_IMCID_ANY, PEN_TCG, PA_SUBTYPE_TCG_PTS,
|
||||
attr_list);
|
||||
attr_list->destroy(attr_list);
|
||||
return result;
|
||||
}
|
||||
@@ -351,7 +355,7 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
|
||||
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
|
||||
TNC_IMV_EVALUATION_RESULT_ERROR);
|
||||
return imv_attestation->provide_recommendation(imv_attestation,
|
||||
connection_id, src_imc_id);
|
||||
connection_id, src_imc_id, PEN_TCG, PA_SUBTYPE_TCG_PTS);
|
||||
}
|
||||
|
||||
if (attestation_state->get_handshake_state(attestation_state) ==
|
||||
@@ -376,7 +380,7 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
|
||||
TNC_IMV_EVALUATION_RESULT_COMPLIANT);
|
||||
}
|
||||
return imv_attestation->provide_recommendation(imv_attestation,
|
||||
connection_id, src_imc_id);
|
||||
connection_id, src_imc_id, PEN_TCG, PA_SUBTYPE_TCG_PTS);
|
||||
}
|
||||
|
||||
return result;
|
||||
@@ -431,7 +435,7 @@ TNC_Result TNC_IMV_SolicitRecommendation(TNC_IMVID imv_id,
|
||||
return TNC_RESULT_NOT_INITIALIZED;
|
||||
}
|
||||
return imv_attestation->provide_recommendation(imv_attestation,
|
||||
connection_id, TNC_IMCID_ANY);
|
||||
connection_id, TNC_IMCID_ANY, PEN_TCG, PA_SUBTYPE_TCG_PTS);
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user