From fa1d773a84078203ef0fad1538e5bcca407c51f2 Mon Sep 17 00:00:00 2001 From: Giovanni Maruzzelli Date: Thu, 20 Jun 2013 23:58:28 +0200 Subject: [PATCH] FS-4821 fixed core dump when received sms in UCS2 after having sent sms in UCS2 --- .../mod_gsmopen/gsmopen_protocol.cpp | 21 +++++++++++++++---- src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp | 8 ++++++- 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp index 0b1d9350dd..4fcf75cfa2 100644 --- a/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp +++ b/src/mod/endpoints/mod_gsmopen/gsmopen_protocol.cpp @@ -1736,7 +1736,13 @@ int gsmopen_serial_read_AT(private_t *tech_pvt, int look_for_ack, int timeout_us //Timestamp servicecentretimestamp; //Address sender_recipient_address; - sms = SMSMessage::decode(tech_pvt->line_array.result[i]); // dataCodingScheme = 8 , text=ciao 123 belè новости לק ראת ﺎﻠﺠﻤﻋﺓ 人大 + try { + sms = SMSMessage::decode(tech_pvt->line_array.result[i]); // dataCodingScheme = 8 , text=ciao 123 belè новости לק ראת ﺎﻠﺠﻤﻋﺓ 人大 + } + catch(...) { + ERRORA("GsmException\n", GSMOPEN_P_LOG); + return -1; + } DEBUGA_GSMOPEN("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str()); @@ -1775,8 +1781,9 @@ int gsmopen_serial_read_AT(private_t *tech_pvt, int look_for_ack, int timeout_us //sender_recipient_address = sms->address(); } - catch(GsmException & ge) { - ERRORA("GsmException= |||%s|||\n", GSMOPEN_P_LOG, ge.what()); + catch(...) { + ERRORA("GsmException\n", GSMOPEN_P_LOG); + return -1; } @@ -2487,7 +2494,7 @@ int utf8_to_iso_8859_1(private_t *tech_pvt, char *utf8_in, size_t inbytesleft, c iconv_res = iconv(iconv_format, &inbuf, &inbytesleft, &outbuf, &outbytesleft); #endif // WIN32 if (iconv_res == (size_t) -1) { - DEBUGA_GSMOPEN("cannot translate in iso_8859_1 error: %s %d\n", GSMOPEN_P_LOG, strerror(errno), errno); + DEBUGA_GSMOPEN("cannot translate in iso_8859_1 error: %s (errno: %d)\n", GSMOPEN_P_LOG, strerror(errno), errno); return -1; } DEBUGA_GSMOPEN @@ -2854,10 +2861,16 @@ int gsmopen_sendsms(private_t *tech_pvt, char *dest, char *text) tech_pvt->no_ucs2 = 0; tech_pvt->sms_pdu_not_supported = 1; + ok = gsmopen_sendsms(tech_pvt, dest, text); + tech_pvt->no_ucs2 = 1; tech_pvt->sms_pdu_not_supported = 0; + err = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CMGF=0"); + if (err) { + ERRORA("AT+CMGF=0 (set message sending to PDU (as opposed to TEXT) didn't get OK from the phone\n", GSMOPEN_P_LOG); + } return ok; } diff --git a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp index 9816c78155..6eb6d865aa 100644 --- a/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp +++ b/src/mod/endpoints/mod_gsmopen/mod_gsmopen.cpp @@ -3054,7 +3054,7 @@ int sms_incoming(private_t *tech_pvt) return -1; } //DEBUGA_GSMOPEN("received SMS on interface %s: %s\n", GSMOPEN_P_LOG, tech_pvt->name, tech_pvt->sms_message); - DEBUGA_GSMOPEN("received SMS on interface %s: DATE=%s, SENDER=%s, BODY=%s|\n", GSMOPEN_P_LOG, tech_pvt->name, tech_pvt->sms_date, tech_pvt->sms_sender, + NOTICA("received SMS on interface %s: DATE=%s, SENDER=%s, BODY=|%s|\n", GSMOPEN_P_LOG, tech_pvt->name, tech_pvt->sms_date, tech_pvt->sms_sender, tech_pvt->sms_body); #ifdef NOTDEF if (!zstr(tech_pvt->session_uuid_str)) { @@ -3158,6 +3158,12 @@ int sms_incoming(private_t *tech_pvt) } /* mod_sms end */ + memset(tech_pvt->sms_message, '\0', sizeof(tech_pvt->sms_message)); + memset(tech_pvt->sms_sender, '\0', sizeof(tech_pvt->sms_sender)); + memset(tech_pvt->sms_date, '\0', sizeof(tech_pvt->sms_date)); + memset(tech_pvt->sms_body, '\0', sizeof(tech_pvt->sms_body)); + memset(tech_pvt->sms_datacodingscheme, '\0', sizeof(tech_pvt->sms_datacodingscheme)); + memset(tech_pvt->sms_servicecentreaddress, '\0', sizeof(tech_pvt->sms_servicecentreaddress)); //memset(&tech_pvt->chatmessages[which], '\0', sizeof(&tech_pvt->chatmessages[which]) ); //memset(tech_pvt->sms_message, '\0', sizeof(tech_pvt->sms_message));