Add parser for item text attribute list objects
PATCH 1/17 Add parser for item text attribute list objects
--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 6 ++++++ 2 files changed, 26 insertions(+), 0 deletions(-)
src/stkutil.c +20 -0
@@ -1207,6 +1207,24 @@ static gboolean parse_dataobj_other_address(return TRUE; } +/* Defined in TS 102.223 Section 8.59 */ +static gboolean parse_dataobj_uicc_te_interface ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_uicc_te_interface *uti = user; +const unsigned char *data; +unsigned char len =comprehension_tlv_iter_get_length (iter); + +if (len !=3 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + uti->protocol = data[0 ]; + uti->port = (data[1 ] <<8 ) + data[2 ]; + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1353,6 +1371,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_card_reader_id;case STK_DATA_OBJECT_TYPE_OTHER_ADDRESS :return parse_dataobj_other_address; +case STK_DATA_OBJECT_TYPE_UICC_TE_INTERFACE : +return parse_dataobj_uicc_te_interface;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +6 -0
@@ -570,6 +570,12 @@ struct stk_other_address {unsigned char type; }; +/* Defined in TS 102.223 Section 8.59 */ +struct stk_uicc_te_interface { +unsigned char protocol; +unsigned short port; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
PATCH 2/17 Add parser for aid objects
--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 0 deletions(-)
src/stkutil.c +20 -0
@@ -1225,6 +1225,24 @@ static gboolean parse_dataobj_uicc_te_interface(return TRUE; } +/* Defined in TS 102.223 Section 8.60 */ +static gboolean parse_dataobj_aid (struct comprehension_tlv_iter *iter, +void *user) +{ +struct stk_aid *aid = user; +const unsigned char *data; +unsigned char len =comprehension_tlv_iter_get_length (iter); + +if ((len >16 ) || (len <12 )) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + aid->len = len; +memcpy (aid->aid, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1373,6 +1391,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_other_address;case STK_DATA_OBJECT_TYPE_UICC_TE_INTERFACE :return parse_dataobj_uicc_te_interface; +case STK_DATA_OBJECT_TYPE_AID : +return parse_dataobj_aid;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +23 -0
@@ -337,6 +337,18 @@ enum stk_address_type {STK_ADDRESS_IPV6 =0x57 }; +enum stk_access_technology_type { +STK_ACCESS_TECHNOLOGY_GSM =0x00 , +STK_ACCESS_TECHNOLOGY_TIA_EIA_553 =0x01 , +STK_ACCESS_TECHNOLOGY_TIA_EIA_136_C =0x02 , +STK_ACCESS_TECHNOLOGY_UTRAN =0x03 , +STK_ACCESS_TECHNOLOGY_TETRA =0x04 , +STK_ACCESS_TECHNOLOGY_TIA_EIA_95 =0x05 , +STK_ACCESS_TECHNOLOGY_CDMA2000_1X =0x06 , +STK_ACCESS_TECHNOLOGY_CDMA2000_HRPD =0x07 , +STK_ACCESS_TECHNOLOGY_EUTRAN =0x08 +}; +/* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array {unsigned char *array;
@@ -577,6 +589,17 @@ struct stk_uicc_te_interface { };/* +* Defined in TS 102.223 Section 8.60. +* According to 101.220, Section 4, aid contains two fields RID and PIX. +* RID has 5 bytes, while PIX contains information between 7 to 11 bytes. +* So the maximum size of aid is 16 bytes. +*/ +struct stk_aid { +unsigned char aid[16 ]; +unsigned int len; +}; + +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules * of CTLVs. Empty attribute options will have len of 0.
Signature · 1 line
1.7.0.4
Re: [PATCH 02/17] Add parser for aid objects
Hi Yang,
Quoted 4 lines
--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 23 +++++++++++++++++++++++ 2 files changed, 43 insertions(+), 0 deletions(-)
This patch has been applied. Can you fix / rebase the other patches and resubmit?
Regards,
-Denis
PATCH 3/17 Add parser for access technology objects
In reply to Yang Gu--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 2 files changed, 29 insertions(+), 0 deletions(-)
src/stkutil.c +20 -0
@@ -1243,6 +1243,24 @@ static gboolean parse_dataobj_aid(struct comprehension_tlv_iter *iter,return TRUE; } +/* Defined in TS 102.223 Section 8.61 */ +static gboolean parse_dataobj_access_technology ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_access_technology *at = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len ==0 ) +return TRUE; + + data =comprehension_tlv_iter_get_data (iter); + at->len = len; +memcpy (at->tech, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1393,6 +1411,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_uicc_te_interface;case STK_DATA_OBJECT_TYPE_AID :return parse_dataobj_aid; +case STK_DATA_OBJECT_TYPE_ACCESS_TECHNOLOGY : +return parse_dataobj_access_technology;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +9 -0
@@ -600,6 +600,15 @@ struct stk_aid { };/* +* According to 102.223 Section 8.61 the length of CTLV is 1 byte. This means +* that the maximum size is 127 according to the rules of CTLVs. +*/ +struct stk_access_technology { +unsigned char tech[127 ]; +unsigned char len; +}; + +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules * of CTLVs. Empty attribute options will have len of 0.
Signature · 1 line
1.7.0.4
Re: [PATCH 03/17] Add parser for access technology objects
Hi Yang,
Quoted 9 lines
--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 2 files changed, 29 insertions(+), 0 deletions(-)src/stkutil.c +0
-0
src/stkutil.c
Quoted 9 lines
src/stkutil.c +7
-0/* +* According to 102.223 Section 8.61 the length of CTLV is 1 byte. This means + * that the maximum size is 127 according to the rules of CTLVs. +*/ +struct stk_access_technology { +unsigned char tech[127 ]; +unsigned char len; +}; +
Please look at 3GPP TS 31.124, my interpretation is that access technology is a single byte. 102.223 is not really helping here.
Regards,
-Denis
PATCH 4/17 Add parser for display parameters objects
In reply to Yang Gu--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 27 insertions(+), 0 deletions(-)
src/stkutil.c +20 -0
@@ -1261,6 +1261,24 @@ static gboolean parse_dataobj_access_technology(return TRUE; } +/* Defined in TS 102.223 Section 8.62 */ +static gboolean parse_dataobj_display_parameters ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_display_parameters *dp = user; +const unsigned char *data; + +if (comprehension_tlv_iter_get_length (iter) !=3 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + dp->height = data[0 ]; + dp->width = data[1 ]; + dp->effects = data[2 ]; + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1413,6 +1431,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_aid;case STK_DATA_OBJECT_TYPE_ACCESS_TECHNOLOGY :return parse_dataobj_access_technology; +case STK_DATA_OBJECT_TYPE_DISPLAY_PARAMETERS : +return parse_dataobj_display_parameters;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +7 -0
@@ -608,6 +608,13 @@ struct stk_access_technology {unsigned char len; }; +/* Defined in TS 102.223 Section 8.62 */ +struct stk_display_parameters { +unsigned char height; +unsigned char width; +unsigned char effects; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
PATCH 5/17 Add parser for service record objects
In reply to Yang Gu--- src/stkutil.c | 28 ++++++++++++++++++++++++++++ src/stkutil.h | 16 ++++++++++++++++ 2 files changed, 44 insertions(+), 0 deletions(-)
src/stkutil.c +28 -0
@@ -1279,6 +1279,32 @@ static gboolean parse_dataobj_display_parameters(return TRUE; } +/* Defined in TS 102.223 Section 8.63 */ +static gboolean parse_dataobj_service_record ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_service_record *sr = user; +const unsigned char *data; +unsigned int len; + + len =comprehension_tlv_iter_get_length (iter); +if (len <3 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + sr->tech_id = data[0 ]; + sr->serv_id = data[1 ]; + sr->len = len -2 ; + + sr->serv_rec =g_try_malloc (sr->len); +if (sr->serv_rec ==NULL ) +return FALSE; + +memcpy (sr->serv_rec, data +2 , sr->len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1433,6 +1459,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_access_technology;case STK_DATA_OBJECT_TYPE_DISPLAY_PARAMETERS :return parse_dataobj_display_parameters; +case STK_DATA_OBJECT_TYPE_SERVICE_RECORD : +return parse_dataobj_service_record;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +16 -0
@@ -349,6 +349,14 @@ enum stk_access_technology_type {STK_ACCESS_TECHNOLOGY_EUTRAN =0x08 }; +enum stk_technology_id { +STK_TECHNOLOGY_INDEPENDENT =0x00 , +STK_TECHNOLOGY_BLUETOOTH =0x01 , +STK_TECHNOLOGY_IRDA =0x02 , +STK_TECHNOLOGY_RS232 =0x03 , +STK_TECHNOLOGY_USB =0x04 +}; +/* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array {unsigned char *array;
@@ -615,6 +623,14 @@ struct stk_display_parameters {unsigned char effects; }; +/* Defined in TS 102.223 Section 8.63 */ +struct stk_service_record { +unsigned char tech_id; +unsigned char serv_id; +unsigned char *serv_rec; +unsigned int len; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
Re: [PATCH 05/17] Add parser for service record objects
Hi Yang,
src/stkutil.c static gboolean parse_dataobj_display_parameters( · line 1301
Quoted 3 lines
src/stkutil.c +3
-0+ sr->serv_rec =g_try_malloc (sr->len); +if (sr->serv_rec ==NULL ) +return FALSE;
I suggest not trying to allocate 0 bytes.
Regards,
-Denis
Gu
RE: [PATCH 05/17] Add parser for service record objects
Hi Denis,
Quoted 7 lines
-----Original Message-----
From: ofono-bounces(a)ofono.org [mailto:ofono-bounces(a)ofono.org] On Behalf Of Denis Kenzior
Sent: Wednesday, April 21, 2010 5:56 AM
To: ofono(a)ofono.org
Subject: Re: [PATCH 05/17] Add parser for service record objects
Quoted 7 lines
Hi Yang,
src/stkutil.c static gboolean parse_dataobj_display_parameters( · line 1301
Quoted 3 lines
src/stkutil.c +3
-0+ sr->serv_rec =g_try_malloc (sr->len); +if (sr->serv_rec ==NULL ) +return FALSE;I suggest not trying to allocate 0 bytes.
The service record field is either meaningful value or "00", so it will never allocate 0 byte. Other patches are modified following this comment.
Quoted 7 lines
Regards,
-Denis
_______________________________________________
ofono mailing list
ofono(a)ofono.org
http://lists.ofono.org/listinfo/ofono
Regards,
-Yang
PATCH 6/17 Add parser for device filter objects
In reply to Yang Gu--- src/stkutil.c | 26 ++++++++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 33 insertions(+), 0 deletions(-)
src/stkutil.c +26 -0
@@ -1305,6 +1305,30 @@ static gboolean parse_dataobj_service_record(return TRUE; } +/* Defined in TS 102.223 Section 8.64 */ +static gboolean parse_dataobj_device_filter (struct comprehension_tlv_iter *iter, +void *user) +{ +struct stk_device_filter *df = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len <2 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + df->tech_id = data[0 ]; + df->len = len -1 ; + + df->dev_filter =g_try_malloc (df->len); +if (df->dev_filter ==NULL ) +return FALSE; + +memcpy (df->dev_filter, data +1 , df->len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1461,6 +1485,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_display_parameters;case STK_DATA_OBJECT_TYPE_SERVICE_RECORD :return parse_dataobj_service_record; +case STK_DATA_OBJECT_TYPE_DEVICE_FILTER : +return parse_dataobj_device_filter;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +7 -0
@@ -631,6 +631,13 @@ struct stk_service_record {unsigned int len; }; +/* Defined in TS 102.223 Section 8.64 */ +struct stk_device_filter { +unsigned char tech_id; +unsigned char *dev_filter; +unsigned int len; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
Re: [PATCH 06/17] Add parser for device filter objects
Hi Yang,
src/stkutil.c static gboolean parse_dataobj_service_record( · line 1325
Quoted 3 lines
src/stkutil.c +3
-0+ df->dev_filter =g_try_malloc (df->len); +if (df->dev_filter ==NULL ) +return FALSE;
Again, you might want to handle 0 byte objects here or error out.
Regards,
-Denis
PATCH 7/17 Add parser for service search objects
In reply to Yang Gu--- src/stkutil.c | 26 ++++++++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 33 insertions(+), 0 deletions(-)
src/stkutil.c +26 -0
@@ -1329,6 +1329,30 @@ static gboolean parse_dataobj_device_filter(struct comprehension_tlv_iter *iter,return TRUE; } +/* Defined in TS 102.223 Section 8.65 */ +static gboolean parse_dataobj_service_search ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_service_search *ss = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len <2 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + ss->tech_id = data[0 ]; + ss->len = len -1 ; + + ss->ser_search =g_try_malloc (ss->len); +if (ss->ser_search ==NULL ) +return FALSE; + +memcpy (ss->ser_search, data +1 , ss->len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1487,6 +1511,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_service_record;case STK_DATA_OBJECT_TYPE_DEVICE_FILTER :return parse_dataobj_device_filter; +case STK_DATA_OBJECT_TYPE_SERVICE_SEARCH : +return parse_dataobj_service_search;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +7 -0
@@ -638,6 +638,13 @@ struct stk_device_filter {unsigned int len; }; +/* Defined in TS 102.223 Section 8.65 */ +struct stk_service_search { +unsigned char tech_id; +unsigned char *ser_search; +unsigned int len; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
PATCH 8/17 Add parser for attribute information objects
In reply to Yang Gu--- src/stkutil.c | 26 ++++++++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 33 insertions(+), 0 deletions(-)
src/stkutil.c +26 -0
@@ -1353,6 +1353,30 @@ static gboolean parse_dataobj_service_search(return TRUE; } +/* Defined in TS 102.223 Section 8.66 */ +static gboolean parse_dataobj_attribute_info ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_attribute_info *ai = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len <2 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + ai->tech_id = data[0 ]; + ai->len = len -1 ; + + ai->attr_info =g_try_malloc (ai->len); +if (ai->attr_info ==NULL ) +return FALSE; + +memcpy (ai->attr_info, data +1 , ai->len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1513,6 +1537,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_device_filter;case STK_DATA_OBJECT_TYPE_SERVICE_SEARCH :return parse_dataobj_service_search; +case STK_DATA_OBJECT_TYPE_ATTRIBUTE_INFO : +return parse_dataobj_attribute_info;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +7 -0
@@ -645,6 +645,13 @@ struct stk_service_search {unsigned int len; }; +/* Defined in TS 102.223 Section 8.66 */ +struct stk_attribute_info { +unsigned char tech_id; +unsigned char *attr_info; +unsigned int len; +}; +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules
Signature · 1 line
1.7.0.4
PATCH 9/17 Add parser for service availability objects
In reply to Yang Gu--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -1377,6 +1377,14 @@ static gboolean parse_dataobj_attribute_info(return TRUE; } +/* Defined in TS 102.223 Section 8.67 */ +static gboolean parse_dataobj_service_availability ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_common_byte_array *array = user; +return parse_dataobj_common_byte_array (iter, array); +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1539,6 +1547,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_service_search;case STK_DATA_OBJECT_TYPE_ATTRIBUTE_INFO :return parse_dataobj_attribute_info; +case STK_DATA_OBJECT_TYPE_SERVICE_AVAILABILITY : +return parse_dataobj_service_availability;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
Signature · 1 line
1.7.0.4
PATCH 10/17 Add parser for remote entity address objects
In reply to Yang Gu--- src/stkutil.c | 31 +++++++++++++++++++++++++++++++ src/stkutil.h | 10 ++++++++++ 2 files changed, 41 insertions(+), 0 deletions(-)
src/stkutil.c +31 -0
@@ -1385,6 +1385,35 @@ static gboolean parse_dataobj_service_availability(return parse_dataobj_common_byte_array (iter, array); } +/* Defined in TS 102.223 Section 8.68 */ +static gboolean parse_dataobj_remote_entity_address ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_remote_entity_address *rea = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + + data =comprehension_tlv_iter_get_data (iter); + + rea->coding_type = data[0 ]; +switch (rea->coding_type) { +case 0x00 : +if (len !=7 ) +return FALSE; +break ; +case 0x01 : +if (len !=5 ) +return FALSE; +break ; +default : +return FALSE; + } + +memcpy (rea->addr, data +1 , len -1 ); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1549,6 +1578,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_attribute_info;case STK_DATA_OBJECT_TYPE_SERVICE_AVAILABILITY :return parse_dataobj_service_availability; +case STK_DATA_OBJECT_TYPE_REMOTE_ENTITY_ADDRESS : +return parse_dataobj_remote_entity_address;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +10 -0
@@ -653,6 +653,16 @@ struct stk_attribute_info { };/* +* According to TS 102.223 Section 8.68, remote entity address can be either +* 6-bytes IEEE-802 address, or 4-bytes IrDA device address. So the maximum +* size of address is 6 bytes. +*/ +struct stk_remote_entity_address { +unsigned char coding_type; +unsigned char addr[6 ]; +}; + +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules * of CTLVs. Empty attribute options will have len of 0.
Signature · 1 line
1.7.0.4
Re: [PATCH 10/17] Add parser for remote entity address objects
Hi Yang,
src/stkutil.h struct stk_attribute_info { · line 664
Quoted 10 lines
/*
+ * According to TS 102.223 Section 8.68, remote entity address can be either + * 6-bytes IEEE-802 address, or 4-bytes IrDA device address. So the maximum + * size of address is 6 bytes.
+ */src/stkutil.h +5
-0+struct stk_remote_entity_address { +unsigned char coding_type; +unsigned char addr[6 ]; +}; +
I suggest you use a union here, see stk_other_address for an idea.
Regards,
-Denis
PATCH 11/17 Add parser for esn objects
In reply to Yang Gu--- src/stkutil.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-)
src/stkutil.c +21 -0
@@ -1414,6 +1414,25 @@ static gboolean parse_dataobj_remote_entity_address(return TRUE; } +/* Defined in TS 102.223 Section 8.69 */ +static gboolean parse_dataobj_esn ( +struct comprehension_tlv_iter *iter,void *user) +{ +unsigned char **esn = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len !=4 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + +/* Assume esn is 4 bytes long */ +memcpy (*esn, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1580,6 +1599,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_service_availability;case STK_DATA_OBJECT_TYPE_REMOTE_ENTITY_ADDRESS :return parse_dataobj_remote_entity_address; +case STK_DATA_OBJECT_TYPE_ESN : +return parse_dataobj_esn;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
Signature · 1 line
1.7.0.4
PATCH 12/17 Add parser for network access name objects
In reply to Yang Gu--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 2 files changed, 29 insertions(+), 0 deletions(-)
src/stkutil.c +20 -0
@@ -1433,6 +1433,24 @@ static gboolean parse_dataobj_esn(return TRUE; } +/* Defined in TS 102.223 Section 8.70 */ +static gboolean parse_dataobj_network_access_name ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_network_access_name *nan = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if (len ==0 ) +return TRUE; + + data =comprehension_tlv_iter_get_data (iter); + nan->len = len; +memcpy (nan->name, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1601,6 +1619,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_remote_entity_address;case STK_DATA_OBJECT_TYPE_ESN :return parse_dataobj_esn; +case STK_DATA_OBJECT_TYPE_NETWORK_ACCESS_NAME : +return parse_dataobj_network_access_name;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
src/stkutil.h +9 -0
@@ -663,6 +663,15 @@ struct stk_remote_entity_address { };/* +* According to 102.223 Section 8.70 the length of CTLV is 1 byte. This means +* that the maximum size is 127 according to the rules of CTLVs. +*/ +struct stk_network_access_name { +unsigned char name[127 ]; +unsigned char len; +}; + +/* * According to 102.223 Section 8.72 the length of text attribute CTLV is 1 * byte. This means that the maximum size is 127 according to the rules * of CTLVs. Empty attribute options will have len of 0.
Signature · 1 line
1.7.0.4
PATCH 13/17 Add parser for cdma sms tpdu objects
In reply to Yang Gu--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -1451,6 +1451,14 @@ static gboolean parse_dataobj_network_access_name(return TRUE; } +/* Defined in TS 102.223 Section 8.71 */ +static gboolean parse_dataobj_cdma_sms_tpdu ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_common_byte_array *array = user; +return parse_dataobj_common_byte_array (iter, array); +} +/* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr (struct comprehension_tlv_iter *iter,void *user)
@@ -1621,6 +1629,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_esn;case STK_DATA_OBJECT_TYPE_NETWORK_ACCESS_NAME :return parse_dataobj_network_access_name; +case STK_DATA_OBJECT_TYPE_CDMA_SMS_TPDU : +return parse_dataobj_cdma_sms_tpdu;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_FRAME_ID :
Signature · 1 line
1.7.0.4
PATCH 14/17 Add parser for item text attribute list objects
In reply to Yang Gu--- src/stkutil.c | 21 +++++++++++++++++++++ src/stkutil.h | 11 +++++++++++ 2 files changed, 32 insertions(+), 0 deletions(-)
src/stkutil.c +21 -0
@@ -1480,6 +1480,25 @@ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter,return TRUE; } +/* Defined in TS 102.223 Section 8.73 */ +static gboolean parse_dataobj_item_text_attribute_list ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_item_text_attribute_list *ital = user; +const unsigned char *data; +unsigned int len =comprehension_tlv_iter_get_length (iter); + +if ((len >sizeof (ital->list)) || (len %4 !=0 )) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + +memcpy (ital->list, data, len); + ital->len = len; + +return TRUE; +} +/* Defined in TS 102.223 Section 8.80 */ static gboolean parse_dataobj_frame_id (struct comprehension_tlv_iter *iter,void *user)
@@ -1633,6 +1652,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_cdma_sms_tpdu;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :return parse_dataobj_text_attr; +case STK_DATA_OBJECT_TYPE_ITEM_TEXT_ATTRIBUTE_LIST : +return parse_dataobj_item_text_attribute_list;case STK_DATA_OBJECT_TYPE_FRAME_ID :return parse_dataobj_frame_id;default :
src/stkutil.h +11 -0
@@ -681,6 +681,17 @@ struct stk_text_attribute {unsigned char len; }; +/* +* According to 102.223 Section 8.73 the length of CTLV is 1 byte. This means +* that the maximum size is 127 according to the rules of CTLVs. In addition, +* the length should be also the number multiplied by 4, so the maximum number +* is 124. +*/ +struct stk_item_text_attribute_list { +unsigned char list[124 ]; +unsigned char len; +}; +struct stk_command_display_text {char *text;struct stk_icon_id icon_id;
Signature · 1 line
1.7.0.4
PATCH 15/17 Add parser for imeisv objects
In reply to Yang Gu--- src/stkutil.c | 45 +++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 45 insertions(+), 0 deletions(-)
src/stkutil.c +45 -0
@@ -1499,6 +1499,49 @@ static gboolean parse_dataobj_item_text_attribute_list(return TRUE; } +/* +* Defined in TS 102.223 Section 8.74. +* +* According to 3GPP TS 24.008, Section 10.5.1.4, IMEISV is composed of +* 16 digits and totally 9 bytes are used to represent it. +* +* Bits 1-3 of first byte represent the type of identity, and they +* are 0 1 1 separately for IMEISV. Bit 4 of first byte is the odd/even +* indication, and it's 0 to indicate IMEISV has odd number of digits (16). +* The rest bytes are coded using BCD coding. +* +* For example, if the IMEISV is "1234567890123456", then it's coded as +* "13 32 54 76 98 10 32 54 F6". +*/ +static gboolean parse_dataobj_imeisv (struct comprehension_tlv_iter *iter, +void *user) +{ +char **imeisv = user; +const unsigned char *data; +unsigned int len; +static const char digit_lut[] ="0123456789*#abc\0" ; + + len =comprehension_tlv_iter_get_length (iter); +if (len !=9 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + +if ((data[0 ] &0x0f ) !=0x03 ) +return FALSE; + +if (data[8 ] >>4 !=0x0f ) +return FALSE; + +/* Assume imeisv is at least 17 bytes long (16 for imeisv + null) */ + (*imeisv)[0 ] = digit_lut[data[0 ] >>4 ]; +extract_bcd_number (data +1 ,7 , *imeisv +1 ); + (*imeisv)[15 ] = digit_lut[data[8 ] &0x0f ]; + (*imeisv)[16 ] ='\0' ; + +return TRUE; +} +/* Defined in TS 102.223 Section 8.80 */ static gboolean parse_dataobj_frame_id (struct comprehension_tlv_iter *iter,void *user)
@@ -1654,6 +1697,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_text_attr;case STK_DATA_OBJECT_TYPE_ITEM_TEXT_ATTRIBUTE_LIST :return parse_dataobj_item_text_attribute_list; +case STK_DATA_OBJECT_TYPE_IMEISV : +return parse_dataobj_imeisv;case STK_DATA_OBJECT_TYPE_FRAME_ID :return parse_dataobj_frame_id;default :
Signature · 1 line
1.7.0.4
PATCH 16/17 Add parser for network search mode objects
In reply to Yang Gu--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -1542,6 +1542,14 @@ static gboolean parse_dataobj_imeisv(struct comprehension_tlv_iter *iter,return TRUE; } +/* Defined in TS 102.223 Section 8.75 */ +static gboolean parse_dataobj_network_search_mode ( +struct comprehension_tlv_iter *iter,void *user) +{ +unsigned char *byte = user; +return parse_dataobj_common_byte (iter, byte); +} +/* Defined in TS 102.223 Section 8.80 */ static gboolean parse_dataobj_frame_id (struct comprehension_tlv_iter *iter,void *user)
@@ -1699,6 +1707,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_item_text_attribute_list;case STK_DATA_OBJECT_TYPE_IMEISV :return parse_dataobj_imeisv; +case STK_DATA_OBJECT_TYPE_NETWORK_SEARCH_MODE : +return parse_dataobj_network_search_mode;case STK_DATA_OBJECT_TYPE_FRAME_ID :return parse_dataobj_frame_id;default :
Signature · 1 line
1.7.0.4
PATCH 17/17 Add parser for battery state objects
In reply to Yang Gu--- src/stkutil.c | 10 ++++++++++ src/stkutil.h | 8 ++++++++ 2 files changed, 18 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -1550,6 +1550,14 @@ static gboolean parse_dataobj_network_search_mode(return parse_dataobj_common_byte (iter, byte); } +/* Defined in TS 102.223 Section 8.76 */ +static gboolean parse_dataobj_battery_state (struct comprehension_tlv_iter *iter, +void *user) +{ +unsigned char *byte = user; +return parse_dataobj_common_byte (iter, byte); +} +/* Defined in TS 102.223 Section 8.80 */ static gboolean parse_dataobj_frame_id (struct comprehension_tlv_iter *iter,void *user)
@@ -1709,6 +1717,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_imeisv;case STK_DATA_OBJECT_TYPE_NETWORK_SEARCH_MODE :return parse_dataobj_network_search_mode; +case STK_DATA_OBJECT_TYPE_BATTERY_STATE : +return parse_dataobj_battery_state;case STK_DATA_OBJECT_TYPE_FRAME_ID :return parse_dataobj_frame_id;default :
src/stkutil.h +8 -0
@@ -357,6 +357,14 @@ enum stk_technology_id {STK_TECHNOLOGY_USB =0x04 }; +enum stk_battery_state { +STK_BATTERY_VERY_LOW =0x00 , +STK_BATTERY_LOW =0x01 , +STK_BATTERY_AVERAGE =0x02 , +STK_BATTERY_GOOD =0x03 , +STK_BATTERY_FULL =0x04 +}; +/* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array {unsigned char *array;
Signature · 1 line
1.7.0.4
Hi Yang,
Quoted 4 lines
--- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 6 ++++++ 2 files changed, 26 insertions(+), 0 deletions(-)
This patch has been applied, thanks.
Regards,
-Denis