const unsigned char *file;
};
+struct stk_tlv_builder {
+ struct comprehension_tlv_builder ctlv;
+ unsigned char *value;
+ unsigned int len;
+ unsigned int max_len;
+};
+
typedef gboolean (*dataobj_handler)(struct comprehension_tlv_iter *, void *);
+typedef gboolean (*dataobj_writer)(struct stk_tlv_builder *,
+ const void *, gboolean);
/*
* Defined in TS 102.223 Section 8.13
g_free(command);
}
-struct stk_tlv_builder {
- struct comprehension_tlv_builder ctlv;
- unsigned char *value;
- unsigned int len;
- unsigned int max_len;
-};
-
static inline gboolean stk_tlv_builder_init(struct stk_tlv_builder *iter,
unsigned char *pdu,
unsigned int size)
const void *data, gboolean cr)
{
const struct stk_duration *duration = data;
+ unsigned char tag;
if (duration->interval == 0x00)
return TRUE;
- return stk_tlv_open_container(tlv, cr,
- STK_DATA_OBJECT_TYPE_DURATION, FALSE) &&
+ tag = STK_DATA_OBJECT_TYPE_DURATION;
+
+ return stk_tlv_open_container(tlv, cr, tag, FALSE) &&
stk_tlv_append_byte(tlv, duration->unit) &&
stk_tlv_append_byte(tlv, duration->interval) &&
stk_tlv_close_container(tlv);
*/
if (stk_tlv_append_byte(tlv, 0x04) != TRUE)
return FALSE;
+
if (stk_tlv_append_byte(tlv, text->text ? 0x01 : 0x00) != TRUE)
return FALSE;
} else if (text->packed) {
return stk_tlv_close_container(tlv);
}
-static gboolean build_dataobj(struct stk_tlv_builder *tlv, gboolean
- (*builder_func)(struct stk_tlv_builder *,
- const void *, gboolean), ...)
+static gboolean build_dataobj(struct stk_tlv_builder *tlv,
+ dataobj_writer builder_func, ...)
{
va_list args;
if (builder_func(tlv, data, cr) != TRUE)
return FALSE;
- builder_func = va_arg(args, gboolean (*)(
- struct stk_tlv_builder *,
- const void *, gboolean));
+ builder_func = va_arg(args, dataobj_writer);
}
return TRUE;