Function added that parses EAP method strings ([eap-]type[-vendor])

This commit is contained in:
Tobias Brunner
2012-08-31 11:40:28 +02:00
parent 576490ab09
commit db409006e4
2 changed files with 86 additions and 0 deletions
+59
View File
@@ -1,4 +1,5 @@
/*
* Copyright (C) 2012 Tobias Brunner
* Copyright (C) 2006 Martin Willi
* Hochschule fuer Technik Rapperswil
*
@@ -13,8 +14,13 @@
* for more details.
*/
#include <stdlib.h>
#include <errno.h>
#include "eap.h"
#include <debug.h>
ENUM(eap_code_names, EAP_REQUEST, EAP_FAILURE,
"EAP_REQUEST",
"EAP_RESPONSE",
@@ -120,3 +126,56 @@ eap_type_t eap_type_from_string(char *name)
}
return 0;
}
/*
* See header
*/
eap_vendor_type_t *eap_vendor_type_from_string(char *str)
{
enumerator_t *enumerator;
eap_vendor_type_t *result = NULL;
eap_type_t type = 0;
u_int32_t vendor = 0;
char *part, *end;
/* parse EAP method string of the form: [eap-]type[-vendor] */
enumerator = enumerator_create_token(str, "-", " ");
while (enumerator->enumerate(enumerator, &part))
{
if (!type)
{
if (streq(part, "eap"))
{ /* skip 'eap' at the beginning */
continue;
}
type = eap_type_from_string(part);
if (!type)
{
type = strtoul(part, &end, 0);
if (*end != '\0' || errno)
{
DBG1(DBG_LIB, "unknown or invalid EAP method: %s", part);
break;
}
}
continue;
}
vendor = strtoul(part, &end, 0);
if (*end != '\0' || errno)
{
DBG1(DBG_LIB, "invalid EAP vendor: %s", part);
type = 0;
}
break;
}
enumerator->destroy(enumerator);
if (type)
{
INIT(result,
.type = type,
.vendor = vendor,
);
}
return result;
}