Revision
15259
Author
gmaruzz
Date
2009-10-28 09:55:33 -0500 (Wed, 28 Oct 2009)

Log Message

gsmopen: beginning receiving SMS in PDU mode

Modified Paths

Diff

Modified: freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h (15258 => 15259)


--- freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h	2009-10-28 11:16:50 UTC (rev 15258)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen.h	2009-10-28 14:55:33 UTC (rev 15259)
@@ -563,3 +563,5 @@
 int gsmopen_sound_boost(void *data, int samples_num, double boost);
 int sms_incoming(private_t * tech_pvt);
 int gsmopen_ring(private_t * tech_pvt);
+
+int iso_8859_1_to_utf8(private_t * tech_pvt, char *iso_8859_1_in, char *utf8_out, size_t outbytesleft);

Modified: freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp (15258 => 15259)


--- freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp	2009-10-28 11:16:50 UTC (rev 15258)
+++ freeswitch/branches/gmaruzz/mod_gsmopen/gsmopen_protocol.cpp	2009-10-28 14:55:33 UTC (rev 15259)
@@ -302,7 +302,7 @@
 	if (res) {
 		DEBUGA_GSMOPEN("AT+CMGF? failed, continue\n", GSMOPEN_P_LOG);
 	}
-	res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CMGF=1");	//TODO: support phones that only accept pdu mode
+	res = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CMGF=0");	//TODO: support phones that only accept pdu mode
 	if (res) {
 		ERRORA("Error setting SMS sending mode to PDU on the cellphone\n", GSMOPEN_P_LOG);
 		return RESULT_FAILURE;
@@ -1039,8 +1039,14 @@
 					DEBUGA_GSMOPEN("|%s| +CMGR: Reading received UNREAD SMS!\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
 				if (tech_pvt->reading_sms_msg)
 					tech_pvt->reading_sms_msg++;
+			} else if ((strncmp(tech_pvt->line_array.result[i], "+CMGR: ", 6) == 0)) {	//TODO  SMS FIXME in config!
+				if (option_debug)
+					DEBUGA_GSMOPEN("|%s| +CMGR: Reading SMS!\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
+				if (tech_pvt->reading_sms_msg)
+					tech_pvt->reading_sms_msg++;
 			}
 
+
 			if ((strcmp(tech_pvt->line_array.result[i], "+MCST: 17") == 0)) {	/* motorola call processing unsolicited messages */
 				tech_pvt->phone_callflow = CALLFLOW_CALL_INFLUX;
 				if (option_debug > 1)
@@ -1351,11 +1357,15 @@
 				int c;
 				char sms_body[16000];
 				int err = 0;
+					memset(sms_body, '\0', sizeof(sms_body));
 
 				if (strncmp(tech_pvt->line_array.result[i], "+CMGR", 5) == 0) {	/* we are reading the "header" of an SMS */
+#if 0
 					char content[512];
 					char content2[512];
 
+					ERRORA("HERE\n", GSMOPEN_P_LOG);
+
 					memset(content, '\0', sizeof(content));
 
 					int inside_comma = 0;
@@ -1419,9 +1429,58 @@
 						}
 
 					}
+#endif //0
 				}				//it was the +CMGR answer from the cellphone
 				else {
 					DEBUGA_GSMOPEN("body=%s\n", GSMOPEN_P_LOG, sms_body);
+					DEBUGA_GSMOPEN("tech_pvt->line_array.result[i]=%s\n", GSMOPEN_P_LOG, tech_pvt->line_array.result[i]);
+
+		SMSMessageRef sms;
+		char content2[1000];
+//MessageType messagetype;
+//Address servicecentreaddress;
+//Timestamp servicecentretimestamp;
+//Address sender_recipient_address;
+
+
+		sms = SMSMessage::decode(tech_pvt->line_array.result[i]); // dataCodingScheme = 8 , text=ciao 123 belè новости לק ראת ﺎﻠﺠﻤﻋﺓ 人大
+
+		NOTICA("SMS=\n%s\n", GSMOPEN_P_LOG, sms->toString().c_str());
+
+		memset(content2, '\0', sizeof(content2));
+		if(sms->dataCodingScheme().getAlphabet() == DCS_DEFAULT_ALPHABET){
+			iso_8859_1_to_utf8(tech_pvt, (char *)sms->userData().c_str(), content2, sizeof(content2));
+		} else 
+			if(sms->dataCodingScheme().getAlphabet() == DCS_SIXTEEN_BIT_ALPHABET){
+				ucs2_to_utf8(tech_pvt, (char *)bufToHex((unsigned char *)sms->userData().data(), sms->userData().length()).c_str(), content2, sizeof(content2));
+			}else {
+				ERRORA("dataCodingScheme not supported=%d\n", GSMOPEN_P_LOG, sms->dataCodingScheme().getAlphabet());
+
+			}
+		NOTICA("dataCodingScheme=%d\n", GSMOPEN_P_LOG, sms->dataCodingScheme().getAlphabet());
+		NOTICA("dataCodingScheme=%s\n", GSMOPEN_P_LOG, sms->dataCodingScheme().toString().c_str());
+		NOTICA("address=%s\n", GSMOPEN_P_LOG, sms->address().toString().c_str());
+		NOTICA("serviceCentreAddress=%s\n", GSMOPEN_P_LOG, sms->serviceCentreAddress().toString().c_str());
+		NOTICA("serviceCentreTimestamp=%s\n", GSMOPEN_P_LOG, sms->serviceCentreTimestamp().toString().c_str());
+		NOTICA("messageType=%d\n", GSMOPEN_P_LOG, sms->messageType());
+		NOTICA("userData= |||%s|||\n", GSMOPEN_P_LOG, content2);
+
+
+					memset(sms_body, '\0', sizeof(sms_body));
+					strncpy(sms_body, content2, sizeof(sms_body));
+					DEBUGA_GSMOPEN("body=%s\n", GSMOPEN_P_LOG, sms_body);
+					strncpy(tech_pvt->sms_body, sms_body, sizeof(tech_pvt->sms_body));
+					strncpy(tech_pvt->sms_sender, "ciapa", sizeof(tech_pvt->sms_sender));
+					strncpy(tech_pvt->sms_sender, sms->address().toString().c_str(), sizeof(tech_pvt->sms_sender));
+					strncpy(tech_pvt->sms_date, "cucu", sizeof(tech_pvt->sms_date));
+					strncpy(tech_pvt->sms_date,  sms->serviceCentreTimestamp().toString().c_str(), sizeof(tech_pvt->sms_date));
+//messagetype = sms->messageType();
+//servicecentreaddress = sms->serviceCentreAddress();
+//servicecentretimestamp = sms->serviceCentreTimestamp();
+//sender_recipient_address = sms->address();
+
+
+#if 0
 					//strncat(tech_pvt->sms_message, "---", ((sizeof(tech_pvt->sms_message) - strlen(tech_pvt->sms_message)) - 1));
 					//strncat(tech_pvt->sms_message, tech_pvt->line_array.result[i], ((sizeof(tech_pvt->sms_message) - strlen(tech_pvt->sms_message)) - 1));
 					//strncat(tech_pvt->sms_message, "|||", ((sizeof(tech_pvt->sms_message) - strlen(tech_pvt->sms_message)) - 1));
@@ -1437,6 +1496,7 @@
 					//strncat(tech_pvt->sms_message, "|||", ((sizeof(tech_pvt->sms_message) - strlen(tech_pvt->sms_message)) - 1));
 
 					//DEBUGA_GSMOPEN("sms_message=%s\n", GSMOPEN_P_LOG, tech_pvt->sms_message);
+#endif //0
 				}				//it was the UCS2 from cellphone
 
 			}					//we were reading the SMS
@@ -3048,7 +3108,7 @@
 
 			err = gsmopen_serial_write_AT_ack(tech_pvt, "AT+CMGF=0");
 			if (err) {
-				ERRORA("AT+CMGF=1 (set message sending to PDU (as opposed to TEXT)  do not got OK from the phone\n", GSMOPEN_P_LOG);
+				ERRORA("AT+CMGF=0 (set message sending to PDU (as opposed to TEXT)  do not got OK from the phone\n", GSMOPEN_P_LOG);
 			}