Harald Welte | 91b5b0d | 2009-02-06 12:51:39 +0000 | [diff] [blame] | 1 | #include <openbsc/tlv.h> |
2 | |||||
3 | int tlv_parse(struct tlv_parser *parser, u_int8_t *data, int data_len) | ||||
4 | { | ||||
5 | u_int8_t *cur = data; | ||||
6 | memset(parser, 0, sizeof(*parser)); | ||||
7 | |||||
8 | while (cur +2 <= data + data_len) { | ||||
9 | u_int8_t tag, len; | ||||
10 | u_int8_t *val; | ||||
11 | |||||
12 | tag = *cur++; | ||||
13 | len = *cur++; | ||||
14 | val = cur; | ||||
15 | |||||
16 | parser->lv[tag].len = len; | ||||
17 | parser->lv[tag].val = val; | ||||
18 | |||||
19 | if (cur + len > data + data_len) | ||||
20 | break; | ||||
21 | |||||
22 | cur += len; | ||||
23 | } | ||||
24 | return 0; | ||||
25 | } |