Add parser for subaddress objects
authorYang Gu <yang.gu@intel.com>
Fri, 5 Mar 2010 04:43:34 +0000 (12:43 +0800)
committerDenis Kenzior <denkenz@gmail.com>
Wed, 10 Mar 2010 19:14:12 +0000 (13:14 -0600)
src/stkutil.c
src/stkutil.h

index 22bef30..0c49ff9 100644 (file)
@@ -89,6 +89,30 @@ static gboolean parse_dataobj_alpha_identifier(
        return TRUE;
 }
 
+/* Defined in TS 102.223 Section 8.3 */
+static gboolean parse_dataobj_subaddress(
+               struct comprehension_tlv_iter *iter, void *user)
+{
+       struct stk_subaddress *subaddr = user;
+       const unsigned char *data;
+       unsigned int len;
+
+       if (comprehension_tlv_iter_get_tag(iter) !=
+                       STK_DATA_OBJECT_TYPE_SUBADDRESS)
+               return FALSE;
+
+       len = comprehension_tlv_iter_get_length(iter);
+       if (len < 1)
+               return FALSE;
+
+       data = comprehension_tlv_iter_get_data(iter);
+       subaddr->subaddr_len = len;
+       subaddr->subaddr = g_malloc(len);
+       memcpy(subaddr->subaddr, data, len);
+
+       return TRUE;
+}
+
 /* Described in TS 102.223 Section 8.8 */
 static gboolean parse_dataobj_duration(struct comprehension_tlv_iter *iter,
                                        void *user)
@@ -305,6 +329,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)
                return parse_dataobj_address;
        case STK_DATA_OBJECT_TYPE_ALPHA_IDENTIFIER:
                return parse_dataobj_alpha_identifier;
+       case STK_DATA_OBJECT_TYPE_SUBADDRESS:
+               return parse_dataobj_subaddress;
        case STK_DATA_OBJECT_TYPE_DURATION:
                return parse_dataobj_duration;
        case STK_DATA_OBJECT_TYPE_RESPONSE_LENGTH:
index 4576ddd..544d104 100644 (file)
@@ -199,6 +199,12 @@ struct stk_address {
        char *number;
 };
 
+/* Defined in TS 102.223 Section 8.3 */
+struct stk_subaddress {
+       unsigned int subaddr_len;
+       unsigned char *subaddr;
+};
+
 /*
  * Icon ID denotes a file on the SIM filesystem.  Since EF cannot have record
  * ids of 0, we use icon_id with 0 to denote empty icon_identifier objects