Unify some macro names of ber-tlv and comprehension tlv
PATCH 1/7 Unify some macro names of ber-tlv and comprehension tlv
--- src/stkutil.h | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
src/stkutil.h +4 -4
@@ -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,
Signature · 1 line
1.6.3.3
PATCH 2/7 Make the function to parse mcc and mnc public
--- src/simutil.c | 6 +++--- src/simutil.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-)
src/simutil.c +3 -3
@@ -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 ];
src/simutil.h +1 -0
@@ -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);
Signature · 1 line
1.6.3.3
PATCH 3/7 Add parser for location information objects
--- src/stkutil.c | 36 ++++++++++++++++++++++++++++++++++++ src/stkutil.h | 11 +++++++++++ 2 files changed, 47 insertions(+), 0 deletions(-)
src/stkutil.c +36 -0
@@ -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 :
src/stkutil.h +11 -0
@@ -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
Signature · 1 line
1.6.3.3
PATCH 4/7 Add parser for imei objects
--- src/stkutil.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-)
src/stkutil.c +43 -0
@@ -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 :
Signature · 1 line
1.6.3.3
PATCH 5/7 Add parser for common bool object
--- src/stkutil.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)
src/stkutil.c +17 -0
@@ -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)
Signature · 1 line
1.6.3.3
PATCH 6/7 Use common bool parser to reimplement immediate response object
--- src/stkutil.c | 14 ++------------ 1 files changed, 2 insertions(+), 12 deletions(-)
src/stkutil.c +2 -12
@@ -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 */
Signature · 1 line
1.6.3.3
PATCH 7/7 Add parser for help request objects
--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -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 :
Signature · 1 line
1.6.3.3
Re: [PATCH 7/7] Add parser for help request objects
Hi Yang,
Quoted 4 lines
--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Re: [PATCH 6/7] Use common bool parser to reimplement immediate response object
In reply to Yang GuHi Yang,
Quoted 4 lines
--- src/stkutil.c | 14 ++------------ 1 files changed, 2 insertions(+), 12 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Re: [PATCH 5/7] Add parser for common bool object
In reply to Yang GuHi Yang,
Quoted 4 lines
--- src/stkutil.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Re: [PATCH 4/7] Add parser for imei objects
In reply to Yang GuHi Yang,
Quoted 3 lines
--- src/stkutil.c | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 43 insertions(+), 0 deletions(-)
Patch has been applied, with a small fix afterwards. Thanks.
Regards,
-Denis
Re: [PATCH 3/7] Add parser for location information objects
In reply to Yang GuHi Yang,
Quoted 4 lines
--- src/stkutil.c | 36 ++++++++++++++++++++++++++++++++++++ src/stkutil.h | 11 +++++++++++ 2 files changed, 47 insertions(+), 0 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Re: [PATCH 2/7] Make the function to parse mcc and mnc public
In reply to Yang GuHi Yang,
Quoted 5 lines
--- src/simutil.c | 6 +++--- src/simutil.h | 1 + 2 files changed, 4 insertions(+), 3 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
Quoted 4 lines
--- src/stkutil.h | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
Patch has been applied, thanks.
Regards,
-Denis