From 10b8b1e2c6356206f43ba1547514cce35fa72ab6 Mon Sep 17 00:00:00 2001 From: Caiwen Zhang Date: Fri, 2 Aug 2013 03:36:46 +0800 Subject: [PATCH] fix +CMGR result parsing error Change-Id: I2b574f6213410f4e51b29d01169a70cd1c37561b Signed-off-by: Caiwen Zhang --- src/s_sms.c | 84 +++++++++++++++++++++++++++++++++++-------------------------- 1 file changed, 49 insertions(+), 35 deletions(-) diff --git a/src/s_sms.c b/src/s_sms.c index f47d0b2..813fa02 100644 --- a/src/s_sms.c +++ b/src/s_sms.c @@ -717,52 +717,68 @@ static void on_response_class2_read_msg(TcorePending *pending, int data_len, con dbg("lines: [%p]", at_response->lines); g_slist_foreach(at_response->lines, print_glib_list_elem, NULL); //for debug log - if (at_response->success > 0) { - dbg("Response OK"); - if (at_response->lines) { - //fetch first line - gslist_line = (char *)at_response->lines->data; + if (at_response->success <= 0) { + err("Response NOK"); + return; + } - dbg("gslist_line: [%s]", gslist_line); + dbg("Response OK"); + if (at_response->lines == NULL) { + err("No lines"); + return; + } - tokens = tcore_at_tok_new(gslist_line); - dbg("Number of tokens: [%d]", g_slist_length(tokens)); - g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log + //fetch first line + gslist_line = (char *)at_response->lines->data; + if (gslist_line == NULL) { + err("Error response data"); + return; + } - line_token = g_slist_nth_data(tokens, 2); //Third Token: Length - if (line_token != NULL) { - pdu_len = atoi(line_token); - dbg("Length: [%d]", pdu_len); - } + dbg("gslist_line: [%s]", gslist_line); - //fetch second line - gslist_line = (char *)at_response->lines->next->data; + tokens = tcore_at_tok_new(gslist_line); + dbg("Number of tokens: [%d]", g_slist_length(tokens)); + g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log - dbg("gslist_line: [%s]", gslist_line); + line_token = g_slist_nth_data(tokens, 2); //Third Token: Length + if (line_token == NULL) { + err("Error response data"); + tcore_at_tok_free(tokens); + return; + } - //free the consumed token - tcore_at_tok_free(tokens); + pdu_len = atoi(line_token); + dbg("Length: [%d]", pdu_len); + tcore_at_tok_free(tokens); - tokens = tcore_at_tok_new(gslist_line); - dbg("Number of tokens: [%d]", g_slist_length(tokens)); - g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log + //fetch second line + if (at_response->lines->next == NULL) { + err("Error response data"); + return; + } + gslist_line = (char *)at_response->lines->next->data; + if (gslist_line == NULL) { + err("Error response data"); + return; + } - hex_pdu = g_slist_nth_data(tokens, 0); //Fetch SMS PDU + dbg("gslist_line: [%s]", gslist_line); - //free the consumed token - tcore_at_tok_free(tokens); - } else { - dbg("No lines"); - } - } else { - err("Response NOK"); - } + tokens = tcore_at_tok_new(gslist_line); + dbg("Number of tokens: [%d]", g_slist_length(tokens)); + g_slist_foreach(tokens, print_glib_list_elem, NULL); //for debug log + + hex_pdu = g_slist_nth_data(tokens, 0); //Fetch SMS PDU /* Convert to Bytes */ bytePDU = (unsigned char *)util_hexStringToBytes(hex_pdu); + if (bytePDU == NULL) { + tcore_at_tok_free(tokens); + return; + } sca_length = bytePDU[0]; - dbg("SCA length = %d", sca_length); gsmMsgInfo.msgInfo.msgLength = pdu_len; @@ -781,9 +797,7 @@ static void on_response_class2_read_msg(TcorePending *pending, int data_len, con rtn = tcore_server_send_notification(tcore_plugin_ref_server(tcore_object_ref_plugin(tcore_pending_ref_core_object(pending))), tcore_pending_ref_core_object(pending), TNOTI_SMS_INCOM_MSG, sizeof(struct tnoti_sms_umts_msg), &gsmMsgInfo); g_free(bytePDU); - - dbg("Exit"); - return; + tcore_at_tok_free(tokens); } static void on_response_read_msg(TcorePending *pending, int data_len, const void *data, void *user_data) -- 2.7.4