* [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