Hi Andrew,
---
src/stkutil.c | 33 +++++++++++++++++++++++++++++++++
src/stkutil.h | 9 +++++++++
2 files changed, 42 insertions(+), 0 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index cf22361..4e813ec 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -3129,6 +3129,20 @@ static gboolean build_dataobj_text(struct
stk_tlv_builder *tlv, return stk_tlv_close_container(tlv);
}
+/* Described in TS 102.223 Section 8.30 */
+static gboolean build_dataobj_cc_requested_action(struct stk_tlv_builder
*tlv, + const void *data, gboolean cr)
+{
+ const struct stk_common_byte_array *action = data;
+
+ return action->array == NULL ||
+ (stk_tlv_open_container(tlv, cr,
+ STK_DATA_OBJECT_TYPE_CALL_CONTROL_REQUESTED_ACTION,
+ FALSE) &&
+ stk_tlv_append_bytes(tlv, action->array, action->len) &&
+ stk_tlv_close_container(tlv));
+}
+
I really don't like this style, at the very least break up the tag into a
variable so it is one open/append/close per line. See how I did the others.
static gboolean build_dataobj(struct stk_tlv_builder *tlv, gboolean
(*builder_func)(struct stk_tlv_builder *,
const void *, gboolean), ...)
@@ -3231,6 +3245,25 @@ unsigned int stk_pdu_from_response(const struct
stk_response *response, &response->select_item.item_id,
NULL);
break;
+ case STK_COMMAND_TYPE_SETUP_CALL:
+ if (response->set_up_call.modified_result.cc_modified)
+ ok = build_dataobj(&builder,
+ build_dataobj_cc_requested_action,
+ DATAOBJ_FLAG_CR,
+ &response->set_up_call.
+ cc_requested_action,
+ build_dataobj_result, DATAOBJ_FLAG_CR,
+ &response->set_up_call.modified_result.
+ result,
+ NULL);
+ else
+ ok = build_dataobj(&builder,
+ build_dataobj_cc_requested_action,
+ DATAOBJ_FLAG_CR,
+ &response->set_up_call.
+ cc_requested_action,
+ NULL);
+ break;
This really should be in a separate function, similar to how you did the local
info.
Regards,
-Denis