* [PATCH 01/13] Fix the logic when parsing c-apdu objects @ 2010-04-06 10:06 Yang Gu 2010-04-06 10:06 ` [PATCH 02/13] Add parser for url objects Yang Gu 2010-04-14 18:13 ` [PATCH 01/13] Fix the logic when parsing c-apdu objects Denis Kenzior 0 siblings, 2 replies; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 416 bytes --] --- src/stkutil.c | 1 - 1 files changed, 0 insertions(+), 1 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 13c2978..3fac701 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -852,7 +852,6 @@ static gboolean parse_dataobj_c_apdu(struct comprehension_tlv_iter *iter, } if (len - pos > 0) { - ca->lc = 0; ca->le = data[len - 1]; ca->has_le = TRUE; } -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 02/13] Add parser for url objects 2010-04-06 10:06 [PATCH 01/13] Fix the logic when parsing c-apdu objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 03/13] Add parser for bearer objects Yang Gu 2010-04-14 18:13 ` [PATCH 01/13] Fix the logic when parsing c-apdu objects Denis Kenzior 1 sibling, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1133 bytes --] --- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 3fac701..2fc5287 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1014,6 +1014,14 @@ static gboolean parse_dataobj_browser_id(struct comprehension_tlv_iter *iter, return parse_dataobj_common_byte(iter, byte); } +/* Defined in TS 102.223 Section 8.48 */ +static gboolean parse_dataobj_url(struct comprehension_tlv_iter *iter, + void *user) +{ + char **url = user; + return parse_dataobj_common_text(iter, url); +} + /* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1138,6 +1146,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_language; case STK_DATA_OBJECT_TYPE_BROWSER_ID: return parse_dataobj_browser_id; + case STK_DATA_OBJECT_TYPE_URL: + return parse_dataobj_url; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 03/13] Add parser for bearer objects 2010-04-06 10:06 ` [PATCH 02/13] Add parser for url objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 04/13] Break out stk_file iterator to parse file list objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1660 bytes --] --- src/stkutil.c | 10 ++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 17 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 2fc5287..c249a3a 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1022,6 +1022,14 @@ static gboolean parse_dataobj_url(struct comprehension_tlv_iter *iter, return parse_dataobj_common_text(iter, url); } +/* Defined in TS 102.223 Section 8.49 */ +static gboolean parse_dataobj_bearer(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) @@ -1148,6 +1156,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_browser_id; case STK_DATA_OBJECT_TYPE_URL: return parse_dataobj_url; + case STK_DATA_OBJECT_TYPE_BEARER: + return parse_dataobj_bearer; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: diff --git a/src/stkutil.h b/src/stkutil.h index 3f96159..3dcb2c3 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -309,6 +309,13 @@ enum stk_browser_id { STK_BROWSER_ID_CHTML = 0x04 }; +enum stk_bearer { + STK_BEARER_SMS = 0x00, + STK_BEARER_CS_DATA = 0x01, + STK_BEARER_GSM_3G = 0x02, + STK_BEARER_PS = 0x03 +}; + /* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array { unsigned char *array; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 04/13] Break out stk_file iterator to parse file list objects 2010-04-06 10:06 ` [PATCH 03/13] Add parser for bearer objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 05/13] Add parser for provisioning file reference objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 5205 bytes --] --- src/stkutil.c | 166 +++++++++++++++++++++++++++++++++------------------------ 1 files changed, 97 insertions(+), 69 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index c249a3a..8b53e6d 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -39,6 +39,14 @@ enum stk_data_object_flag { DATAOBJ_FLAG_MINIMUM = 2 }; +struct stk_file_iter { + const unsigned char *start; + unsigned int pos; + unsigned int max; + unsigned char len; + const unsigned char *file; +}; + typedef gboolean (*dataobj_handler)(struct comprehension_tlv_iter *, void *); /* @@ -157,6 +165,86 @@ static gboolean parse_dataobj_common_byte_array( return TRUE; } +static void stk_file_iter_init(struct stk_file_iter *iter, + const unsigned char *start, unsigned int len) +{ + iter->start = start; + iter->max = len; + iter->pos = 0; +} + +static gboolean stk_file_iter_next(struct stk_file_iter *iter) +{ + unsigned int pos = iter->pos; + const unsigned int max = iter->max; + const unsigned char *start = iter->start; + unsigned int i; + unsigned char last_type; + + /* SIM EFs always start with ROOT MF, 0x3f */ + if (start[iter->pos] != 0x3f) + return FALSE; + + if (pos + 2 >= max) + return FALSE; + + last_type = 0x3f; + + for (i = pos + 2; i < max; i += 2) { + /* + * Check the validity of file type. + * According to TS 11.11, each file id contains of two bytes, + * in which the first byte is the type of file. For GSM is: + * 0x3f: master file + * 0x7f: 1st level dedicated file + * 0x5f: 2nd level dedicated file + * 0x2f: elementary file under the master file + * 0x6f: elementary file under 1st level dedicated file + * 0x4f: elementary file under 2nd level dedicated file + */ + switch (start[i]) { + case 0x2f: + if (last_type != 0x3f) + return FALSE; + break; + case 0x6f: + if (last_type != 0x7f) + return FALSE; + break; + case 0x4f: + if (last_type != 0x5f) + return FALSE; + break; + case 0x7f: + if (last_type != 0x3f) + return FALSE; + break; + case 0x5f: + if (last_type != 0x7f) + return FALSE; + break; + default: + return FALSE; + } + + if ((start[i] == 0x2f) || (start[i] == 0x6f) || + (start[i] == 0x4f)) { + if (i + 1 >= max) + return FALSE; + + iter->file = start + pos; + iter->len = i - pos + 2; + iter->pos = i + 2; + + return TRUE; + } + + last_type = start[i]; + } + + return FALSE; +} + /* Defined in TS 102.223 Section 8.1 */ static gboolean parse_dataobj_address(struct comprehension_tlv_iter *iter, void *user) @@ -443,10 +531,8 @@ static gboolean parse_dataobj_file_list(struct comprehension_tlv_iter *iter, GSList **fl = user; const unsigned char *data; unsigned int len; - unsigned int i; - unsigned int start; struct stk_file *sf; - unsigned char last_type; + struct stk_file_iter sf_iter; len = comprehension_tlv_iter_get_length(iter); if (len < 5) @@ -454,77 +540,19 @@ static gboolean parse_dataobj_file_list(struct comprehension_tlv_iter *iter, data = comprehension_tlv_iter_get_data(iter); - /* SIM EFs always start with ROOT MF, 0x3f */ - if (data[1] != 0x3f) - return FALSE; - - start = 1; - last_type = 0x3f; - - for (i = 3; i < len; i += 2) { - /* - * Check the validity of file type. - * According to TS 11.11, each file id contains of two bytes, - * in which the first byte is the type of file. For GSM is: - * 0x3f: master file - * 0x7f: 1st level dedicated file - * 0x5f: 2nd level dedicated file - * 0x2f: elementary file under the master file - * 0x6f: elementary file under 1st level dedicated file - * 0x4f: elementary file under 2nd level dedicated file - */ - switch (data[i]) { - case 0x3f: - if ((last_type != 0x2f) && (last_type != 0x6f) && - (last_type != 0x4f)) - goto error; - - start = i; + stk_file_iter_init(&sf_iter, data + 1, len - 1); - break; - case 0x2f: - if (last_type != 0x3f) - goto error; - break; - case 0x6f: - if (last_type != 0x7f) - goto error; - break; - case 0x4f: - if (last_type != 0x5f) - goto error; - break; - case 0x7f: - if (last_type != 0x3f) - goto error; - break; - case 0x5f: - if (last_type != 0x7f) - goto error; - break; - default: + while (stk_file_iter_next(&sf_iter)) { + sf = g_try_new0(struct stk_file, 1); + if (sf == NULL) goto error; - } - - if ((data[i] == 0x2f) || (data[i] == 0x6f) || - (data[i] == 0x4f)) { - if (i + 1 >= len) - goto error; - - sf = g_try_new0(struct stk_file, 1); - if (sf == NULL) - goto error; - - sf->len = i - start + 2; - memcpy(sf->file, data + start, i - start + 2); - *fl = g_slist_prepend(*fl, sf); - } - last_type = data[i]; + sf->len = sf_iter.len; + memcpy(sf->file, sf_iter.file, sf_iter.len); + *fl = g_slist_prepend(*fl, sf); } - if ((data[len - 2] != 0x2f) && (data[len - 2] != 0x6f) && - (data[len - 2] != 0x4f)) + if (sf_iter.pos != sf_iter.max) goto error; *fl = g_slist_reverse(*fl); -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 05/13] Add parser for provisioning file reference objects 2010-04-06 10:06 ` [PATCH 04/13] Break out stk_file iterator to parse file list objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 06/13] Add parser for browser termination cause objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1607 bytes --] --- src/stkutil.c | 28 ++++++++++++++++++++++++++++ 1 files changed, 28 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 8b53e6d..2b551e2 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1058,6 +1058,32 @@ static gboolean parse_dataobj_bearer(struct comprehension_tlv_iter *iter, return parse_dataobj_common_byte_array(iter, array); } +/* Defined in TS 102.223 Section 8.50 */ +static gboolean parse_dataobj_provisioning_file_reference( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_file *f = user; + const unsigned char *data; + struct stk_file_iter sf_iter; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if ((len < 1) || (len > 8)) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + + stk_file_iter_init(&sf_iter, data, len); + stk_file_iter_next(&sf_iter); + + if (sf_iter.pos != sf_iter.max) + return FALSE; + + f->len = len; + memcpy(f->file, 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) @@ -1186,6 +1212,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_url; case STK_DATA_OBJECT_TYPE_BEARER: return parse_dataobj_bearer; + case STK_DATA_OBJECT_TYPE_PROVISIONING_FILE_REFERENCE: + return parse_dataobj_provisioning_file_reference; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 06/13] Add parser for browser termination cause objects 2010-04-06 10:06 ` [PATCH 05/13] Add parser for provisioning file reference objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 07/13] Add parser for bearer description objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1667 bytes --] --- src/stkutil.c | 10 ++++++++++ src/stkutil.h | 5 +++++ 2 files changed, 15 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 2b551e2..4998440 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1084,6 +1084,14 @@ static gboolean parse_dataobj_provisioning_file_reference( return TRUE; } +/* Defined in 102.223 Section 8.51 */ +static gboolean parse_dataobj_browser_termination_cause( + 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.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1214,6 +1222,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_bearer; case STK_DATA_OBJECT_TYPE_PROVISIONING_FILE_REFERENCE: return parse_dataobj_provisioning_file_reference; + case STK_DATA_OBJECT_TYPE_BROWSER_TERMINATION_CAUSE: + return parse_dataobj_browser_termination_cause; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: diff --git a/src/stkutil.h b/src/stkutil.h index 3dcb2c3..746c5ff 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -316,6 +316,11 @@ enum stk_bearer { STK_BEARER_PS = 0x03 }; +enum stk_browser_termination_cause { + STK_BROWSER_USER_TERMINATION = 0x00, + STK_BROWSER_ERROR_TERMINATION = 0x01 +}; + /* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array { unsigned char *array; -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 07/13] Add parser for bearer description objects 2010-04-06 10:06 ` [PATCH 06/13] Add parser for browser termination cause objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 08/13] Add parser for channel data objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2870 bytes --] --- src/stkutil.c | 21 +++++++++++++++++++++ src/stkutil.h | 23 +++++++++++++++++++++++ 2 files changed, 44 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 4998440..f27ff69 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1092,6 +1092,25 @@ static gboolean parse_dataobj_browser_termination_cause( return parse_dataobj_common_byte(iter, byte); } +/* Defined in TS 102.223 Section 8.52 */ +static gboolean parse_dataobj_bearer_description( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_bearer_description *bd = user; + const unsigned char *data; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if (len < 1) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + bd->type = data[0]; + bd->len = len - 1; + memcpy(bd->pars, data + 1, bd->len); + + return TRUE; +} + /* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1224,6 +1243,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_provisioning_file_reference; case STK_DATA_OBJECT_TYPE_BROWSER_TERMINATION_CAUSE: return parse_dataobj_browser_termination_cause; + case STK_DATA_OBJECT_TYPE_BEARER_DESCRIPTION: + return parse_dataobj_bearer_description; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: diff --git a/src/stkutil.h b/src/stkutil.h index 746c5ff..c1b9af0 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -321,6 +321,17 @@ enum stk_browser_termination_cause { STK_BROWSER_ERROR_TERMINATION = 0x01 }; +enum stk_bearer_type { + STK_BEARER_TYPE_DEFAULT = 0x03, + STK_BEARER_TYPE_INDEPENDENT = 0x04, + STK_BEARER_TYPE_BLUETOOTH = 0x05, + STK_BEARER_TYPE_IRDA = 0x06, + STK_BEARER_TYPE_RS232 = 0x07, + STK_BEARER_TYPE_PACKET_DATA_SERVICE = 0x08, + STK_BEARER_TYPE_I_WLAN = 0x0a, + STK_BEARER_TYPE_USB = 0x10 +}; + /* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array { unsigned char *array; @@ -521,6 +532,18 @@ struct stk_timer_value { }; /* + * According to 102.223 Section 8.52 the length of CTLV is 1 byte. This means + * that the maximum size is 127 according to the rules of CTLVs. This size also + * includes bearer type for 1 byte, so the maxmimum size of bearer parameters + * is 126. + */ +struct stk_bearer_description { + unsigned char type; + unsigned char pars[126]; + 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. -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 08/13] Add parser for channel data objects 2010-04-06 10:06 ` [PATCH 07/13] Add parser for bearer description objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 09/13] Add parser for channel data length objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1166 bytes --] --- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index f27ff69..0c9108f 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1111,6 +1111,14 @@ static gboolean parse_dataobj_bearer_description( return TRUE; } +/* Defined in TS 102.223 Section 8.53 */ +static gboolean parse_dataobj_channel_data(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) @@ -1245,6 +1253,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_browser_termination_cause; case STK_DATA_OBJECT_TYPE_BEARER_DESCRIPTION: return parse_dataobj_bearer_description; + case STK_DATA_OBJECT_TYPE_CHANNEL_DATA: + return parse_dataobj_channel_data; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 09/13] Add parser for channel data length objects 2010-04-06 10:06 ` [PATCH 08/13] Add parser for channel data objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 10/13] Add parser for buffer size objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1212 bytes --] --- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 0c9108f..b841fa6 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1119,6 +1119,14 @@ static gboolean parse_dataobj_channel_data(struct comprehension_tlv_iter *iter, return parse_dataobj_common_byte_array(iter, array); } +/* Defined in TS 102.223 Section 8.54 */ +static gboolean parse_dataobj_channel_data_length( + 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.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1255,6 +1263,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_bearer_description; case STK_DATA_OBJECT_TYPE_CHANNEL_DATA: return parse_dataobj_channel_data; + case STK_DATA_OBJECT_TYPE_CHANNEL_DATA_LENGTH: + return parse_dataobj_channel_data_length; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 10/13] Add parser for buffer size objects 2010-04-06 10:06 ` [PATCH 09/13] Add parser for channel data length objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 11/13] Add parser for channel status objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1335 bytes --] --- src/stkutil.c | 18 ++++++++++++++++++ 1 files changed, 18 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index b841fa6..30c476d 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1127,6 +1127,22 @@ static gboolean parse_dataobj_channel_data_length( return parse_dataobj_common_byte(iter, byte); } +/* Defined in TS 102.223 Section 8.55 */ +static gboolean parse_dataobj_buffer_size(struct comprehension_tlv_iter *iter, + void *user) +{ + unsigned short *size = user; + const unsigned char *data; + + if (comprehension_tlv_iter_get_length(iter) != 2) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + *size = (data[0] << 8) + data[1]; + + return TRUE; +} + /* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1265,6 +1281,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_channel_data; case STK_DATA_OBJECT_TYPE_CHANNEL_DATA_LENGTH: return parse_dataobj_channel_data_length; + case STK_DATA_OBJECT_TYPE_BUFFER_SIZE: + return parse_dataobj_buffer_size; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 11/13] Add parser for channel status objects 2010-04-06 10:06 ` [PATCH 10/13] Add parser for buffer size objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 12/13] Add parser for card reader identifier objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1372 bytes --] --- src/stkutil.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 30c476d..01124a5 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1143,6 +1143,24 @@ static gboolean parse_dataobj_buffer_size(struct comprehension_tlv_iter *iter, return TRUE; } +/* Defined in TS 102.223 Section 8.56 */ +static gboolean parse_dataobj_channel_status( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char *status = user; + const unsigned char *data; + + if (comprehension_tlv_iter_get_length(iter) != 2) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + + /* Assume channel status is 2 bytes long */ + memcpy(status, 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) @@ -1283,6 +1301,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_channel_data_length; case STK_DATA_OBJECT_TYPE_BUFFER_SIZE: return parse_dataobj_buffer_size; + case STK_DATA_OBJECT_TYPE_CHANNEL_STATUS: + return parse_dataobj_channel_status; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 12/13] Add parser for card reader identifier objects 2010-04-06 10:06 ` [PATCH 11/13] Add parser for channel status objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 2010-04-06 10:06 ` [PATCH 13/13] Add parser for other address objects Yang Gu 0 siblings, 1 reply; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2024 bytes --] --- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 01124a5..28a09d9 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1161,6 +1161,24 @@ static gboolean parse_dataobj_channel_status( return TRUE; } +/* Defined in TS 102.223 Section 8.57 */ +static gboolean parse_dataobj_card_reader_id( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_card_reader_id *cr_id = user; + const unsigned char *data; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if (len < 1) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + cr_id->len = len; + memcpy(cr_id->id, 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) @@ -1303,6 +1321,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_buffer_size; case STK_DATA_OBJECT_TYPE_CHANNEL_STATUS: return parse_dataobj_channel_status; + case STK_DATA_OBJECT_TYPE_CARD_READER_ID: + return parse_dataobj_card_reader_id; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: diff --git a/src/stkutil.h b/src/stkutil.h index c1b9af0..511b912 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -544,6 +544,15 @@ struct stk_bearer_description { }; /* + * According to 102.223 Section 8.57 the length of CTLV is 1 byte. This means + * that the maximum size is 127 according to the rules of CTLVs. + */ +struct stk_card_reader_id { + unsigned char id[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. -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 13/13] Add parser for other address objects 2010-04-06 10:06 ` [PATCH 12/13] Add parser for card reader identifier objects Yang Gu @ 2010-04-06 10:06 ` Yang Gu 0 siblings, 0 replies; 14+ messages in thread From: Yang Gu @ 2010-04-06 10:06 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2375 bytes --] --- src/stkutil.c | 23 +++++++++++++++++++++++ src/stkutil.h | 14 ++++++++++++++ 2 files changed, 37 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 28a09d9..7d9e2e0 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -1179,6 +1179,27 @@ static gboolean parse_dataobj_card_reader_id( return TRUE; } +/* Defined in TS 102.223 Section 8.58 */ +static gboolean parse_dataobj_other_address( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_other_address *oa = user; + const unsigned char *data; + unsigned char len = comprehension_tlv_iter_get_length(iter); + + if (len == 0) + return TRUE; + + if ((len != 5) && (len != 17)) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + oa->type = data[0]; + memcpy(oa->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) @@ -1323,6 +1344,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_channel_status; case STK_DATA_OBJECT_TYPE_CARD_READER_ID: return parse_dataobj_card_reader_id; + case STK_DATA_OBJECT_TYPE_OTHER_ADDRESS: + return parse_dataobj_other_address; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: return parse_dataobj_text_attr; case STK_DATA_OBJECT_TYPE_FRAME_ID: diff --git a/src/stkutil.h b/src/stkutil.h index 511b912..0811048 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -332,6 +332,11 @@ enum stk_bearer_type { STK_BEARER_TYPE_USB = 0x10 }; +enum stk_address_type { + STK_ADDRESS_IPV4 = 0x21, + STK_ADDRESS_IPV6 = 0x57 +}; + /* For data object that only has a byte array with undetermined length */ struct stk_common_byte_array { unsigned char *array; @@ -553,6 +558,15 @@ struct stk_card_reader_id { }; /* + * According to 102.223 Section 8.58 the address can be either ipv4 or ipv6. + * So the maximum size is 16 (for ipv6). + */ +struct stk_other_address { + unsigned char addr[16]; + unsigned char type; +}; + +/* * 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. -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 01/13] Fix the logic when parsing c-apdu objects 2010-04-06 10:06 [PATCH 01/13] Fix the logic when parsing c-apdu objects Yang Gu 2010-04-06 10:06 ` [PATCH 02/13] Add parser for url objects Yang Gu @ 2010-04-14 18:13 ` Denis Kenzior 1 sibling, 0 replies; 14+ messages in thread From: Denis Kenzior @ 2010-04-14 18:13 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 201 bytes --] Hi Yang, > --- > src/stkutil.c | 1 - > 1 files changed, 0 insertions(+), 1 deletions(-) > All 13 patches have now been applied upstream with minor fixed in-between. Regards, -Denis ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2010-04-14 18:13 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-04-06 10:06 [PATCH 01/13] Fix the logic when parsing c-apdu objects Yang Gu 2010-04-06 10:06 ` [PATCH 02/13] Add parser for url objects Yang Gu 2010-04-06 10:06 ` [PATCH 03/13] Add parser for bearer objects Yang Gu 2010-04-06 10:06 ` [PATCH 04/13] Break out stk_file iterator to parse file list objects Yang Gu 2010-04-06 10:06 ` [PATCH 05/13] Add parser for provisioning file reference objects Yang Gu 2010-04-06 10:06 ` [PATCH 06/13] Add parser for browser termination cause objects Yang Gu 2010-04-06 10:06 ` [PATCH 07/13] Add parser for bearer description objects Yang Gu 2010-04-06 10:06 ` [PATCH 08/13] Add parser for channel data objects Yang Gu 2010-04-06 10:06 ` [PATCH 09/13] Add parser for channel data length objects Yang Gu 2010-04-06 10:06 ` [PATCH 10/13] Add parser for buffer size objects Yang Gu 2010-04-06 10:06 ` [PATCH 11/13] Add parser for channel status objects Yang Gu 2010-04-06 10:06 ` [PATCH 12/13] Add parser for card reader identifier objects Yang Gu 2010-04-06 10:06 ` [PATCH 13/13] Add parser for other address objects Yang Gu 2010-04-14 18:13 ` [PATCH 01/13] Fix the logic when parsing c-apdu objects Denis Kenzior
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox