diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2010-05-16 16:01:28 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-05-25 16:52:50 -0500 |
commit | 1c3060026ed14cebd6f1e94d391cca406cb79aab (patch) | |
tree | 43270e44eb4e1fa2ec6e81c7daaaf3ee6b061f38 /src/simutil.h | |
parent | 0318e194b34d11994c053eddc4989cb277941826 (diff) | |
download | ofono-1c3060026ed14cebd6f1e94d391cca406cb79aab.tar.bz2 |
simutil: Add utilities for encoding BTLV and CTLV
Diffstat (limited to 'src/simutil.h')
-rw-r--r-- | src/simutil.h | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/src/simutil.h b/src/simutil.h index 144bf12f..c64d275d 100644 --- a/src/simutil.h +++ b/src/simutil.h @@ -115,6 +115,25 @@ struct ber_tlv_iter { const unsigned char *data; }; +struct ber_tlv_builder { + unsigned int max; + unsigned int pos; + unsigned char *pdu; + struct ber_tlv_builder *parent; + + unsigned int tag; + enum ber_tlv_data_type class; + enum ber_tlv_data_encoding_type encoding; + unsigned int len; +}; + +struct comprehension_tlv_builder { + unsigned int max; + unsigned int pos; + unsigned char *pdu; + struct ber_tlv_builder *parent; +}; + void simple_tlv_iter_init(struct simple_tlv_iter *iter, const unsigned char *pdu, unsigned int len); gboolean simple_tlv_iter_next(struct simple_tlv_iter *iter); @@ -136,6 +155,18 @@ const unsigned char *comprehension_tlv_iter_get_data( void comprehension_tlv_iter_copy(struct comprehension_tlv_iter *from, struct comprehension_tlv_iter *to); +gboolean comprehension_tlv_builder_init( + struct comprehension_tlv_builder *builder, + unsigned char *pdu, unsigned int size); +gboolean comprehension_tlv_builder_next( + struct comprehension_tlv_builder *builder, + gboolean cr, unsigned short tag); +gboolean comprehension_tlv_builder_set_length( + struct comprehension_tlv_builder *builder, + unsigned int len); +unsigned char *comprehension_tlv_builder_get_data( + struct comprehension_tlv_builder *builder); + void ber_tlv_iter_init(struct ber_tlv_iter *iter, const unsigned char *pdu, unsigned int len); /* @@ -168,6 +199,22 @@ void ber_tlv_iter_recurse_simple(struct ber_tlv_iter *iter, void ber_tlv_iter_recurse_comprehension(struct ber_tlv_iter *iter, struct comprehension_tlv_iter *recurse); +gboolean ber_tlv_builder_init(struct ber_tlv_builder *builder, + unsigned char *pdu, unsigned int size); +gboolean ber_tlv_builder_next(struct ber_tlv_builder *builder, + enum ber_tlv_data_type class, + enum ber_tlv_data_encoding_type encoding, + unsigned int new_tag); +gboolean ber_tlv_builder_set_length(struct ber_tlv_builder *builder, + unsigned int len); +unsigned char *ber_tlv_builder_get_data(struct ber_tlv_builder *builder); +gboolean ber_tlv_builder_recurse(struct ber_tlv_builder *builder, + struct ber_tlv_builder *recurse); +gboolean ber_tlv_builder_recurse_comprehension(struct ber_tlv_builder *builder, + struct comprehension_tlv_builder *recurse); +void ber_tlv_builder_optimize(struct ber_tlv_builder *builder, + unsigned char **pdu, unsigned int *len); + struct sim_eons *sim_eons_new(int pnn_records); void sim_eons_add_pnn_record(struct sim_eons *eons, int record, const guint8 *tlv, int length); |