* [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 an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.