Patch per Chan_Dongle: SMS con mittente alfanumerico

sezione dedicata alle tecnologie Voice Over IP

Patch per Chan_Dongle: SMS con mittente alfanumerico

Messaggio da leggereda root » 07/06/2015, 9:11

Mi sono accorto che gli SMS inviati da alcuni fornitori di servizi web, come ad esempio dal sito Postepay per il codice di sicurezza OPT per le transazioni online, non passano e generano un errore con un testo simile a questo: [dongle0] Error parsing incoming message '+CMGR:

Ecco come risolvere:

andare nella directory in cui avete decompresso i sorgenti del pacchetto chan_dongle (se avete seguito la mia guida sara' /root//chan_dongle-1.1.r14) ,

editare il file "pdu.c" con il seguente comando:

sudo nano pdu.c

modificate la parte:

digit = pdu_code2digit(pdu[0][1]);
if(digit <= 0)
return -1;
*number++ = digit;
digit = pdu_code2digit(pdu[0][0]);
if(digit < 0 || (digit == 0 && (syms != 2 || (digits & 0x1) == 0)) || (digit!=16))
return -1;
*number++ = digit;


come segue:

digit = pdu_code2digit(pdu[0][1]);
/* if(digit <= 0)
return -1; */

*number++ = digit;
digit = pdu_code2digit(pdu[0][0]);
/* if(digit < 0 || (digit == 0 && (syms != 2 || (digits & 0x1) == 0)) || (digit!=16))
return -1; */

*number++ = digit;


Salvare il file modificato con con Ctrl+X ,

poi sempre in questa directory dare i seguenti comandi per ricompilare il pacchetto chan_dongle:

./configure
sudo make
sudo install

e poi riavviare Asterisk e FreePBX:

sudo amportal restart


Nota: questa modifica consiglio di farla comunque, anche se non avete riscontrato problemi nella ricezione degli SMS.
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 349
Iscritto il: 10/04/2012, 10:55
Località: Ovada

Re: Patch per Chan_Dongle: SMS con mittente alfanumerico

Messaggio da leggereda root » 07/06/2015, 15:54

Entrando un po' piu' nel dettaglio del problema precedente, ho capito che quando il mittente di un SMS non e' in formato numerico puro e contiene del testo, chan_dongle genera un errore e il SMS non viene ricevuto.
Ad esempio gli SMS inviati dal sito Postepay hanno come mittente: "PosteInfo".

La patch del post precedente risolve il problema della ricezione del corpo del SMS (quando ha del testo nel campo mittente), ma non riceve il mittente del messaggio perche' lo scarta e al suo posto c'e' un codice strano (es. 0B7), per risolvere definitivamente il problema ecco come fare.

Entrare nella directory in cui abbiamo scompattato originariamente chan_dongle:

cd /root/chan_dongle-1.1.r14

facciamo una copia del file originale per sicurezza:

sudo cp pud.c pdu.c.bak

creiamo il file con la path:

sudo nano patch.pdu.c

all'interno inseriamo il seguente testo:

--- pdu.c
+++ pdu.c
@@ -182,6 +182,8 @@
*/

#define NUMBER_TYPE_INTERNATIONAL 0x91
+#define NUMBER_TYPE_NATIONAL 0xC8
+#define NUMBER_TYPE_ALPHANUMERIC 0xD0

/* Message Type Indicator Parameter */
#define PDUTYPE_MTI_SHIFT 0
@@ -229,6 +231,7 @@

#define PDU_PID_SMS 0x00 /* bit5 No interworking, but SME-to-SME protocol = SMS */
#define PDU_PID_EMAIL 0x32 /* bit5 Telematic interworking, bits 4..0 0x 12 = email */
+#define PDU_PID_SMS_REPLACE_MASK 0x40 /* bit7 Replace Short Message function activated (TP-PID = 0x41 to 0x47) */

/* DCS */
/* bits 1..0 Class */
@@ -455,6 +458,14 @@
char digit;
if(*toa == NUMBER_TYPE_INTERNATIONAL)
*number++ = '+';
+ // BEGIN oioki proposed patch 2013-07-24
+ if(*toa == NUMBER_TYPE_ALPHANUMERIC)
+ {
+ for(; syms > 0; syms --, *pdu += 1, *pdu_length -= 1)
+ *number++ = pdu[0][0];
+ return *pdu - begin;
+ }
+ // END oioki proposed patch 2013-07-24
for(; syms > 0; syms -= 2, *pdu += 2, *pdu_length -= 2)
{
digit = pdu_code2digit(pdu[0][1]);
@@ -690,10 +701,11 @@
{
int pid = pdu_parse_byte(pdu, &pdu_length);
*oa_enc = STR_ENCODING_7BIT;
+ if (oa_toa==NUMBER_TYPE_ALPHANUMERIC) *oa_enc = STR_ENCODING_7BIT_HEX;
if(pid >= 0)
{
/* TODO: support other types of messages */
- if(pid == PDU_PID_SMS)
+ if( (pid == PDU_PID_SMS) || (pid & PDU_PID_SMS_REPLACE_MASK) )
{
int dcs = pdu_parse_byte(pdu, &pdu_length);
if(dcs >= 0)

salviamo con Ctrl+x

applichiamo la patch:

sudo patch pdu.c < patch.pdu.c


poi diamo i seguenti comandi per ricompilare il pacchetto chan_dongle:

./configure
sudo make
sudo install


e poi riavviamo Asterisk e FreePBX:

sudo amportal restart

NOTA BENE: se avete gia' applicato la patch precedente, non potete piu' applicare quest'ultima perche' il file pdu.c non e' piu' quello originale, se cosi' fosse scaricatevi il pacchetto originario di chan_dongle ed estraetevi il file "pdu.c" originale andando a metterlo nella directory di cui sopra (al posto di quello modificato), applicando poi l'ultima path come qui descritta.

RIEPILOGO:

Senza nessuna patch (chan_dongle originale), quando viene ricevuto un SMS con mittente alfanumerico, il SMS viene scartato senza avviso e nel log si vede solo la seguente riga:
WARNING[2560] at_response.c: [dongle0] Error parsing incoming message '+CMGR: 0,,135
per cui il messaggio viene perso e non e' piu' recuperabile

Con la prima patch, il SMS non viene piu' scartato e l'email che viene ricevuta e' cosi':
Ricevuto da: 0B7
Sistema SicurezzaWeb Postepay - ...

Il SMS e' leggibile ma non sappiamo chi lo ha mandato.

Con la patch definitiva e' invece cosi':
Ricevuto da: PosteInfo
Sistema Sicurezza Web Postepay
- ...

----------------------------------------------------

In chan_dongle c'e' ancora il problema che quando un SMS multiplo (concatenato) viene ricevuto, il testo e' illeggibile.
Per questo problema al momento non sembra esserci ancora una soluzione.
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 349
Iscritto il: 10/04/2012, 10:55
Località: Ovada

Altra path per chan_dongle SMS (@ tronca il messaggio)

Messaggio da leggereda root » 11/06/2015, 0:13

Ho scoperto un altro problema di chan dongle: quando invia o riceve un SMS e se nel messaggio c'e' la chiocciolina @, il messaggio viene troncato e la parte del messaggio dopo la chiocciolina non viene ricevuta/inviata.
Questo e' particolarmente grave quando per SMS vengono trasmessi indirizzi emails (nome@provider.com).

Altri caratteri che se inseriti nel messaggio SMS possono creare problemi sono: { } [ ] / \

Ecco la patch per risolvere:

Entrare nella directory in cui abbiamo scompattato originariamente chan_dongle:

cd /root/chan_dongle-1.1.r14

facciamo una copia del file originale per sicurezza:

cp char_conv.c char_conv.c.back


creiamo il file con la path:

sudo nano char_conv.patch

all'interno inseriamo il testo che scarichiamo da qui:
http://www.lovisolo.com/asterisk/softwa ... conv.patch

salviamo con Ctrl+x

applichiamo la patch:

sudo patch char_conv.c < char_conv.patch

poi diamo i seguenti comandi per ricompilare il pacchetto chan_dongle:

./configure
sudo make
sudo install


e poi riavviamo Asterisk e FreePBX:

sudo amportal restart

Nota: questa patch, come la precedente, sono per chan_dongle versione 1.1.r14 come da mia guida:
http://www.lovisolo.com/asterisk/softwa ... dongle.pdf
Maurizio
Avatar utente
root
Amministratore
 
Messaggi: 349
Iscritto il: 10/04/2012, 10:55
Località: Ovada


Torna a Asterisk e VOIP

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite

cron