* [PATCH 01/15] Add parser for card reader status objects @ 2010-04-02 6:20 Yang Gu 2010-04-02 6:20 ` [PATCH 02/15] Add parser for card atr objects Yang Gu 2010-04-02 16:29 ` [PATCH 01/15] Add parser for card reader status objects Denis Kenzior 0 siblings, 2 replies; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1142 bytes --] --- src/stkutil.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index b61ff39..5b258ab 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -762,6 +762,15 @@ static gboolean parse_dataobj_item_icon_id_list( return TRUE; } +/* Defined in TS 102.223 Section 8.33 */ +static gboolean parse_dataobj_card_reader_status( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char *byte = user; + + return parse_dataobj_common_byte(iter, byte); +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -866,6 +875,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_icon_id; case STK_DATA_OBJECT_TYPE_ITEM_ICON_ID_LIST: return parse_dataobj_item_icon_id_list; + case STK_DATA_OBJECT_TYPE_CARD_READER_STATUS: + return parse_dataobj_card_reader_status; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 02/15] Add parser for card atr objects 2010-04-02 6:20 [PATCH 01/15] Add parser for card reader status objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 03/15] Add parser for c-apdu objects Yang Gu 2010-04-02 16:29 ` [PATCH 01/15] Add parser for card reader status objects Denis Kenzior 1 sibling, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2065 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 5b258ab..a96132c 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -771,6 +771,24 @@ static gboolean parse_dataobj_card_reader_status( return parse_dataobj_common_byte(iter, byte); } +/* Defined in TS 102.223 Section 8.34 */ +static gboolean parse_dataobj_card_atr( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_card_atr *ca = user; + const unsigned char *data; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if ((len < 1) || (len > sizeof(ca->atr))) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + ca->len = len; + memcpy(ca->atr, data, len); + + return TRUE; +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -877,6 +895,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_item_icon_id_list; case STK_DATA_OBJECT_TYPE_CARD_READER_STATUS: return parse_dataobj_card_reader_status; + case STK_DATA_OBJECT_TYPE_CARD_ATR: + return parse_dataobj_card_atr; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: diff --git a/src/stkutil.h b/src/stkutil.h index 4ff8c4b..8047ed1 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -460,6 +460,15 @@ struct stk_item_icon_id_list { }; /* + * According to 102.223 Section 8.34 the length of CTLV is 1 byte. This means + * that the maximum size is 127 according to the rules of CTLVs. + */ +struct stk_card_atr { + unsigned char atr[127]; + 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] 16+ messages in thread
* [PATCH 03/15] Add parser for c-apdu objects 2010-04-02 6:20 ` [PATCH 02/15] Add parser for card atr objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 04/15] Add parser for r-apdu objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2702 bytes --] --- src/stkutil.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/stkutil.h | 15 +++++++++++++++ 2 files changed, 59 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index a96132c..99e6622 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -789,6 +789,48 @@ static gboolean parse_dataobj_card_atr( return TRUE; } +/* Defined in TS 102.223 Section 8.35 */ +static gboolean parse_dataobj_c_apdu( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_c_apdu *ca = user; + const unsigned char *data; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if ((len < 4) || (len > 241)) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + ca->cla = data[0]; + ca->ins = data[1]; + ca->p1 = data[2]; + ca->p2 = data[3]; + + /* lc is 0 has the same meaning as lc is absent. But le is 0 means + * the maximum number of bytes expected in the response data field + * is 256. So we need to rely on has_le to know if it presents. + */ + if (len > 5) { + ca->lc = data[4]; + if (ca->lc > sizeof(ca->data)) + return FALSE; + + memcpy(ca->data, data+5, ca->lc); + + if ((len - ca->lc) == 6) { + ca->le = data[len-1]; + ca->has_le = TRUE; + } else if (len - ca->lc != 5) + return FALSE; + } else if (len == 5) { + ca->lc = 0; + ca->le = data[4]; + ca->has_le = TRUE; + } + + return TRUE; +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -897,6 +939,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_card_reader_status; case STK_DATA_OBJECT_TYPE_CARD_ATR: return parse_dataobj_card_atr; + case STK_DATA_OBJECT_TYPE_C_APDU: + return parse_dataobj_c_apdu; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: diff --git a/src/stkutil.h b/src/stkutil.h index 8047ed1..c6bd4e1 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -469,6 +469,21 @@ struct stk_card_atr { }; /* + * Defined in TS 102.223 Section 8.35. According to it, the maximum size + * of data is 236. + */ +struct stk_c_apdu { + unsigned char cla; + unsigned char ins; + unsigned char p1; + unsigned char p2; + unsigned char lc; + unsigned char data[236]; + ofono_bool_t has_le; + unsigned char le; +}; + +/* * 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] 16+ messages in thread
* [PATCH 04/15] Add parser for r-apdu objects 2010-04-02 6:20 ` [PATCH 03/15] Add parser for c-apdu objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 05/15] Add parser for timer identifier objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2022 bytes --] --- src/stkutil.c | 26 ++++++++++++++++++++++++++ src/stkutil.h | 10 ++++++++++ 2 files changed, 36 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 99e6622..2efa5a4 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -831,6 +831,30 @@ static gboolean parse_dataobj_c_apdu( return TRUE; } +/* Defined in TS 102.223 Section 8.36 */ +static gboolean parse_dataobj_r_apdu( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_r_apdu *ra = user; + const unsigned char *data; + unsigned int len = comprehension_tlv_iter_get_length(iter); + + if ((len < 2) || (len > 239)) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + ra->sw1 = data[len-2]; + ra->sw2 = data[len-1]; + + if (len > 2) { + ra->len = len - 2; + memcpy(ra->data, data, ra->len); + } else + ra->len = 0; + + return TRUE; +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -941,6 +965,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_card_atr; case STK_DATA_OBJECT_TYPE_C_APDU: return parse_dataobj_c_apdu; + case STK_DATA_OBJECT_TYPE_R_APDU: + return parse_dataobj_r_apdu; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: diff --git a/src/stkutil.h b/src/stkutil.h index c6bd4e1..1cbf407 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -483,6 +483,16 @@ struct stk_c_apdu { unsigned char le; }; +/* Defined in TS 102.223 Section 8.36. According to it, the maximum size + * of data is 237. + */ +struct stk_r_apdu { + unsigned char sw1; + unsigned char sw2; + unsigned char data[237]; + 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 -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 05/15] Add parser for timer identifier objects 2010-04-02 6:20 ` [PATCH 04/15] Add parser for r-apdu objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 06/15] Refactor function decode_scts to use semi octet decoder Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1078 bytes --] --- src/stkutil.c | 11 +++++++++++ 1 files changed, 11 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 2efa5a4..d999846 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -855,6 +855,15 @@ static gboolean parse_dataobj_r_apdu( return TRUE; } +/* Defined in TS 102.223 Section 8.37 */ +static gboolean parse_dataobj_timer_id( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char *byte = user; + + return parse_dataobj_common_byte(iter, byte); +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -967,6 +976,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_c_apdu; case STK_DATA_OBJECT_TYPE_R_APDU: return parse_dataobj_r_apdu; + case STK_DATA_OBJECT_TYPE_TIMER_ID: + return parse_dataobj_timer_id; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 06/15] Refactor function decode_scts to use semi octet decoder 2010-04-02 6:20 ` [PATCH 05/15] Add parser for timer identifier objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 07/15] Add parser for timer value objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2090 bytes --] --- src/smsutil.c | 17 +++++++++++------ src/smsutil.h | 2 ++ 2 files changed, 13 insertions(+), 6 deletions(-) diff --git a/src/smsutil.c b/src/smsutil.c index baa7ebe..64cd6fb 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -372,6 +372,11 @@ static gboolean encode_scts(const struct sms_scts *in, unsigned char *pdu, return TRUE; } +guint8 sms_decode_semi_octet(guint8 in) +{ + return (in & 0x0f) * 10 + (in >> 4); +} + static gboolean decode_scts(const unsigned char *pdu, int len, int *offset, struct sms_scts *out) { @@ -381,22 +386,22 @@ static gboolean decode_scts(const unsigned char *pdu, int len, return FALSE; next_octet(pdu, len, offset, &oct); - out->year = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->year = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); - out->month = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->month = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); - out->day = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->day = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); - out->hour = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->hour = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); - out->minute = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->minute = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); - out->second = (oct & 0x0f) * 10 + ((oct & 0xf0) >> 4); + out->second = sms_decode_semi_octet(oct); next_octet(pdu, len, offset, &oct); diff --git a/src/smsutil.h b/src/smsutil.h index c28a6da..fd80c8f 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -422,6 +422,8 @@ gboolean sms_decode_address_field(const unsigned char *pdu, int len, gboolean sms_encode_address_field(const struct sms_address *in, gboolean sc, unsigned char *pdu, int *offset); +guint8 sms_decode_semi_octet(guint8 in); + int sms_udl_in_bytes(guint8 ud_len, guint8 dcs); time_t sms_scts_to_time(const struct sms_scts *scts, struct tm *remote); -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 07/15] Add parser for timer value objects 2010-04-02 6:20 ` [PATCH 06/15] Refactor function decode_scts to use semi octet decoder Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 08/15] Make function decode_scts public Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1935 bytes --] --- src/stkutil.c | 20 ++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 27 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index d999846..5fea3a5 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -864,6 +864,24 @@ static gboolean parse_dataobj_timer_id( return parse_dataobj_common_byte(iter, byte); } +/* Defined in TS 102.223 Section 8.38 */ +static gboolean parse_dataobj_timer_value( + struct comprehension_tlv_iter *iter, void *user) +{ + struct stk_timer_value *tv = user; + const unsigned char *data; + + if (comprehension_tlv_iter_get_length(iter) != 3) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + tv->hour = sms_decode_semi_octet(data[0]); + tv->minute = sms_decode_semi_octet(data[1]); + tv->second = sms_decode_semi_octet(data[2]); + + return TRUE; +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -978,6 +996,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_r_apdu; case STK_DATA_OBJECT_TYPE_TIMER_ID: return parse_dataobj_timer_id; + case STK_DATA_OBJECT_TYPE_TIMER_VALUE: + return parse_dataobj_timer_value; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: diff --git a/src/stkutil.h b/src/stkutil.h index 1cbf407..0d22bea 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -493,6 +493,13 @@ struct stk_r_apdu { unsigned int len; }; +/* Defined in TS 102.223 Section 8.38 */ +struct stk_timer_value { + unsigned char hour; + unsigned char minute; + unsigned char second; +}; + /* * 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 -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 08/15] Make function decode_scts public 2010-04-02 6:20 ` [PATCH 07/15] Add parser for timer value objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 09/15] Add parser for date-time and time zone objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 2508 bytes --] --- src/smsutil.c | 12 ++++++------ src/smsutil.h | 3 +++ 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/smsutil.c b/src/smsutil.c index 64cd6fb..17e0e0e 100644 --- a/src/smsutil.c +++ b/src/smsutil.c @@ -377,7 +377,7 @@ guint8 sms_decode_semi_octet(guint8 in) return (in & 0x0f) * 10 + (in >> 4); } -static gboolean decode_scts(const unsigned char *pdu, int len, +gboolean sms_decode_scts(const unsigned char *pdu, int len, int *offset, struct sms_scts *out) { unsigned char oct = 0; @@ -433,7 +433,7 @@ static gboolean decode_validity_period(const unsigned char *pdu, int len, return TRUE; case SMS_VALIDITY_PERIOD_FORMAT_ABSOLUTE: - if (!decode_scts(pdu, len, offset, &vp->absolute)) + if (!sms_decode_scts(pdu, len, offset, &vp->absolute)) return FALSE; return TRUE; @@ -718,7 +718,7 @@ static gboolean decode_deliver(const unsigned char *pdu, int len, if (!next_octet(pdu, len, &offset, &out->deliver.dcs)) return FALSE; - if (!decode_scts(pdu, len, &offset, &out->deliver.scts)) + if (!sms_decode_scts(pdu, len, &offset, &out->deliver.scts)) return FALSE; if (!next_octet(pdu, len, &offset, &out->deliver.udl)) @@ -849,7 +849,7 @@ static gboolean decode_submit_report(const unsigned char *pdu, int len, pi = octet & 0x07; - if (!decode_scts(pdu, len, &offset, scts)) + if (!sms_decode_scts(pdu, len, &offset, scts)) return FALSE; if (pi & 0x01) { @@ -976,10 +976,10 @@ static gboolean decode_status_report(const unsigned char *pdu, int len, &out->status_report.raddr)) return FALSE; - if (!decode_scts(pdu, len, &offset, &out->status_report.scts)) + if (!sms_decode_scts(pdu, len, &offset, &out->status_report.scts)) return FALSE; - if (!decode_scts(pdu, len, &offset, &out->status_report.dt)) + if (!sms_decode_scts(pdu, len, &offset, &out->status_report.dt)) return FALSE; if (!next_octet(pdu, len, &offset, &octet)) diff --git a/src/smsutil.h b/src/smsutil.h index fd80c8f..469a49e 100644 --- a/src/smsutil.h +++ b/src/smsutil.h @@ -424,6 +424,9 @@ gboolean sms_encode_address_field(const struct sms_address *in, gboolean sc, guint8 sms_decode_semi_octet(guint8 in); +gboolean sms_decode_scts(const unsigned char *pdu, int len, + int *offset, struct sms_scts *out); + int sms_udl_in_bytes(guint8 ud_len, guint8 dcs); time_t sms_scts_to_time(const struct sms_scts *scts, struct tm *remote); -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 09/15] Add parser for date-time and time zone objects 2010-04-02 6:20 ` [PATCH 08/15] Make function decode_scts public Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 10/15] Add parser for at command objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1319 bytes --] --- src/stkutil.c | 19 +++++++++++++++++++ 1 files changed, 19 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 5fea3a5..1846092 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -882,6 +882,23 @@ static gboolean parse_dataobj_timer_value( return TRUE; } +/* Defined in TS 102.223 Section 8.39 */ +static gboolean parse_dataobj_datetime_timezone( + struct comprehension_tlv_iter *iter, void *user) +{ + struct sms_scts *scts = user; + const unsigned char *data; + int offset = 0; + + if (comprehension_tlv_iter_get_length(iter) != 7) + return FALSE; + + data = comprehension_tlv_iter_get_data(iter); + sms_decode_scts(data, 7, &offset, scts); + + return TRUE; +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -998,6 +1015,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_timer_id; case STK_DATA_OBJECT_TYPE_TIMER_VALUE: return parse_dataobj_timer_value; + case STK_DATA_OBJECT_TYPE_DATETIME_TIMEZONE: + return parse_dataobj_datetime_timezone; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 10/15] Add parser for at command objects 2010-04-02 6:20 ` [PATCH 09/15] Add parser for date-time and time zone objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 11/15] Add parser for at response objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1959 bytes --] --- src/stkutil.c | 32 ++++++++++++++++++++++++++++++++ 1 files changed, 32 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 1846092..c7154c1 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -112,6 +112,28 @@ static gboolean parse_dataobj_common_byte(struct comprehension_tlv_iter *iter, return TRUE; } +/* For data object that only has text terminated by '\0' */ +static gboolean parse_dataobj_common_text(struct comprehension_tlv_iter *iter, + unsigned char **text) +{ + 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); + + *text = g_try_malloc(len + 1); + if (*text == NULL) + return FALSE; + + memcpy(*text, data, len); + (*text)[len] = '\0'; + + return TRUE; +} + /* For data object that only has a byte array with undetermined length */ static gboolean parse_dataobj_common_byte_array( struct comprehension_tlv_iter *iter, @@ -899,6 +921,14 @@ static gboolean parse_dataobj_datetime_timezone( return TRUE; } +/* Defined in TS 102.223 Section 8.40 */ +static gboolean parse_dataobj_at_command( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char **command = user; + return parse_dataobj_common_text(iter, command); +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -1017,6 +1047,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_timer_value; case STK_DATA_OBJECT_TYPE_DATETIME_TIMEZONE: return parse_dataobj_datetime_timezone; + case STK_DATA_OBJECT_TYPE_AT_COMMAND: + return parse_dataobj_at_command; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 11/15] Add parser for at response objects 2010-04-02 6:20 ` [PATCH 10/15] Add parser for at command objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 12/15] Add parser for bc repeat indicator objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1153 bytes --] --- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index c7154c1..f6da42b 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -929,6 +929,14 @@ static gboolean parse_dataobj_at_command( return parse_dataobj_common_text(iter, command); } +/* Defined in TS 102.223 Section 8.41 */ +static gboolean parse_dataobj_at_response( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char **response = user; + return parse_dataobj_common_text(iter, response); +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -1049,6 +1057,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_datetime_timezone; case STK_DATA_OBJECT_TYPE_AT_COMMAND: return parse_dataobj_at_command; + case STK_DATA_OBJECT_TYPE_AT_RESPONSE: + return parse_dataobj_at_response; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 12/15] Add parser for bc repeat indicator objects 2010-04-02 6:20 ` [PATCH 11/15] Add parser for at response objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 13/15] Add parser for dtmf string objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1165 bytes --] --- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index f6da42b..f205ce6 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -937,6 +937,14 @@ static gboolean parse_dataobj_at_response( return parse_dataobj_common_text(iter, response); } +/* Defined in TS 102.223 Section 8.42 */ +static gboolean parse_dataobj_bc_repeat_indicator( + struct comprehension_tlv_iter *iter, void *user) +{ + unsigned char *byte = user; + return parse_dataobj_common_byte(iter, byte); +} + /* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, void *user) @@ -1059,6 +1067,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_at_command; case STK_DATA_OBJECT_TYPE_AT_RESPONSE: return parse_dataobj_at_response; + case STK_DATA_OBJECT_TYPE_BC_REPEAT_INDICATOR: + return parse_dataobj_bc_repeat_indicator; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE: -- 1.6.3.3 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH 13/15] Add parser for dtmf string objects 2010-04-02 6:20 ` [PATCH 12/15] Add parser for bc repeat indicator objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 14/15] Add parser for language objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1459 bytes --] --- src/stkutil.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index f205ce6..4951df3 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -953,6 +953,28 @@ static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter, return parse_dataobj_common_bool(iter, ret); } +/* Defined in 102.223 Section 8.44 */ +static gboolean parse_dataobj_dtmf_string(struct comprehension_tlv_iter *iter, + void *user) +{ + char **dtmf = 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); + + *dtmf = g_try_malloc(len * 2 + 1); + if (*dtmf == NULL) + return FALSE; + + extract_bcd_number(data, len, *dtmf); + + return TRUE; +} + /* Defined in TS 102.223 Section 8.72 */ static gboolean parse_dataobj_text_attr(struct comprehension_tlv_iter *iter, void *user) @@ -1071,6 +1093,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_bc_repeat_indicator; case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE: return parse_dataobj_imm_resp; + case STK_DATA_OBJECT_TYPE_DTMF_STRING: + return parse_dataobj_dtmf_string; 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] 16+ messages in thread
* [PATCH 14/15] Add parser for language objects 2010-04-02 6:20 ` [PATCH 13/15] Add parser for dtmf string objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 2010-04-02 6:20 ` [PATCH 15/15] Add parser for browser identity objects Yang Gu 0 siblings, 1 reply; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1370 bytes --] --- src/stkutil.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 4951df3..0e42ece 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -975,6 +975,25 @@ static gboolean parse_dataobj_dtmf_string(struct comprehension_tlv_iter *iter, return TRUE; } +/* Defined in 102.223 Section 8.45 */ +static gboolean parse_dataobj_language(struct comprehension_tlv_iter *iter, + void *user) +{ + char **lang = 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); + + /* Assume network measurement result is 2 bytes long */ + memcpy(*lang, 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) @@ -1095,6 +1114,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_imm_resp; case STK_DATA_OBJECT_TYPE_DTMF_STRING: return parse_dataobj_dtmf_string; + case STK_DATA_OBJECT_TYPE_LANGUAGE: + return parse_dataobj_language; 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] 16+ messages in thread
* [PATCH 15/15] Add parser for browser identity objects 2010-04-02 6:20 ` [PATCH 14/15] Add parser for language objects Yang Gu @ 2010-04-02 6:20 ` Yang Gu 0 siblings, 0 replies; 16+ messages in thread From: Yang Gu @ 2010-04-02 6:20 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 1711 bytes --] --- src/stkutil.c | 10 ++++++++++ src/stkutil.h | 8 ++++++++ 2 files changed, 18 insertions(+), 0 deletions(-) diff --git a/src/stkutil.c b/src/stkutil.c index 0e42ece..b23409e 100644 --- a/src/stkutil.c +++ b/src/stkutil.c @@ -994,6 +994,14 @@ static gboolean parse_dataobj_language(struct comprehension_tlv_iter *iter, return TRUE; } +/* Defined in 102.223 Section 8.47 */ +static gboolean parse_dataobj_browser_id(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) @@ -1116,6 +1124,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type) return parse_dataobj_dtmf_string; case STK_DATA_OBJECT_TYPE_LANGUAGE: return parse_dataobj_language; + case STK_DATA_OBJECT_TYPE_BROWSER_ID: + return parse_dataobj_browser_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 0d22bea..3f96159 100644 --- a/src/stkutil.h +++ b/src/stkutil.h @@ -301,6 +301,14 @@ enum stk_icon_qualifier { STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY = 0x01 }; +enum stk_browser_id { + STK_BROWSER_ID_DEFAULT = 0x00, + STK_BROWSER_ID_WML = 0x01, + STK_BROWSER_ID_HTML = 0x02, + STK_BROWSER_ID_XHTML = 0x03, + STK_BROWSER_ID_CHTML = 0x04 +}; + /* 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] 16+ messages in thread
* Re: [PATCH 01/15] Add parser for card reader status objects 2010-04-02 6:20 [PATCH 01/15] Add parser for card reader status objects Yang Gu 2010-04-02 6:20 ` [PATCH 02/15] Add parser for card atr objects Yang Gu @ 2010-04-02 16:29 ` Denis Kenzior 1 sibling, 0 replies; 16+ messages in thread From: Denis Kenzior @ 2010-04-02 16:29 UTC (permalink / raw) To: ofono [-- Attachment #1: Type: text/plain, Size: 200 bytes --] Hi Yang, > --- > src/stkutil.c | 11 +++++++++++ > 1 files changed, 11 insertions(+), 0 deletions(-) All 15 patches have been applied with some minor fixes afterwards. Regards, -Denis ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2010-04-02 16:29 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2010-04-02 6:20 [PATCH 01/15] Add parser for card reader status objects Yang Gu 2010-04-02 6:20 ` [PATCH 02/15] Add parser for card atr objects Yang Gu 2010-04-02 6:20 ` [PATCH 03/15] Add parser for c-apdu objects Yang Gu 2010-04-02 6:20 ` [PATCH 04/15] Add parser for r-apdu objects Yang Gu 2010-04-02 6:20 ` [PATCH 05/15] Add parser for timer identifier objects Yang Gu 2010-04-02 6:20 ` [PATCH 06/15] Refactor function decode_scts to use semi octet decoder Yang Gu 2010-04-02 6:20 ` [PATCH 07/15] Add parser for timer value objects Yang Gu 2010-04-02 6:20 ` [PATCH 08/15] Make function decode_scts public Yang Gu 2010-04-02 6:20 ` [PATCH 09/15] Add parser for date-time and time zone objects Yang Gu 2010-04-02 6:20 ` [PATCH 10/15] Add parser for at command objects Yang Gu 2010-04-02 6:20 ` [PATCH 11/15] Add parser for at response objects Yang Gu 2010-04-02 6:20 ` [PATCH 12/15] Add parser for bc repeat indicator objects Yang Gu 2010-04-02 6:20 ` [PATCH 13/15] Add parser for dtmf string objects Yang Gu 2010-04-02 6:20 ` [PATCH 14/15] Add parser for language objects Yang Gu 2010-04-02 6:20 ` [PATCH 15/15] Add parser for browser identity objects Yang Gu 2010-04-02 16:29 ` [PATCH 01/15] Add parser for card reader status 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