diff options
author | Andrzej Zaborowski <andrew.zaborowski@intel.com> | 2010-06-07 12:08:23 +0200 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-06-09 12:19:52 -0500 |
commit | ef408ae1a65be6986c3468e9319be4c3a7028c61 (patch) | |
tree | 268d64dc03083b9ed1513d63a4d036d08df7eb93 /src/stkutil.c | |
parent | 1d8bb1bab67562ec68cef09429894e9916b4cb53 (diff) | |
download | ofono-ef408ae1a65be6986c3468e9319be4c3a7028c61.tar.bz2 |
stkutil: Use static buf in stk_pdu_from_response
Diffstat (limited to 'src/stkutil.c')
-rw-r--r-- | src/stkutil.c | 36 |
1 files changed, 20 insertions, 16 deletions
diff --git a/src/stkutil.c b/src/stkutil.c index 82d4e847..14958a82 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -3980,14 +3980,15 @@ static gboolean build_local_info(struct stk_tlv_builder *builder, return FALSE; } -unsigned int stk_pdu_from_response(const struct stk_response *response, - unsigned char *pdu, unsigned int size) +const unsigned char *stk_pdu_from_response(const struct stk_response *response, + unsigned int *out_length) { struct stk_tlv_builder builder; gboolean ok = TRUE; unsigned char tag; + static unsigned char pdu[512]; - stk_tlv_builder_init(&builder, pdu, size); + stk_tlv_builder_init(&builder, pdu, sizeof(pdu)); /* * Encode command details, they come in order with @@ -3996,19 +3997,19 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, */ tag = STK_DATA_OBJECT_TYPE_COMMAND_DETAILS; if (stk_tlv_builder_open_container(&builder, TRUE, tag, FALSE) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->number) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->type) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->qualifier) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_close_container(&builder) == FALSE) - return 0; + return NULL; /* TS 102 223 section 6.8 states: * "For all COMPREHENSION-TLV objects with Min = N, the terminal @@ -4022,19 +4023,19 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, */ tag = STK_DATA_OBJECT_TYPE_DEVICE_IDENTITIES; if (stk_tlv_builder_open_container(&builder, TRUE, tag, FALSE) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->src) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_append_byte(&builder, response->dst) == FALSE) - return 0; + return NULL; if (stk_tlv_builder_close_container(&builder) == FALSE) - return 0; + return NULL; if (build_dataobj_result(&builder, &response->result, TRUE) != TRUE) - return 0; + return NULL; switch (response->type) { case STK_COMMAND_TYPE_DISPLAY_TEXT: @@ -4105,11 +4106,14 @@ unsigned int stk_pdu_from_response(const struct stk_response *response, case STK_COMMAND_TYPE_LAUNCH_BROWSER: break; default: - return 0; + return NULL; }; if (ok != TRUE) - return 0; + return NULL; + + if (out_length) + *out_length = stk_tlv_builder_get_length(&builder); - return stk_tlv_builder_get_length(&builder); + return pdu; } |