Add parser for location information objects
PATCH 1/6 Add parser for location information objects
--- src/simutil.c | 2 +- src/simutil.h | 1 + src/stkutil.c | 32 ++++++++++++++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 4 files changed, 43 insertions(+), 1 deletions(-)
src/simutil.c +1 -1
@@ -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 parse_mcc_mnc (const guint8 *bcd,char *mcc,char *mnc) {static const char digit_lut[] ="0123456789*#abd\0" ;guint8 digit;
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 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);
src/stkutil.c +32 -0
@@ -519,6 +519,36 @@ 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); + +parse_mcc_mnc (data, li->mcc, li->mnc); +memcpy (li->lac_tac, data +3 ,2 ); + +if (len >=7 ) +memcpy (li->cell_id, data+5 ,2 ); + +if (len ==9 ) +memcpy (li->ext_cell_id, data+7 ,2 ); + +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 +668,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 +9 -0
@@ -345,6 +345,15 @@ 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 char lac_tac[2 ]; +unsigned char cell_id[2 ]; +unsigned char ext_cell_id[2 ]; +}; +/* 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 2/6 Add macro for ber-tlv more time
--- src/stkutil.h | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
src/stkutil.h +3 -2
@@ -37,8 +37,9 @@ enum stk_envelope_type {/* TS 102.223 Section 9.4 */ enum stk_command_type {STK_COMMAND_TYPE_REFRESH =0x01 , -STK_COMMAND_TYPE_POLL_INTERVAL =0x02 , -STK_COMMAND_TYPE_POLLING_OFF =0x03 , +STK_COMMAND_TYPE_MORE_TIME =0x02 , +STK_COMMAND_TYPE_POLL_INTERVAL =0x03 , +STK_COMMAND_TYPE_POLLING_OFF =0x04 ,STK_COMMAND_TYPE_SETUP_EVENT_LIST =0x05 ,STK_COMMAND_TYPE_SETUP_CALL =0x10 ,STK_COMMAND_TYPE_SEND_SS =0x11 ,
Signature · 1 line
1.6.3.3
PATCH 3/6 Unify some macro names of ber-tlv and comprehension tlv
--- src/stkutil.h | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-)
src/stkutil.h +11 -11
@@ -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,13 +69,13 @@ 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 , -STK_COMMAND_TYPE_RETRIEVE_MMS =0x60 , -STK_COMMAND_TYPE_SUBMIT_MMS =0x61 , -STK_COMMAND_TYPE_DISPLAY_MMS =0x62 , +STK_COMMAND_TYPE_RETRIEVE_MM =0x60 , +STK_COMMAND_TYPE_SUBMIT_MM =0x61 , +STK_COMMAND_TYPE_DISPLAY_MM =0x62 ,STK_COMMAND_TYPE_ACTIVATE =0x70 , STK_COMMAND_TYPE_END_SESSION = 0x81, };
@@ -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,
@@ -162,12 +162,12 @@ enum stk_data_object_type {STK_DATA_OBJECT_TYPE_FRAME_LAYOUT =0x66 ,STK_DATA_OBJECT_TYPE_FRAMES_INFO =0x67 ,STK_DATA_OBJECT_TYPE_FRAME_ID =0x68 , -STK_DATA_OBJECT_TYPE_MMS_REFERENCE =0x6A , -STK_DATA_OBJECT_TYPE_MMS_ID =0x6B , -STK_DATA_OBJECT_TYPE_MMS_TRANSFER_STATUS =0x6C , +STK_DATA_OBJECT_TYPE_MM_REFERENCE =0x6A , +STK_DATA_OBJECT_TYPE_MM_ID =0x6B , +STK_DATA_OBJECT_TYPE_MM_TRANSFER_STATUS =0x6C ,STK_DATA_OBJECT_TYPE_MEID =0x6D , -STK_DATA_OBJECT_TYPE_CONTENT_ID =0x6E , -STK_DATA_OBJECT_TYPE_MMS_NOTIFICATION =0x6F , +STK_DATA_OBJECT_TYPE_MM_CONTENT_ID =0x6E , +STK_DATA_OBJECT_TYPE_MM_NOTIFICATION =0x6F ,STK_DATA_OBJECT_TYPE_LAST_ENVELOPE =0x70 ,STK_DATA_OBJECT_TYPE_REGISTRY_APPLICATION_DATA =0x71 , STK_DATA_OBJECT_TYPE_ROUTING_AREA_INFO = 0x73,
Signature · 1 line
1.6.3.3
PATCH 4/6 Add macro name of comprehension tlv cdma sms tpdu
--- src/stkutil.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
src/stkutil.h +1 -0
@@ -151,6 +151,7 @@ enum stk_data_object_type {STK_DATA_OBJECT_TYPE_SERVICE_AVAILABILITY =0x45 ,STK_DATA_OBJECT_TYPE_ESN =0x46 ,STK_DATA_OBJECT_TYPE_NETWORK_ACCESS_NAME =0x47 , +STK_DATA_OBJECT_TYPE_CDMA_SMS_TPDU =0x48 ,STK_DATA_OBJECT_TYPE_REMOTE_ENTITY_ADDRESS =0x49 ,STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE =0x50 , STK_DATA_OBJECT_TYPE_ITEM_TEXT_ATTRIBUTE_LIST = 0x51,
Signature · 1 line
1.6.3.3
PATCH 5/6 Add parser for imei objects
--- src/stkutil.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)
src/stkutil.c +24 -0
@@ -549,6 +549,28 @@ static gboolean parse_dataobj_location_info(return TRUE; } +/* Defined in TS 102.223 Section 8.20 */ +static gboolean parse_dataobj_imei (struct comprehension_tlv_iter *iter, +void *user) +{ +char **imei = user; +const unsigned char *data; +unsigned int len; + +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); +memcpy (*imei, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -670,6 +692,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 6/6 Add parser for help request objects
--- src/stkutil.c | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-)
src/stkutil.c +27 -0
@@ -50,6 +50,23 @@ struct gsm_sms_tpdu {unsigned char tpdu[164 ]; }; +/* For data object to indicate the 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)
@@ -571,6 +588,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)
@@ -694,6 +719,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 6/6] Add parser for help request objects
Hi Yang,
Quoted 34 lines
--- src/stkutil.c | 27 +++++++++++++++++++++++++++ 1 files changed, 27 insertions(+), 0 deletions(-)src/stkutil.c +16
-0@@ -50,6 +50,23 @@ struct gsm_sms_tpdu {unsigned char tpdu[164 ]; }; +/* For data object to indicate the 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)@@ -571,6 +588,14 @@ static gboolean parse_dataobj_imei(struct comprehension_tlv_iter *iter, return TRUE;
src/stkutil.c static gboolean parse_dataobj_imei(struct · line 598
Quoted 10 lines
src/stkutil.c +7
-0} +/* 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 ); +} +
Your patch looks fine, but after looking at the spec I couldn't find any other data object that had this structure. What else is this going to be used for?
src/stkutil.c static dataobj_handler handler_for_type(enum · line 726
Quoted 13 lines
src/stkutil.c +2
-0/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)@@ -694,6 +719,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 :
Regards,
-Denis
Re: [PATCH 5/6] Add parser for imei objects
In reply to Yang GuHi Yang,
Quoted 9 lines
--- src/stkutil.c | 24 ++++++++++++++++++++++++ 1 files changed, 24 insertions(+), 0 deletions(-)src/stkutil.c +0
-0
src/stkutil.c static gboolean parse_dataobj_location_info( · line 556
Quoted 8 lines
src/stkutil.c +5
-0@@ -549,6 +549,28 @@ static gboolean parse_dataobj_location_info(return TRUE; } +/* Defined in TS 102.223 Section 8.20 */ +static gboolean parse_dataobj_imei (struct comprehension_tlv_iter *iter, +void *user) +{ +char **imei = user;
So this one implies character data (e.g. string), but...
src/stkutil.c static gboolean parse_dataobj_location_info( · line 569
Quoted 13 lines
src/stkutil.c +13
-0+const unsigned char *data; +unsigned int len; + +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); +memcpy (*imei, data, len);
Here you copy binary data into a string array. Since IMEI is essentially bcd encoded I suggest you parse it into string form here.
src/stkutil.c static gboolean parse_dataobj_location_info( · line 573
Quoted 4 lines
src/stkutil.c +4
-0+ +return TRUE; +} +
Regards,
-Denis
Re: [PATCH 4/6] Add macro name of comprehension tlv cdma sms tpdu
In reply to Yang GuHi Yang,
Quoted 4 lines
--- src/stkutil.h | 1 + 1 files changed, 1 insertions(+), 0 deletions(-)
This patch has been applied, thanks.
Regards,
-Denis
Re: [PATCH 3/6] Unify some macro names of ber-tlv and comprehension tlv
In reply to Yang GuHi Yang,
Quoted 9 lines
--- src/stkutil.h | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-)src/stkutil.h +0
-0
src/stkutil.h enum stk_command_type { · line 57
Quoted 5 lines
src/stkutil.h +1
-1@@ -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,
I'm fine with this one
src/stkutil.h enum stk_command_type { · line 72
Quoted 9 lines
src/stkutil.h +1
-1STK_COMMAND_TYPE_TIMER_MANAGEMENT =0x27 ,STK_COMMAND_TYPE_SETUP_IDLE_MODE_TEXT =0x28 , STK_COMMAND_TYPE_PERFORM_CARD_APDU = 0x30,@@ -69,13 +69,13 @@ 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,
And I'm fine with this one
src/stkutil.h enum stk_command_type { · line 78
Quoted 9 lines
src/stkutil.h +3
-3STK_COMMAND_TYPE_DECLARE_SERVICE =0x47 ,STK_COMMAND_TYPE_SET_FRAMES =0x50 ,STK_COMMAND_TYPE_GET_FRAMES_STATUS =0x51 , -STK_COMMAND_TYPE_RETRIEVE_MMS =0x60 , -STK_COMMAND_TYPE_SUBMIT_MMS =0x61 , - STK_COMMAND_TYPE_DISPLAY_MMS = 0x62, +STK_COMMAND_TYPE_RETRIEVE_MM =0x60 , +STK_COMMAND_TYPE_SUBMIT_MM =0x61 , + STK_COMMAND_TYPE_DISPLAY_MM = 0x62,
This one is silly, MM is multimedia message, MMS is a much clearer name
src/stkutil.h enum stk_data_object_type { · line 134
Quoted 9 lines
src/stkutil.h +1
-1STK_COMMAND_TYPE_ACTIVATE =0x70 , STK_COMMAND_TYPE_END_SESSION = 0x81, };@@ -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,
I'm ok with this one
src/stkutil.h enum stk_data_object_type { · line 167
Quoted 13 lines
src/stkutil.h +3
-3STK_DATA_OBJECT_TYPE_BROWSER_TERMINATION_CAUSE =0x34 ,STK_DATA_OBJECT_TYPE_BEARER_DESCRIPTION =0x35 , STK_DATA_OBJECT_TYPE_CHANNEL_DATA = 0x36,@@ -162,12 +162,12 @@ enum stk_data_object_type {STK_DATA_OBJECT_TYPE_FRAME_LAYOUT =0x66 ,STK_DATA_OBJECT_TYPE_FRAMES_INFO =0x67 ,STK_DATA_OBJECT_TYPE_FRAME_ID =0x68 , -STK_DATA_OBJECT_TYPE_MMS_REFERENCE =0x6A , -STK_DATA_OBJECT_TYPE_MMS_ID =0x6B , - STK_DATA_OBJECT_TYPE_MMS_TRANSFER_STATUS = 0x6C, +STK_DATA_OBJECT_TYPE_MM_REFERENCE =0x6A , +STK_DATA_OBJECT_TYPE_MM_ID =0x6B , + STK_DATA_OBJECT_TYPE_MM_TRANSFER_STATUS = 0x6C,
Keep MMS here
src/stkutil.h enum stk_data_object_type { · line 169
Quoted 4 lines
src/stkutil.h +1
-2STK_DATA_OBJECT_TYPE_MEID =0x6D , -STK_DATA_OBJECT_TYPE_CONTENT_ID =0x6E , - STK_DATA_OBJECT_TYPE_MMS_NOTIFICATION = 0x6F, + STK_DATA_OBJECT_TYPE_MM_CONTENT_ID = 0x6E,
Rename this MMS_CONTENT_ID
src/stkutil.h enum stk_data_object_type { · line 170
Quoted 1 line
src/stkutil.h +1
-0+ STK_DATA_OBJECT_TYPE_MM_NOTIFICATION = 0x6F,
Keep MMS here
src/stkutil.h enum stk_data_object_type { · line 173
Quoted 4 lines
src/stkutil.h +0
-0STK_DATA_OBJECT_TYPE_LAST_ENVELOPE =0x70 ,STK_DATA_OBJECT_TYPE_REGISTRY_APPLICATION_DATA =0x71 , STK_DATA_OBJECT_TYPE_ROUTING_AREA_INFO = 0x73,
Regards,
-Denis
Re: [PATCH 2/6] Add macro for ber-tlv more time
In reply to Yang GuHi Yang,
Quoted 4 lines
--- src/stkutil.h | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
This patch has been applied, thanks.
Regards,
-Denis
Hi Yang,
Quoted 12 lines
--- src/simutil.c | 2 +- src/simutil.h | 1 + src/stkutil.c | 32 ++++++++++++++++++++++++++++++++ src/stkutil.h | 9 +++++++++ 4 files changed, 43 insertions(+), 1 deletions(-)src/simutil.c +0
-0
src/simutil.c static char *sim_network_name_parse(const unsigned char · line 541
Quoted 5 lines
src/simutil.c +1
-1@@ -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 parse_mcc_mnc (const guint8 *bcd,char *mcc,char *mnc)
If this is becoming public api, then it should have a sim_ prefix like the rest of the functions in simutil.h.
Quoted 39 lines
src/simutil.c +0
-0{static const char digit_lut[] ="0123456789*#abd\0" ;guint8 digit;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 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);src/stkutil.c +16
-0@@ -519,6 +519,36 @@ 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; +
src/stkutil.c error: · line 547
Quoted 10 lines
src/stkutil.c +10
-0+ data =comprehension_tlv_iter_get_data (iter); + +parse_mcc_mnc (data, li->mcc, li->mnc); +memcpy (li->lac_tac, data +3 ,2 ); + +if (len >=7 ) +memcpy (li->cell_id, data+5 ,2 ); + +if (len ==9 ) +memcpy (li->ext_cell_id, data+7 ,2 );
See my comments below, these should be proper integers. Make sure the byte- ordering is correct.
Quoted 21 lines
src/stkutil.c +6
-0+ +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 +668,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 +0
-0
src/stkutil.h struct stk_result { · line 352
Quoted 8 lines
src/stkutil.h +5
-0@@ -345,6 +345,15 @@ 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 char lac_tac[2 ];
This should be just unsigned short
src/stkutil.h struct stk_result { · line 353
Quoted 1 line
src/stkutil.h +1
-0+unsigned char cell_id[2 ];
And this one
src/stkutil.h struct stk_result { · line 354
Quoted 1 line
src/stkutil.h +1
-0+unsigned char ext_cell_id[2 ];
And this one too
You also need a ofono_bool_t to signify the presence of lac/ci/ext_ci
Quoted 7 lines
src/stkutil.h +2
-0+}; +/* 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
Regards,
-Denis