diff options
author | Denis Kenzior <denkenz@gmail.com> | 2010-03-11 14:43:59 -0600 |
---|---|---|
committer | Denis Kenzior <denkenz@gmail.com> | 2010-03-15 21:02:06 -0500 |
commit | 44476dac9e66267549337ab082bb41d6af069f18 (patch) | |
tree | 715d148bb5466595544b848ad9e13e94685c3fdf /src | |
parent | e5dff20ff5bfd3052c190374315d21ed8d7eda78 (diff) | |
download | ofono-44476dac9e66267549337ab082bb41d6af069f18.tar.bz2 |
Refactor: stk configuration capability parameters
Diffstat (limited to 'src')
-rw-r--r-- | src/stkutil.c | 18 | ||||
-rw-r--r-- | 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]; }; /* |