---
src/stkutil.h | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/stkutil.h b/src/stkutil.h
index e66b4c0..23c6a3f 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -54,7 +54,7 @@ enum stk_command_type {
STK_COMMAND_TYPE_GET_INPUT = 0x23,
STK_COMMAND_TYPE_SELECT_ITEM = 0x24,
STK_COMMAND_TYPE_SETUP_MENU = 0x25,
- STK_COMMAND_TYPE_PROVIDE_LOCAL_INFORMATION = 0x26,
+ STK_COMMAND_TYPE_PROVIDE_LOCAL_INFO = 0x26,
STK_COMMAND_TYPE_TIMER_MANAGEMENT = 0x27,
STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT = 0x28,
STK_COMMAND_TYPE_PERFORM_CARD_APDU = 0x30,
@@ -69,7 +69,7 @@ enum stk_command_type {
STK_COMMAND_TYPE_SEND_DATA = 0x43,
STK_COMMAND_TYPE_GET_CHANNEL_STATUS = 0x44,
STK_COMMAND_TYPE_SERVICE_SEARCH = 0x45,
- STK_COMMAND_TYPE_GET_SERVICE_INFORMATION = 0x46,
+ STK_COMMAND_TYPE_GET_SERVICE_INFO = 0x46,
STK_COMMAND_TYPE_DECLARE_SERVICE = 0x47,
STK_COMMAND_TYPE_SET_FRAMES = 0x50,
STK_COMMAND_TYPE_GET_FRAMES_STATUS = 0x51,
@@ -131,7 +131,7 @@ enum stk_data_object_type {
STK_DATA_OBJECT_TYPE_BROWSER_ID = 0x30,
STK_DATA_OBJECT_TYPE_URL = 0x31,
STK_DATA_OBJECT_TYPE_BEARER = 0x32,
- STK_DATA_OBJECT_TYPE_PROVISIONING_REFERENCE_FILE = 0x33,
+ STK_DATA_OBJECT_TYPE_PROVISIONING_FILE_REFERENCE = 0x33,
STK_DATA_OBJECT_TYPE_BROWSER_TERMINATION_CAUSE = 0x34,
STK_DATA_OBJECT_TYPE_BEARER_DESCRIPTION = 0x35,
STK_DATA_OBJECT_TYPE_CHANNEL_DATA = 0x36,
@@ -167,7 +167,7 @@ enum stk_data_object_type {
STK_DATA_OBJECT_TYPE_MMS_ID = 0x6B,
STK_DATA_OBJECT_TYPE_MMS_TRANSFER_STATUS = 0x6C,
STK_DATA_OBJECT_TYPE_MEID = 0x6D,
- STK_DATA_OBJECT_TYPE_CONTENT_ID = 0x6E,
+ STK_DATA_OBJECT_TYPE_MMS_CONTENT_ID = 0x6E,
STK_DATA_OBJECT_TYPE_MMS_NOTIFICATION = 0x6F,
STK_DATA_OBJECT_TYPE_LAST_ENVELOPE = 0x70,
STK_DATA_OBJECT_TYPE_REGISTRY_APPLICATION_DATA = 0x71,
--
1.6.3.3
Show replies by date
---
src/simutil.c | 6 +++---
src/simutil.h | 1 +
2 files changed, 4 insertions(+), 3 deletions(-)
diff --git a/src/simutil.c b/src/simutil.c
index d9383b7..9fb111f 100644
--- a/src/simutil.c
+++ b/src/simutil.c
@@ -538,7 +538,7 @@ static char *sim_network_name_parse(const unsigned char *buffer, int
length,
return ret;
}
-static void parse_mcc_mnc(const guint8 *bcd, char *mcc, char *mnc)
+void sim_parse_mcc_mnc(const guint8 *bcd, char *mcc, char *mnc)
{
static const char digit_lut[] = "0123456789*#abd\0";
guint8 digit;
@@ -609,7 +609,7 @@ struct sim_spdi *sim_spdi_new(const guint8 *tlv, int length)
oper = g_new0(struct spdi_operator, 1);
- parse_mcc_mnc(plmn_list, oper->mcc, oper->mnc);
+ sim_parse_mcc_mnc(plmn_list, oper->mcc, oper->mnc);
spdi->operators = g_slist_insert_sorted(spdi->operators, oper,
spdi_operator_compare);
}
@@ -694,7 +694,7 @@ static struct opl_operator *opl_operator_alloc(const guint8 *record)
{
struct opl_operator *oper = g_new0(struct opl_operator, 1);
- parse_mcc_mnc(record, oper->mcc, oper->mnc);
+ sim_parse_mcc_mnc(record, oper->mcc, oper->mnc);
record += 3;
oper->lac_tac_low = (record[0] << 8) | record[1];
diff --git a/src/simutil.h b/src/simutil.h
index 043c21f..7590cca 100644
--- a/src/simutil.h
+++ b/src/simutil.h
@@ -181,6 +181,7 @@ const struct sim_eons_operator_info *sim_eons_lookup(struct sim_eons
*eons,
const char *mnc);
void sim_eons_free(struct sim_eons *eons);
+void sim_parse_mcc_mnc(const guint8 *bcd, char *mcc, char *mnc);
struct sim_spdi *sim_spdi_new(const guint8 *tlv, int length);
gboolean sim_spdi_lookup(struct sim_spdi *spdi,
const char *mcc, const char *mnc);
--
1.6.3.3
---
src/stkutil.c | 36 ++++++++++++++++++++++++++++++++++++
src/stkutil.h | 11 +++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index 9c83f49..d67c5c4 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -519,6 +519,40 @@ error:
return FALSE;
}
+/* Defined in TS 102.223 Section 8.19 */
+static gboolean parse_dataobj_location_info(
+ struct comprehension_tlv_iter *iter, void *user)
+{
+ struct stk_location_info *li = user;
+ const unsigned char *data;
+ unsigned int len;
+
+ if (comprehension_tlv_iter_get_tag(iter) !=
+ STK_DATA_OBJECT_TYPE_LOCATION_INFO)
+ return FALSE;
+
+ len = comprehension_tlv_iter_get_length(iter);
+ if ((len != 5) && (len != 7) && (len != 9))
+ return FALSE;
+
+ data = comprehension_tlv_iter_get_data(iter);
+
+ sim_parse_mcc_mnc(data, li->mcc, li->mnc);
+ li->lac_tac = (data[3] << 8) + data[4];
+
+ if (len >= 7) {
+ li->has_ci = TRUE;
+ li->ci = (data[5] << 8) + data[6];
+ }
+
+ if (len == 9) {
+ li->has_ext_ci = TRUE;
+ li->ext_ci = (data[7] << 8) + data[8];
+ }
+
+ return TRUE;
+}
+
/* Defined in TS 102.223 Section 8.31 */
static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -638,6 +672,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type
type)
return parse_dataobj_tone;
case STK_DATA_OBJECT_TYPE_FILE_LIST:
return parse_dataobj_file_list;
+ case STK_DATA_OBJECT_TYPE_LOCATION_INFO:
+ return parse_dataobj_location_info;
case STK_DATA_OBJECT_TYPE_ICON_ID:
return parse_dataobj_icon_id;
case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
diff --git a/src/stkutil.h b/src/stkutil.h
index 23c6a3f..a9495de 100644
--- a/src/stkutil.h
+++ b/src/stkutil.h
@@ -347,6 +347,17 @@ struct stk_result {
unsigned char *additional;
};
+/* Defined in TS 102.223 Section 8.19 */
+struct stk_location_info {
+ char mnc[OFONO_MAX_MNC_LENGTH + 1];
+ char mcc[OFONO_MAX_MCC_LENGTH + 1];
+ unsigned short lac_tac;
+ ofono_bool_t has_ci;
+ unsigned short ci;
+ ofono_bool_t has_ext_ci;
+ unsigned short ext_ci;
+};
+
/* Define the struct of single file in TS102.223 Section 8.18.
* According to TS 11.11 Section 6.2, each file id has two bytes, and the
* maximum Dedicated File level is 2. So the maximum size of file is 8, which
--
1.6.3.3
---
src/stkutil.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index d67c5c4..af1200c 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -553,6 +553,47 @@ static gboolean parse_dataobj_location_info(
return TRUE;
}
+/* Defined in TS 102.223 Section 8.20.
+ *
+ * According to 3GPP TS 24.008, Section 10.5.1.4, IMEI is composed of
+ * 15 digits and totally 8 bytes are used to represent it.
+ *
+ * Bits 1-3 of first byte represent the type of identity, and they
+ * are 0 1 0 separately for IMEI. Bit 4 of first byte is the odd/even
+ * indication, and it's 1 to indicate IMEI has odd number of digits (15).
+ * The rest bytes are coded using BCD coding.
+ *
+ * For example, if the IMEI is "123456789012345", then it's coded as
+ * "1A 32 54 76 98 10 32 54".
+ */
+static gboolean parse_dataobj_imei(struct comprehension_tlv_iter *iter,
+ void *user)
+{
+ char **imei = user;
+ const unsigned char *data;
+ unsigned int len;
+ static const char digit_lut[] = "0123456789*#abc\0";
+
+ if (comprehension_tlv_iter_get_tag(iter) !=
+ STK_DATA_OBJECT_TYPE_IMEI)
+ return FALSE;
+
+ len = comprehension_tlv_iter_get_length(iter);
+ if (len != 8)
+ return FALSE;
+
+ data = comprehension_tlv_iter_get_data(iter);
+
+ if ((data[0] & 0x0f) != 0x0a)
+ return FALSE;
+
+ *imei = g_try_malloc(16);
+ (*imei)[0] = digit_lut[(data[0] & 0xf0) >> 4];
+ extract_bcd_number(data + 1, 7, *imei + 1);
+
+ return TRUE;
+}
+
/* Defined in TS 102.223 Section 8.31 */
static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -674,6 +715,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type
type)
return parse_dataobj_file_list;
case STK_DATA_OBJECT_TYPE_LOCATION_INFO:
return parse_dataobj_location_info;
+ case STK_DATA_OBJECT_TYPE_IMEI:
+ return parse_dataobj_imei;
case STK_DATA_OBJECT_TYPE_ICON_ID:
return parse_dataobj_icon_id;
case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
--
1.6.3.3
---
src/stkutil.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index af1200c..ecf1301 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -50,6 +50,23 @@ struct gsm_sms_tpdu {
unsigned char tpdu[164];
};
+/* For data object only to indicate its existence */
+static gboolean parse_dataobj_common_bool(struct comprehension_tlv_iter *iter,
+ void *user, enum stk_data_object_type type)
+{
+ gboolean *ret = user;
+
+ if (comprehension_tlv_iter_get_tag(iter) != type)
+ return FALSE;
+
+ if (comprehension_tlv_iter_get_length(iter) != 0)
+ return FALSE;
+
+ *ret = TRUE;
+
+ return TRUE;
+}
+
/* Defined in TS 102.223 Section 8.1 */
static gboolean parse_dataobj_address(struct comprehension_tlv_iter *iter,
void *user)
--
1.6.3.3
---
src/stkutil.c | 14 ++------------
1 files changed, 2 insertions(+), 12 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index ecf1301..4e42ae4 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -637,18 +637,8 @@ static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter
*iter,
static gboolean parse_dataobj_imm_resp(struct comprehension_tlv_iter *iter,
void *user)
{
- gboolean *resp = user;
-
- if (comprehension_tlv_iter_get_tag(iter) !=
- STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE)
- return FALSE;
-
- if (comprehension_tlv_iter_get_length(iter) != 0)
- return FALSE;
-
- *resp = TRUE;
-
- return TRUE;
+ return parse_dataobj_common_bool(iter, user,
+ STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE);
}
/* Defined in TS 102.223 Section 8.72 */
--
1.6.3.3
---
src/stkutil.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
diff --git a/src/stkutil.c b/src/stkutil.c
index 4e42ae4..9a91a25 100644
--- a/src/stkutil.c
+++ b/src/stkutil.c
@@ -611,6 +611,14 @@ static gboolean parse_dataobj_imei(struct comprehension_tlv_iter
*iter,
return TRUE;
}
+/* Defined in TS 102.223 Section 8.21 */
+static gboolean parse_dataobj_help_request(struct comprehension_tlv_iter *iter,
+ void *user)
+{
+ return parse_dataobj_common_bool(iter, user,
+ STK_DATA_OBJECT_TYPE_HELP_REQUEST);
+}
+
/* Defined in TS 102.223 Section 8.31 */
static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,
void *user)
@@ -724,6 +732,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type
type)
return parse_dataobj_location_info;
case STK_DATA_OBJECT_TYPE_IMEI:
return parse_dataobj_imei;
+ case STK_DATA_OBJECT_TYPE_HELP_REQUEST:
+ return parse_dataobj_help_request;
case STK_DATA_OBJECT_TYPE_ICON_ID:
return parse_dataobj_icon_id;
case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE:
--
1.6.3.3
Hi Yang,
---
src/stkutil.c | 10 ++++++++++
1 files changed, 10 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
---
src/stkutil.c | 14 ++------------
1 files changed, 2 insertions(+), 12 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
---
src/stkutil.c | 17 +++++++++++++++++
1 files changed, 17 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
---
src/stkutil.c | 43 +++++++++++++++++++++++++++++++++++++++++++
1 files changed, 43 insertions(+), 0 deletions(-)
Patch has been applied, with a small fix afterwards. Thanks.
Regards,
-Denis
Hi Yang,
---
src/stkutil.c | 36 ++++++++++++++++++++++++++++++++++++
src/stkutil.h | 11 +++++++++++
2 files changed, 47 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
---
src/simutil.c | 6 +++---
src/simutil.h | 1 +
2 files changed, 4 insertions(+), 3 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
---
src/stkutil.h | 8 ++++----
1 files changed, 4 insertions(+), 4 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis