implemented sending of reason strings

This commit is contained in:
Andreas Steffen
2011-06-13 15:31:34 +02:00
parent 7d769bc6c5
commit 44bd40a101
4 changed files with 131 additions and 43 deletions
@@ -55,6 +55,26 @@ struct private_imv_test_state_t {
};
typedef struct entry_t entry_t;
/**
* Define an internal reason string entry
*/
struct entry_t {
char *lang;
char *string;
};
/**
* Table of multi-lingual reason string entries
*/
static entry_t reasons[] = {
{ "en", "IMC Test was not configured with \"command = allow\"" },
{ "de", "IMC Test wurde nicht mit \"command = allow\" konfiguriert" },
{ "fr", "IMC Test n'etait pas configuré avec \"command = allow\"" },
{ "pl", "IMC Test nie zostało skonfigurowany z \"command = allow\"" }
};
METHOD(imv_state_t, get_connection_id, TNC_ConnectionID,
private_imv_test_state_t *this)
{
@@ -83,6 +103,34 @@ METHOD(imv_state_t, set_recommendation, void,
this->eval = eval;
}
METHOD(imv_state_t, get_reason_string, bool,
private_imv_test_state_t *this, chunk_t preferred_language,
chunk_t *reason_string, chunk_t *reason_language)
{
int i;
for (i = 0 ; i < countof(reasons); i++)
{
chunk_t lang;
lang = chunk_create(reasons[i].lang, strlen(reasons[i].lang));
if (chunk_equals(lang, preferred_language))
{
*reason_language = lang;
*reason_string = chunk_create(reasons[i].string,
strlen(reasons[i].string));
return TRUE;
}
}
/* no preferred language match found - use the default language */
*reason_string = chunk_create(reasons[0].string,
strlen(reasons[0].string));
*reason_language = chunk_create(reasons[0].lang,
strlen(reasons[0].lang));
return TRUE;
}
METHOD(imv_state_t, destroy, void,
private_imv_test_state_t *this)
{
@@ -115,6 +163,7 @@ imv_state_t *imv_test_state_create(TNC_ConnectionID connection_id)
.change_state = _change_state,
.get_recommendation = _get_recommendation,
.set_recommendation = _set_recommendation,
.get_reason_string = _get_reason_string,
.destroy = _destroy,
},
.set_rounds = _set_rounds,