Re: [PATCH] DLR in EMI/UCP are not decoded to latin1

"Vincent CHAVANIS" <[email protected]>
Newsgroups gmane.comp.mobile.kannel.devel
Message-ID <04a901c6d0e5$137cec00$9600a8c0@vince>
This is the same way of processing an incoming message (UCP 52)

Here is a review of the patch
(- whites spaces changes to follow coding rules)
(- added E50_MT checks as it's an Optional field on EMI specs 4.6)


diff -rau /gateway-cvs/gw/smsc/smsc_emi.c /gateway/gw/smsc/smsc_emi.c
--- /gateway-cvs/gw/smsc/smsc_emi.c     2006-04-07 14:54:06.000000000 +0200
+++ /gateway/gw/smsc/smsc_emi.c 2006-09-05 13:51:21.000000000 +0200
@@ -751,9 +757,9 @@
            msg->sms.msgdata = emimsg->fields[E50_AMSG];
            emimsg->fields[E50_AMSG] = NULL; /* So it's not freed */

-        /* obey the NRC (national replacement codes) */
-        if (privdata->alt_charset == EMI_NRC_ISO_21)
-            charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);
+            /* obey the NRC (national replacement codes) */
+            if (privdata->alt_charset == EMI_NRC_ISO_21)
+                charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);

            charset_gsm_to_latin1(msg->sms.msgdata);
        }
@@ -866,6 +872,14 @@
            else
                msg->sms.msgdata = 
octstr_duplicate(emimsg->fields[E50_AMSG]);
            octstr_hex_to_binary(msg->sms.msgdata);
+
+            if (octstr_get_char(emimsg->fields[E50_MT], 0) == '3') {
+                /* obey the NRC (national replacement codes) */
+                if (privdata->alt_charset == EMI_NRC_ISO_21)
+                    charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);
+
+                charset_gsm_to_latin1(msg->sms.msgdata);
+            }
            bb_smscconn_receive(conn, msg);
        }
        reply = emimsg_create_reply(53, emimsg->trn, 1, privdata->name);




--
Telemaque - 06200 NICE - (FR)
Service Technique/Reseau - NOC
Developpement SMS/MMS/Kiosques
http://www.telemaque.fr/
[email protected]
Tel : +33 4 93 97 71 64 (fax 68)
----- Original Message ----- 
From: "Andreas Fink" <[email protected]>
To: "Vincent CHAVANIS" <[email protected]>
Cc: <[email protected]>
Sent: Tuesday, September 05, 2006 12:16 PM
Subject: Re: [PATCH] DLR in EMI/UCP are not decoded to latin1


I agree on the added line

             charset_gsm_to_latin1(msg->sms.msgdata);

as this is most probably the right way to do (but has no effect on
english default DLR messages 90% of the EMI/UCP SMSC's seem to return)

             /* obey the NRC (national replacement codes) */
             if (privdata->alt_charset == EMI_NRC_ISO_21)
                 charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);

especially, why is it german only as you probably more look towards
the french side...


On 05.09.2006, at 11:46, Vincent CHAVANIS wrote:

> No objections here ?
>
> regards
>
> Vincent
>
> --
> Telemaque - 06200 NICE - (FR)
> Service Technique/Reseau - NOC
> Developpement SMS/MMS/Kiosques
> http://www.telemaque.fr/
> [email protected]
> Tel : +33 4 93 97 71 64 (fax 68)
> ----- Original Message ----- From: "Vincent CHAVANIS" 
> <[email protected]>
> To: <[email protected]>
> Sent: Friday, August 18, 2006 12:47 PM
> Subject: [PATCH] DLR in EMI/UCP are not decoded to latin1
>
>
>
> DLR msgdata in EMI/UCP smsc are not decoded.
> When a char with an accent arrives to a DLR like "MSISDN porté"
> It will not decode the msg and will result in a non-printable char.
> IA5 charset can handle these chars as when we are receiving an MO.
> We simply obey the NRC (if needed), then convert it to latin1.
>
> regards
>
> Vincent.
>
> --
> Telemaque - 06200 NICE - (FR)
> Service Technique/Reseau - NOC
> Developpement SMS/MMS/Kiosques
> http://www.telemaque.fr/
> [email protected]
> Tel : +33 4 93 97 71 64 (fax 68)
>
>
>
patch_emi_c.txt (text/plain, 1.4 KB)
diff -rau /gateway-cvs/gw/smsc/smsc_emi.c /gateway/gw/smsc/smsc_emi.c
--- /gateway-cvs/gw/smsc/smsc_emi.c     2006-04-07 14:54:06.000000000 +0200
+++ /gateway/gw/smsc/smsc_emi.c 2006-09-05 13:51:21.000000000 +0200
@@ -751,9 +757,9 @@
            msg->sms.msgdata = emimsg->fields[E50_AMSG];
            emimsg->fields[E50_AMSG] = NULL; /* So it's not freed */
 
-        /* obey the NRC (national replacement codes) */
-        if (privdata->alt_charset == EMI_NRC_ISO_21)
-            charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);
+            /* obey the NRC (national replacement codes) */
+            if (privdata->alt_charset == EMI_NRC_ISO_21)
+                charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);
 
            charset_gsm_to_latin1(msg->sms.msgdata);
        }
@@ -866,6 +872,14 @@
            else
                msg->sms.msgdata = octstr_duplicate(emimsg->fields[E50_AMSG]);
            octstr_hex_to_binary(msg->sms.msgdata);
+
+            if (octstr_get_char(emimsg->fields[E50_MT], 0) == '3') {
+                /* obey the NRC (national replacement codes) */
+                if (privdata->alt_charset == EMI_NRC_ISO_21)
+                    charset_nrc_iso_21_german_to_gsm(msg->sms.msgdata);
+     
+                charset_gsm_to_latin1(msg->sms.msgdata);
+            }
            bb_smscconn_receive(conn, msg);
        }
        reply = emimsg_create_reply(53, emimsg->trn, 1, privdata->name);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.