support multiple language preferences

This commit is contained in:
Andreas Steffen
2011-06-13 15:58:27 +02:00
parent 44bd40a101
commit 4c191ca6bb
+12 -3
View File
@@ -14,6 +14,7 @@
#include "imv_test_state.h" #include "imv_test_state.h"
#include <utils/lexparser.h>
#include <debug.h> #include <debug.h>
typedef struct private_imv_test_state_t private_imv_test_state_t; typedef struct private_imv_test_state_t private_imv_test_state_t;
@@ -107,14 +108,21 @@ METHOD(imv_state_t, get_reason_string, bool,
private_imv_test_state_t *this, chunk_t preferred_language, private_imv_test_state_t *this, chunk_t preferred_language,
chunk_t *reason_string, chunk_t *reason_language) chunk_t *reason_string, chunk_t *reason_language)
{ {
chunk_t pref_lang, lang;
int i; int i;
while (eat_whitespace(&preferred_language))
{
if (!extract_token(&pref_lang, ',', &preferred_language))
{
/* last entry in a comma-separated list or single entry */
pref_lang = preferred_language;
}
for (i = 0 ; i < countof(reasons); i++) for (i = 0 ; i < countof(reasons); i++)
{ {
chunk_t lang;
lang = chunk_create(reasons[i].lang, strlen(reasons[i].lang)); lang = chunk_create(reasons[i].lang, strlen(reasons[i].lang));
if (chunk_equals(lang, preferred_language)) if (chunk_equals(lang, pref_lang))
{ {
*reason_language = lang; *reason_language = lang;
*reason_string = chunk_create(reasons[i].string, *reason_string = chunk_create(reasons[i].string,
@@ -122,6 +130,7 @@ METHOD(imv_state_t, get_reason_string, bool,
return TRUE; return TRUE;
} }
} }
}
/* no preferred language match found - use the default language */ /* no preferred language match found - use the default language */
*reason_string = chunk_create(reasons[0].string, *reason_string = chunk_create(reasons[0].string,