Add parser for network measurement results objects
PATCH 1/9 Add parser for network measurement results objects
--- src/stkutil.c | 26 ++++++++++++++++++++++++++ 1 files changed, 26 insertions(+), 0 deletions(-)
src/stkutil.c +26 -0
@@ -619,6 +619,30 @@ static gboolean parse_dataobj_help_request(struct comprehension_tlv_iter *iter, STK_DATA_OBJECT_TYPE_HELP_REQUEST); } +/* Defined in TS 102.223 Section 8.22 */ +static gboolean parse_dataobj_network_measurement_results ( +struct comprehension_tlv_iter *iter,void *user) +{ +char **nmr = user; +const unsigned char *data; +unsigned int len; + +if (comprehension_tlv_iter_get_tag (iter) != +STK_DATA_OBJECT_TYPE_NETWORK_MEASUREMENT_RESULTS ) +return FALSE; + + len =comprehension_tlv_iter_get_length (iter); +if (len !=0x10 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + +/* Assume network measurement result is 16 bytes long */ +memcpy (*nmr, 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)
@@ -734,6 +758,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_imei;case STK_DATA_OBJECT_TYPE_HELP_REQUEST :return parse_dataobj_help_request; +case STK_DATA_OBJECT_TYPE_NETWORK_MEASUREMENT_RESULTS : +return parse_dataobj_network_measurement_results;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 2/9 Add parser for items next action indicator objects
--- src/stkutil.c | 38 ++++++++++++++++++++++++++++++++++++++ src/stkutil.h | 5 +++++ 2 files changed, 43 insertions(+), 0 deletions(-)
src/stkutil.c +38 -0
@@ -67,6 +67,34 @@ static gboolean parse_dataobj_common_bool(struct comprehension_tlv_iter *iter,return TRUE; } +/* For data object that only has a byte array with variable length */ +static gboolean parse_dataobj_common_byte_array ( +struct comprehension_tlv_iter *iter,void *user, +enum stk_data_object_type type) +{ +struct stk_common_byte_array *array = user; +const unsigned char *data; +unsigned int len; + +if (comprehension_tlv_iter_get_tag (iter) != type) +return FALSE; + + len =comprehension_tlv_iter_get_length (iter); +if (len <1 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + array->len = len; + + array->array =g_try_malloc (len); +if (array->array ==NULL ) +return FALSE; + +memcpy (array->array, data, len); + +return TRUE; +} +/* Defined in TS 102.223 Section 8.1 */ static gboolean parse_dataobj_address (struct comprehension_tlv_iter *iter,void *user)
@@ -643,6 +671,14 @@ static gboolean parse_dataobj_network_measurement_results(return TRUE; } +/* Defined in TS 102.223 Section 8.24 */ +static gboolean parse_dataobj_items_next_action_indicator ( +struct comprehension_tlv_iter *iter,void *user) +{ +return parse_dataobj_common_byte_array (iter, user, +STK_DATA_OBJECT_TYPE_ITEMS_NEXT_ACTION_INDICATOR ); +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -760,6 +796,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_help_request;case STK_DATA_OBJECT_TYPE_NETWORK_MEASUREMENT_RESULTS :return parse_dataobj_network_measurement_results; +case STK_DATA_OBJECT_TYPE_ITEMS_NEXT_ACTION_INDICATOR : +return parse_dataobj_items_next_action_indicator;case STK_DATA_OBJECT_TYPE_ICON_ID :return parse_dataobj_icon_id;case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE :
src/stkutil.h +5 -0
@@ -266,6 +266,11 @@ enum stk_tone_type {STK_TONE_TYPE_MELODY_8 =0x47 }; +struct stk_common_byte_array { +unsigned int len; +unsigned char *array; +}; +/* Defined in TS 102.223 Section 8.1 */ struct stk_address {unsigned char ton_npi;
Signature · 1 line
1.6.3.3
PATCH 3/9 Add parser for event list objects
--- src/stkutil.c | 10 ++++++++++ src/stkutil.h | 24 ++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -679,6 +679,14 @@ static gboolean parse_dataobj_items_next_action_indicator( STK_DATA_OBJECT_TYPE_ITEMS_NEXT_ACTION_INDICATOR); } +/* Defined in TS 102.223 Section 8.25 */ +static gboolean parse_dataobj_event_list ( +struct comprehension_tlv_iter *iter,void *user) +{ +return parse_dataobj_common_byte_array (iter, user, +STK_DATA_OBJECT_TYPE_EVENT_LIST ); +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -798,6 +806,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_network_measurement_results;case STK_DATA_OBJECT_TYPE_ITEMS_NEXT_ACTION_INDICATOR :return parse_dataobj_items_next_action_indicator; +case STK_DATA_OBJECT_TYPE_EVENT_LIST : +return parse_dataobj_event_list;case STK_DATA_OBJECT_TYPE_ICON_ID :return parse_dataobj_icon_id;case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE :
src/stkutil.h +24 -0
@@ -266,6 +266,30 @@ enum stk_tone_type {STK_TONE_TYPE_MELODY_8 =0x47 }; +enum stk_event_type { +STK_EVENT_TYPE_MT_CALL =0x00 , +STK_EVENT_TYPE_CALL_CONNECTED =0x01 , +STK_EVENT_TYPE_CALL_DISCONNECTED =0x02 , +STK_EVENT_TYPE_LOCATION_STATUS =0x03 , +STK_EVENT_TYPE_USER_ACTIVITY =0x04 , +STK_EVENT_TYPE_IDLE_SCREEN_AVAILABLE =0x05 , +STK_EVENT_TYPE_CARD_READER_STATUS =0x06 , +STK_EVENT_TYPE_LANGUAGE_SELECTION =0x07 , +STK_EVENT_TYPE_BROWSER_TERMINATION =0x08 , +STK_EVENT_TYPE_DATA_AVAILABLE =0x09 , +STK_EVENT_TYPE_CHANNEL_STATUS =0x0A , +STK_EVENT_TYPE_SINGLE_ACCESS_TECHNOLOGY_CHANGE =0x0B , +STK_EVENT_TYPE_DISPLAY_PARAMETERS_CHANGED =0x0C , +STK_EVENT_TYPE_LOCAL_CONNECTION =0x0D , +STK_EVENT_TYPE_NETWORK_SEARCH_MODE_CHANGE =0x0E , +STK_EVENT_TYPE_BROWSING_STATUS =0x0F , +STK_EVENT_TYPE_FRAMES_INFORMATION_CHANGE =0x10 , +STK_EVENT_TYPE_I_WLAN_ACCESS_STATUS =0x11 , +STK_EVENT_TYPE_NETWORK_REJECTION =0x12 , +STK_EVENT_TYPE_HCI_CONNECTIVITY_EVENT =0x13 , +STK_EVENT_TYPE_MULTIPLE_ACCESS_TECHNOLOGIES_CHANGE =0x14 +}; +struct stk_common_byte_array {unsigned int len;unsigned char *array;
Signature · 1 line
1.6.3.3
PATCH 4/9 Add parser for cause objects
--- src/stkutil.c | 35 +++++++++++++++++++++++++++++++++++ 1 files changed, 35 insertions(+), 0 deletions(-)
src/stkutil.c +35 -0
@@ -687,6 +687,39 @@ static gboolean parse_dataobj_event_list( STK_DATA_OBJECT_TYPE_EVENT_LIST); } +/* Defined in TS 102.223 Section 8.26 */ +static gboolean parse_dataobj_cause ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_common_byte_array *array = user; +const unsigned char *data; +unsigned int len; + +if (comprehension_tlv_iter_get_tag (iter) !=STK_DATA_OBJECT_TYPE_CAUSE ) +return FALSE; + + len =comprehension_tlv_iter_get_length (iter); +if ((len ==1 ) || (len >30 )) +return FALSE; + +if (len ==0 ) { + array->len =0 ; + array->array =NULL ; +return TRUE; + } + + data =comprehension_tlv_iter_get_data (iter); + array->len = len; + + array->array =g_try_malloc (len); +if (array->array ==NULL ) +return FALSE; + +memcpy (array->array, 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)
@@ -808,6 +841,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_items_next_action_indicator;case STK_DATA_OBJECT_TYPE_EVENT_LIST :return parse_dataobj_event_list; +case STK_DATA_OBJECT_TYPE_CAUSE : +return parse_dataobj_cause;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/9 Add parser for location status objects
--- src/stkutil.c | 30 ++++++++++++++++++++++++++++++ src/stkutil.h | 6 ++++++ 2 files changed, 36 insertions(+), 0 deletions(-)
src/stkutil.c +30 -0
@@ -67,6 +67,26 @@ static gboolean parse_dataobj_common_bool(struct comprehension_tlv_iter *iter,return TRUE; } +/* For data object that only has one byte */ +static gboolean parse_dataobj_common_byte ( +struct comprehension_tlv_iter *iter,void *user, +enum stk_data_object_type type) +{ +char *byte = user; +const unsigned char *data; + +if (comprehension_tlv_iter_get_tag (iter) != type) +return FALSE; + +if (comprehension_tlv_iter_get_length (iter) !=1 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + *byte = data[0 ]; + +return TRUE; +} +/* For data object that only has a byte array with variable length */ static gboolean parse_dataobj_common_byte_array( struct comprehension_tlv_iter *iter, void *user,
@@ -720,6 +740,14 @@ static gboolean parse_dataobj_cause(return TRUE; } +/* Defined in TS 102.223 Section 8.27 */ +static gboolean parse_dataobj_location_status ( +struct comprehension_tlv_iter *iter,void *user) +{ +return parse_dataobj_common_byte (iter, user, +STK_DATA_OBJECT_TYPE_LOCATION_STATUS ); +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -843,6 +871,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_event_list;case STK_DATA_OBJECT_TYPE_CAUSE :return parse_dataobj_cause; +case STK_DATA_OBJECT_TYPE_LOCATION_STATUS : +return parse_dataobj_location_status;case STK_DATA_OBJECT_TYPE_ICON_ID :return parse_dataobj_icon_id;case STK_DATA_OBJECT_TYPE_IMMEDIATE_RESPONSE :
src/stkutil.h +6 -0
@@ -290,6 +290,12 @@ enum stk_event_type {STK_EVENT_TYPE_MULTIPLE_ACCESS_TECHNOLOGIES_CHANGE =0x14 }; +enum stk_service_state { +STK_NORMAL_SERVICE =0x00 , +STK_LIMITED_SERVICE =0x01 , +STK_NO_SERVICE =0x02 +}; +struct stk_common_byte_array {unsigned int len;unsigned char *array;
Signature · 1 line
1.6.3.3
PATCH 6/9 Add parser for transaction identifier objects
--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -748,6 +748,14 @@ static gboolean parse_dataobj_location_status( STK_DATA_OBJECT_TYPE_LOCATION_STATUS); } +/* Defined in TS 102.223 Section 8.28 */ +static gboolean parse_dataobj_transaction_id ( +struct comprehension_tlv_iter *iter,void *user) +{ +return parse_dataobj_common_byte_array (iter, user, +STK_DATA_OBJECT_TYPE_TRANSACTION_ID ); +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -873,6 +881,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_cause;case STK_DATA_OBJECT_TYPE_LOCATION_STATUS :return parse_dataobj_location_status; +case STK_DATA_OBJECT_TYPE_TRANSACTION_ID : +return parse_dataobj_transaction_id;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 7/9 Add parser for call control requested action objects
--- src/stkutil.c | 10 ++++++++++ 1 files changed, 10 insertions(+), 0 deletions(-)
src/stkutil.c +10 -0
@@ -756,6 +756,14 @@ static gboolean parse_dataobj_transaction_id( STK_DATA_OBJECT_TYPE_TRANSACTION_ID); } +/* Defined in TS 102.223 Section 8.30 */ +static gboolean parse_dataobj_call_control_requested_action ( +struct comprehension_tlv_iter *iter,void *user) +{ +return parse_dataobj_common_byte_array (iter, user, +STK_DATA_OBJECT_TYPE_CALL_CONTROL_REQUESTED_ACTION ); +} +/* Defined in TS 102.223 Section 8.31 */ static gboolean parse_dataobj_icon_id (struct comprehension_tlv_iter *iter,void *user)
@@ -883,6 +891,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_location_status;case STK_DATA_OBJECT_TYPE_TRANSACTION_ID :return parse_dataobj_transaction_id; +case STK_DATA_OBJECT_TYPE_CALL_CONTROL_REQUESTED_ACTION : +return parse_dataobj_call_control_requested_action;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 8/9 Add the macro for icon qualifier
--- src/stkutil.h | 5 +++++ 1 files changed, 5 insertions(+), 0 deletions(-)
src/stkutil.h +5 -0
@@ -296,6 +296,11 @@ enum stk_service_state {STK_NO_SERVICE =0x02 }; +enum stk_icon_qualifier { +STK_ICON_QUALIFIER_TYPE_SELF_EXPLANATORY =0x00 , +STK_ICON_QUALIFIER_TYPE_NON_SELF_EXPLANATORY =0x01 +}; +struct stk_common_byte_array {unsigned int len;unsigned char *array;
Signature · 1 line
1.6.3.3
PATCH 9/9 Add parser for item icon identifier list objects
--- src/stkutil.c | 31 +++++++++++++++++++++++++++++++ src/stkutil.h | 7 +++++++ 2 files changed, 38 insertions(+), 0 deletions(-)
src/stkutil.c +31 -0
@@ -786,6 +786,35 @@ static gboolean parse_dataobj_icon_id(struct comprehension_tlv_iter *iter,return TRUE; } +/* Defined in TS 102.223 Section 8.32 */ +static gboolean parse_dataobj_item_icon_id_list ( +struct comprehension_tlv_iter *iter,void *user) +{ +struct stk_item_icon_id_list *iiil = user; +const unsigned char *data; +unsigned int len; + +if (comprehension_tlv_iter_get_tag (iter) != +STK_DATA_OBJECT_TYPE_ITEM_ICON_ID_LIST ) +return FALSE; + + len =comprehension_tlv_iter_get_length (iter); +if (len <2 ) +return FALSE; + + data =comprehension_tlv_iter_get_data (iter); + iiil->qualifier = data[0 ]; + iiil->len = len -1 ; + + iiil->array =g_try_malloc (len -1 ); +if (iiil->array ==NULL ) +return FALSE; + +memcpy (iiil->array, data +1 , iiil->len); + +return TRUE; +} +/* Defined in 102.223 Section 8.43 */ static gboolean parse_dataobj_imm_resp (struct comprehension_tlv_iter *iter,void *user)
@@ -895,6 +924,8 @@ static dataobj_handler handler_for_type(enum stk_data_object_type type)return parse_dataobj_call_control_requested_action;case STK_DATA_OBJECT_TYPE_ICON_ID :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_IMMEDIATE_RESPONSE :return parse_dataobj_imm_resp;case STK_DATA_OBJECT_TYPE_TEXT_ATTRIBUTE :
src/stkutil.h +7 -0
@@ -356,6 +356,13 @@ struct stk_icon_identifier {unsigned char id; }; +/* Defined in TS 102.223 Section 8.32 */ +struct stk_item_icon_id_list { +unsigned char qualifier; +unsigned char len; +unsigned char *array; +}; +/* * According to 102.223 Section 8.8 interval values of 0x00 are reserved. * We use this to denote empty duration objects.
Signature · 1 line
1.6.3.3