From 44476dac9e66267549337ab082bb41d6af069f18 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Thu, 11 Mar 2010 14:43:59 -0600 Subject: [PATCH] Refactor: stk configuration capability parameters --- src/stkutil.c | 18 ++++++++++-------- src/stkutil.h | 20 +++++++++++++++----- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 136efd59..6cd539b1 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -121,24 +121,26 @@ static gboolean parse_dataobj_subaddress(struct comprehension_tlv_iter *iter, } /* Defined in TS 102.223 Section 8.4 */ -static gboolean parse_dataobj_capability_configuration_parameters( - struct comprehension_tlv_iter *iter, void *user) +static gboolean parse_dataobj_ccp(struct comprehension_tlv_iter *iter, + void *user) { - struct stk_capability_configuration_parameters *ccp = user; + struct stk_ccp *ccp = user; const unsigned char *data; unsigned int len; if (comprehension_tlv_iter_get_tag(iter) != - STK_DATA_OBJECT_TYPE_CAPABILITY_CONFIGURATION_PARAMETERS) + STK_DATA_OBJECT_TYPE_CCP) return FALSE; len = comprehension_tlv_iter_get_length(iter); if (len < 1) return FALSE; + if (len > sizeof(ccp->ccp)) + return FALSE; + data = comprehension_tlv_iter_get_data(iter); - ccp->ccp_len = len; - ccp->ccp = g_malloc(len); + ccp->len = len; memcpy(ccp->ccp, data, len); return TRUE; @@ -483,8 +485,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_alpha_id; case STK_DATA_OBJECT_TYPE_SUBADDRESS: return parse_dataobj_subaddress; - case STK_DATA_OBJECT_TYPE_CAPABILITY_CONFIGURATION_PARAMETERS: - return parse_dataobj_capability_configuration_parameters; + case STK_DATA_OBJECT_TYPE_CCP: + return parse_dataobj_ccp; case STK_DATA_OBJECT_TYPE_DURATION: return parse_dataobj_duration; case STK_DATA_OBJECT_TYPE_ITEM: diff --git a/src/stkutil.h b/src/stkutil.h index d225dd45..4b2c046b 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -87,7 +87,7 @@ enum stk_data_object_type { STK_DATA_OBJECT_TYPE_DURATION = 0x04, STK_DATA_OBJECT_TYPE_ALPHA_ID = 0x05, STK_DATA_OBJECT_TYPE_ADDRESS = 0x06, - STK_DATA_OBJECT_TYPE_CAPABILITY_CONFIGURATION_PARAMETERS = 0x07, + STK_DATA_OBJECT_TYPE_CCP = 0x07, STK_DATA_OBJECT_TYPE_SUBADDRESS = 0x08, STK_DATA_OBJECT_TYPE_SS_STRING = 0x09, STK_DATA_OBJECT_TYPE_USSD_STRING = 0x0A, @@ -217,10 +217,20 @@ struct stk_subaddress { unsigned char *subaddr[23]; }; -/* Defined in TS 102.223 Section 8.4 */ -struct stk_capability_configuration_parameters { - unsigned int ccp_len; - unsigned char *ccp; +/* + * Defined in TS 102.223 Section 8.4 + * + * According to 24.008 Section 10.5.4.5 "The bearer capability is a type 4 + * information element with a minimum length of 3 octets and a maximum length + * of 16 octets." + * + * According to TS 31.102 Section 4.2.38 the CCP length is 15 bytes. + * + * The CCP structure is not decoded, but stored as is from the CTLV + */ +struct stk_ccp { + unsigned char len; + unsigned char ccp[16]; }; /*