allow registration of multiple message type

This commit is contained in:
Andreas Steffen
2012-10-14 17:37:00 +02:00
parent 07a3dee937
commit 5f085d7e13
12 changed files with 179 additions and 142 deletions
+8 -6
View File
@@ -38,8 +38,9 @@
static const char imc_name[] = "OS";
#define IMC_VENDOR_ID PEN_IETF
#define IMC_SUBTYPE PA_SUBTYPE_IETF_OPERATING_SYSTEM
static pen_type_t msg_types[] = {
{ PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM }
};
static imc_agent_t *imc_os;
static os_info_t *os;
@@ -57,8 +58,7 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
DBG1(DBG_IMC, "IMC \"%s\" has already been initialized", imc_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imc_os = imc_agent_create(imc_name, IMC_VENDOR_ID, IMC_SUBTYPE,
imc_id, actual_version);
imc_os = imc_agent_create(imc_name, msg_types, 1, imc_id, actual_version);
if (!imc_os)
{
return TNC_RESULT_FATAL;
@@ -231,7 +231,8 @@ TNC_Result TNC_IMC_BeginHandshake(TNC_IMCID imc_id,
add_fwd_enabled(attr_list);
add_default_pwd_enabled(attr_list);
result = imc_os->send_message(imc_os, connection_id, FALSE, 0,
TNC_IMVID_ANY, attr_list);
TNC_IMVID_ANY, PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM,
attr_list);
attr_list->destroy(attr_list);
}
@@ -356,7 +357,8 @@ static TNC_Result receive_message(TNC_IMCID imc_id,
if (attr_list->get_count(attr_list))
{
result = imc_os->send_message(imc_os, connection_id, TRUE, imc_id,
src_imv_id, attr_list);
src_imv_id, PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM,
attr_list);
}
else
{
@@ -34,8 +34,9 @@
static const char imc_name[] = "Scanner";
#define IMC_VENDOR_ID PEN_ITA
#define IMC_SUBTYPE PA_SUBTYPE_ITA_SCANNER
static pen_type_t msg_types[] = {
{ PEN_ITA, PA_SUBTYPE_ITA_SCANNER }
};
static imc_agent_t *imc_scanner;
@@ -52,8 +53,7 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
DBG1(DBG_IMC, "IMC \"%s\" has already been initialized", imc_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imc_scanner = imc_agent_create(imc_name, IMC_VENDOR_ID, IMC_SUBTYPE,
imc_id, actual_version);
imc_scanner = imc_agent_create(imc_name, msg_types, 1, imc_id, actual_version);
if (!imc_scanner)
{
return TNC_RESULT_FATAL;
@@ -247,7 +247,8 @@ static TNC_Result send_message(TNC_ConnectionID connection_id)
attr_list = linked_list_create();
attr_list->insert_last(attr_list, attr);
result = imc_scanner->send_message(imc_scanner, connection_id, FALSE, 0,
TNC_IMVID_ANY, attr_list);
TNC_IMVID_ANY, PEN_ITA, PA_SUBTYPE_ITA_SCANNER,
attr_list);
attr_list->destroy(attr_list);
return result;
+6 -5
View File
@@ -33,8 +33,9 @@
static const char imc_name[] = "Test";
#define IMC_VENDOR_ID PEN_ITA
#define IMC_SUBTYPE PA_SUBTYPE_ITA_TEST
static pen_type_t msg_types[] = {
{ PEN_ITA, PA_SUBTYPE_ITA_TEST }
};
static imc_agent_t *imc_test;
@@ -51,8 +52,7 @@ TNC_Result TNC_IMC_Initialize(TNC_IMCID imc_id,
DBG1(DBG_IMC, "IMC \"%s\" has already been initialized", imc_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imc_test = imc_agent_create(imc_name, IMC_VENDOR_ID, IMC_SUBTYPE,
imc_id, actual_version);
imc_test = imc_agent_create(imc_name, msg_types, 1, imc_id, actual_version);
if (!imc_test)
{
return TNC_RESULT_FATAL;
@@ -208,7 +208,8 @@ static TNC_Result send_message(imc_state_t *state, TNC_UInt32 src_imc_id,
excl = dst_imv_id != TNC_IMVID_ANY;
result = imc_test->send_message(imc_test, connection_id, excl, src_imc_id,
dst_imv_id, attr_list);
dst_imv_id, PEN_ITA, PA_SUBTYPE_ITA_TEST,
attr_list);
attr_list->destroy(attr_list);
return result;
+12 -9
View File
@@ -39,8 +39,9 @@
static const char imv_name[] = "OS";
#define IMV_VENDOR_ID PEN_IETF
#define IMV_SUBTYPE PA_SUBTYPE_IETF_OPERATING_SYSTEM
static pen_type_t msg_types[] = {
{ PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM }
};
static imv_agent_t *imv_os;
@@ -57,8 +58,7 @@ TNC_Result TNC_IMV_Initialize(TNC_IMVID imv_id,
DBG1(DBG_IMV, "IMV \"%s\" has already been initialized", imv_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imv_os = imv_agent_create(imv_name, IMV_VENDOR_ID, IMV_SUBTYPE,
imv_id, actual_version);
imv_os = imv_agent_create(imv_name, msg_types, 1, imv_id, actual_version);
if (!imv_os)
{
return TNC_RESULT_FATAL;
@@ -285,11 +285,13 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
if (assessment)
{
attr_list->destroy_offset(attr_list, offsetof(pa_tnc_attr_t, destroy));
return imv_os->provide_recommendation(imv_os, connection_id, src_imc_id);
return imv_os->provide_recommendation(imv_os, connection_id, src_imc_id,
PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM);
}
result = imv_os->send_message(imv_os, connection_id, TRUE, imv_id,
src_imc_id, attr_list);
src_imc_id, PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM,
attr_list);
attr_list->destroy(attr_list);
return result;
@@ -343,8 +345,8 @@ TNC_Result TNC_IMV_SolicitRecommendation(TNC_IMVID imv_id,
DBG1(DBG_IMV, "IMV \"%s\" has not been initialized", imv_name);
return TNC_RESULT_NOT_INITIALIZED;
}
return imv_os->provide_recommendation(imv_os, connection_id,
TNC_IMCID_ANY);
return imv_os->provide_recommendation(imv_os, connection_id, TNC_IMCID_ANY,
PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM);
}
/**
@@ -386,7 +388,8 @@ TNC_Result TNC_IMV_BatchEnding(TNC_IMVID imv_id,
attr_cast->add(attr_cast, PEN_IETF, IETF_ATTR_FACTORY_DEFAULT_PWD_ENABLED);
attr_list->insert_last(attr_list, attr);
result = imv_os->send_message(imv_os, connection_id, FALSE, imv_id,
TNC_IMCID_ANY, attr_list);
TNC_IMCID_ANY, PEN_IETF, PA_SUBTYPE_IETF_OPERATING_SYSTEM,
attr_list);
attr_list->destroy(attr_list);
}
@@ -33,8 +33,9 @@
static const char imv_name[] = "Scanner";
#define IMV_VENDOR_ID PEN_ITA
#define IMV_SUBTYPE PA_SUBTYPE_ITA_SCANNER
static pen_type_t msg_types[] = {
{ PEN_ITA, PA_SUBTYPE_ITA_SCANNER }
};
static imv_agent_t *imv_scanner;
@@ -124,8 +125,7 @@ TNC_Result TNC_IMV_Initialize(TNC_IMVID imv_id,
DBG1(DBG_IMV, "IMV \"%s\" has already been initialized", imv_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imv_scanner = imv_agent_create(imv_name, IMV_VENDOR_ID, IMV_SUBTYPE,
imv_id, actual_version);
imv_scanner = imv_agent_create(imv_name, msg_types, 1, imv_id, actual_version);
if (!imv_scanner)
{
return TNC_RESULT_FATAL;
@@ -310,7 +310,7 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
TNC_IMV_EVALUATION_RESULT_ERROR);
}
return imv_scanner->provide_recommendation(imv_scanner, connection_id,
src_imc_id);
src_imc_id, PEN_ITA, PA_SUBTYPE_ITA_SCANNER);
}
/**
@@ -362,7 +362,7 @@ TNC_Result TNC_IMV_SolicitRecommendation(TNC_IMVID imv_id,
return TNC_RESULT_NOT_INITIALIZED;
}
return imv_scanner->provide_recommendation(imv_scanner, connection_id,
TNC_IMCID_ANY);
TNC_IMCID_ANY, PEN_ITA, PA_SUBTYPE_ITA_SCANNER);
}
/**
+9 -8
View File
@@ -33,8 +33,9 @@
static const char imv_name[] = "Test";
#define IMV_VENDOR_ID PEN_ITA
#define IMV_SUBTYPE PA_SUBTYPE_ITA_TEST
static pen_type_t msg_types[] = {
{ PEN_ITA, PA_SUBTYPE_ITA_TEST }
};
static imv_agent_t *imv_test;
@@ -51,8 +52,7 @@ TNC_Result TNC_IMV_Initialize(TNC_IMVID imv_id,
DBG1(DBG_IMV, "IMV \"%s\" has already been initialized", imv_name);
return TNC_RESULT_ALREADY_INITIALIZED;
}
imv_test = imv_agent_create(imv_name, IMV_VENDOR_ID, IMV_SUBTYPE,
imv_id, actual_version);
imv_test = imv_agent_create(imv_name, msg_types, 1, imv_id, actual_version);
if (!imv_test)
{
return TNC_RESULT_FATAL;
@@ -210,7 +210,7 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
TNC_IMV_ACTION_RECOMMENDATION_NO_RECOMMENDATION,
TNC_IMV_EVALUATION_RESULT_ERROR);
return imv_test->provide_recommendation(imv_test, connection_id,
src_imc_id);
src_imc_id, PEN_ITA, PA_SUBTYPE_ITA_TEST);
}
/* request a handshake retry ? */
@@ -228,14 +228,15 @@ static TNC_Result receive_message(TNC_IMVID imv_id,
attr = ita_attr_command_create("repeat");
attr_list->insert_last(attr_list, attr);
result = imv_test->send_message(imv_test, connection_id, TRUE, imv_id,
src_imc_id, attr_list);
src_imc_id, PEN_ITA, PA_SUBTYPE_ITA_TEST, attr_list);
attr_list->destroy(attr_list);
return result;
}
return received_command ? imv_test->provide_recommendation(imv_test,
connection_id, src_imc_id) : TNC_RESULT_SUCCESS;
connection_id, src_imc_id, PEN_ITA, PA_SUBTYPE_ITA_TEST) :
TNC_RESULT_SUCCESS;
}
/**
@@ -287,7 +288,7 @@ TNC_Result TNC_IMV_SolicitRecommendation(TNC_IMVID imv_id,
return TNC_RESULT_NOT_INITIALIZED;
}
return imv_test->provide_recommendation(imv_test, connection_id,
TNC_IMCID_ANY);
TNC_IMCID_ANY, PEN_ITA, PA_SUBTYPE_ITA_TEST);
}
/**