Open Source Telephony
 help / color / mirror / Atom feed
* [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