summaryrefslogtreecommitdiffstats
path: root/src/simutil.h
diff options
context:
space:
mode:
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);