Refactor: stk configuration capability parameters
authorDenis Kenzior <denkenz@gmail.com>
Thu, 11 Mar 2010 20:43:59 +0000 (14:43 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Tue, 16 Mar 2010 02:02:06 +0000 (21:02 -0500)
src/stkutil.c
src/stkutil.h

index 136efd5..6cd539b 100644 (file)
@@ -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:
index d225dd4..4b2c046 100644 (file)
@@ -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];
 };
 
 /*