tlv.h
00001
00002
00003
00004
00005
00006
00007 #ifndef OPENCT_TLV_H
00008 #define OPENCT_TLV_H
00009
00010 #ifdef __cplusplus
00011 extern "C" {
00012 #endif
00013
00014 #include <openct/protocol.h>
00015 #include <openct/buffer.h>
00016
00017 typedef unsigned char ifd_tag_t;
00018
00019 typedef struct ct_tlv_parser {
00020 unsigned char use_large_tags;
00021 unsigned char * val[256];
00022 unsigned int len[256];
00023 } ct_tlv_parser_t;
00024
00025 typedef struct ct_tlv_builder {
00026 int error;
00027 unsigned char use_large_tags;
00028 ct_buf_t * buf;
00029 unsigned int len;
00030 unsigned char * lenp;
00031 } ct_tlv_builder_t;
00032
00033 extern int ct_tlv_parse(ct_tlv_parser_t *, ct_buf_t *);
00034
00035 extern int ct_tlv_get_int(ct_tlv_parser_t *,
00036 ifd_tag_t, unsigned int *);
00037 extern int ct_tlv_get_string(ct_tlv_parser_t *,
00038 ifd_tag_t, char *, size_t);
00039 extern int ct_tlv_get_opaque(ct_tlv_parser_t *,
00040 ifd_tag_t, unsigned char **, size_t *);
00041
00042 extern int ct_tlv_get_bytes(ct_tlv_parser_t *,
00043 ifd_tag_t, void *, size_t);
00044
00045 extern void ct_tlv_builder_init(ct_tlv_builder_t *, ct_buf_t *, int);
00046 extern void ct_tlv_put_int(ct_tlv_builder_t *,
00047 ifd_tag_t, unsigned int);
00048 extern void ct_tlv_put_string(ct_tlv_builder_t *,
00049 ifd_tag_t, const char *);
00050 extern void ct_tlv_put_opaque(ct_tlv_builder_t *, ifd_tag_t,
00051 const unsigned char *, size_t);
00052 extern void ct_tlv_put_tag(ct_tlv_builder_t *, ifd_tag_t);
00053 extern void ct_tlv_add_byte(ct_tlv_builder_t *, unsigned char);
00054 extern void ct_tlv_add_bytes(ct_tlv_builder_t *,
00055 const unsigned char *, size_t);
00056
00057 #ifdef __cplusplus
00058 }
00059 #endif
00060
00061 #endif