summaryrefslogtreecommitdiffstats
path: root/src/simutil.h
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2010-05-16 16:01:28 +0200
committerDenis Kenzior <denkenz@gmail.com>2010-05-25 16:52:50 -0500
commit1c3060026ed14cebd6f1e94d391cca406cb79aab (patch)
tree43270e44eb4e1fa2ec6e81c7daaaf3ee6b061f38 /src/simutil.h
parent0318e194b34d11994c053eddc4989cb277941826 (diff)
downloadofono-1c3060026ed14cebd6f1e94d391cca406cb79aab.tar.bz2
simutil: Add utilities for encoding BTLV and CTLV
Diffstat (limited to 'src/simutil.h')
-rw-r--r--src/simutil.h47
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);