26 lines
417 B
C
26 lines
417 B
C
|
#include <openbsc/tlv.h>
|
||
|
|
||
|
int tlv_parse(struct tlv_parser *parser, u_int8_t *data, int data_len)
|
||
|
{
|
||
|
u_int8_t *cur = data;
|
||
|
memset(parser, 0, sizeof(*parser));
|
||
|
|
||
|
while (cur +2 <= data + data_len) {
|
||
|
u_int8_t tag, len;
|
||
|
u_int8_t *val;
|
||
|
|
||
|
tag = *cur++;
|
||
|
len = *cur++;
|
||
|
val = cur;
|
||
|
|
||
|
parser->lv[tag].len = len;
|
||
|
parser->lv[tag].val = val;
|
||
|
|
||
|
if (cur + len > data + data_len)
|
||
|
break;
|
||
|
|
||
|
cur += len;
|
||
|
}
|
||
|
return 0;
|
||
|
}
|