VoIP and Hacking | Consulenza Documentazione

Esperimenti con Asterisk e T38

by admin on Sep.10, 2010, under Asterisk, Linux, Telefonia, VoIP

Il faxing T38 o FoIP (Fax over IP) è una modalità che ormai molti provider offrono e che dovrebbe finalmente sollevare i system integrators dall’onere di aver a che fare con linee analogiche o ISDN solo a causa dei fax, come da quello di applicare patches diverse per channels particolari a seconda dell’hardware utilizzato, specialmente in ambiente Asterisk.

Il supporto al faxing è sempre stato un punto debole di Asterisk, e ciò riguarda anche il supporto a T38, che normalmente consente solamente la modalità passthrough, mentre alcuni dei suoi concorrenti, per primo il suo fork CallWeaver, da tempo possono vantare un supporto T38 completo e più maturo.

Per poter iniziare a sperimentare con la normale modalità T38 Passtrough di Asterisk occorrerebbero dei fax, almeno due, e se, come me, non ne possedete nemmeno uno, l’unica alternativa è quella di sostituirli con dei software in grado di emularli.
Come originatore di fax in ingresso e come destinatario per quelli in uscita ho utilizzato due softphones Voiper (ex Idefisk), che rappresentano appunto un ottimo strumento per sperimentare con il FoIP, senza possedere alcun fax.

La funzionalità T38 Passthrough è facilmente verificabile in una situazione come la seguente, che prevede solamente la presenza di due host collegati in rete locale:
Il server Asterisk è in esecuzione sulla macchina host1 (IP 192.168.1.10), dove si trova in esecuzione anche un SIP softphone Zoiper, che, per non entrare in conflitto col server a causa della coabitazione, è impostato ad utilizzare la porta UDP 5062 anziché la 5060.
Un secondo softphone Zoiper si trova in esecuzione su host2 (IP 192.168.1.11)
A livello di server Asterisk i due softphones sono così definiti in sip.conf:

[zoiper1]
t38pt_udptl = yes,none
t38pt_usertpsource=no
type=friend
context=faxing
host=dynamic
user=zoiper1
allow=alaw
directmedia=no

[zoiper2]
t38pt_udptl = yes,none
t38pt_usertpsource=no
type=friend
context=faxing
host=dynamic
user=zoiper2
callerid=zoiper2
allow=alaw
directmedia=no

mentre dal punto di vista dei client la configurazione è molto semplice, bastando impostare per entrambi, come dominio, l’indirizzo IP del server Asterisk, uno username identico a quello definito a livello server (figura seguente)

zoiper1

ed il supporto al faxing over IP, che viene chiaramente dichiarato come sperimentale), attivo (figura seguente).

zoiper2

La porzione di dialplan relativa alla trasmissione (passthrough) di un fax T38 può essere la seguente:

[faxing]
exten => 444,1,Answer
exten => 444,n,Wait(2)
exten => 444,n,Dial(SIP/zoiper2)
exten => 444,n,Hangup

exten => 555,1,Answer
exten => 555,n,Wait(2)
exten => 555,n,Dial(SIP/zoiper1)
exten => 555,n,Hangup

Si può a questo punto comporre l’estensione sull’altro softphone, ma anziché il pulsante Dial premere quello di Invia Fax (figura seguente), azione che causa l’apertura di una finestra di dialogo per la selezione di un file formato TIFF da inviare come fax. Dopo aver confermato la scelta il file viene immediatamente trasmesso.

zoiper3

Dall’altra parte, al termine della ricezione, il file grafico può venire aperto automaticamente.

Il supporto T38 in Asterisk può anche essere esteso esteso a costituire una terminazione t38 (in realtà sarebbe più corretto parlare di gateway).
L’obiettivo lo si ottiene compilando l’applicazione app_fax (presente nei sorgenti di Asterisk) dopo aver installato come prerequisito essenziale la libreria spandsp.

Su Ubuntu (su Debian fa lo stesso):

# apt-get install libspandsp-dev

Una volta ricompilato Asterisk vi saranno due nuove applicazioni, ReceiveFax e SendFax

In tal modo, ad esempio, un fax trasmesso come t38 viene trasformato direttamente in un file tif, durante la ricezione.

Il pezzo di dialplan interessato è:

exten => 555,1,Answer
exten => 555,n,Wait(2)
exten => 555,n,Set(FAXFILE=/tmp/${UNIQUEID})
exten => 555,n,Set(FAXEXTEN=${EXTEN})
exten => 555,n,Set(CALLER=${CALLERID(num)})
exten => 555,n,Receivefax(${FAXFILE}.tif)
exten => h,1,NoOp(CHIAMANTE ${CALLER} STATUS ${FAXSTATUS}, FAXMODE ${FAXMODE} FILE ${FAXFILE})
exten => h,n,NoOp(Invocato lo script /var/lib/asterisk/scripts/mailfax.sh con argomenti "${CALLER}" "${FAXEXTEN}" "domenico.raffaele@voipandhack.it" "${FAXFILE}"
exten => h,n,System(/var/lib/asterisk/scripts/mailfax.sh "${CALLER}" "${FAXEXTEN}" "domenico.raffaele@voipandhack.it" "${FAXFILE}"

Quando il client Zoiper2 invia un fax, ma la stessa cosa succederebbe se ad inviarlo fosse un provider, la reazione è:

-- Executing [555@default:1] Answer(”SIP/zoiper2-0000000d”, “”) in new stack
– Executing [555@default:2] Wait(”SIP/zoiper2-0000000d”, “2″) in new stack
– Executing [555@default:3] Set(”SIP/zoiper2-0000000d”, “FAXFILE=/tmp/1284028897.13″) in new stack
– Executing [555@default:4] ReceiveFAX(”SIP/zoiper2-0000000d”, “/tmp/1284028897.13.tif”) in new stack
[Sep 9 12:42:56] WARNING[14846]: app_fax.c:811 transmit: Transmission error
== Spawn extension (default, 555, 4) exited non-zero on ‘SIP/zoiper2-0000000d’
– Executing [h@default:1] NoOp(”SIP/zoiper2-0000000d”, “FAXSTATUS SUCCESS, FAXMODE T38, FAXFILE /tmp/1284028897.13″) in new stack

Il transmission error non significa necessariamente che la trasmissione sia fallita.
Quello che importa è che l’extension speciale h rilevi che la variabile ${FAXSTATUS} valga SUCCESS, quella che rileva il mode (${FAXMODE}) sia effettivamente T38, e che vi sia un nuovo file come risultato della trasmissione.
Se cosi è infatti entrano in funzione le ultime due priorità della estension invocata:

-- Executing [h@default:2] NoOp(”SIP/zoiper2-00000022″, “Invocato lo script /var/lib/asterisk/scripts/mailfax.sh con argomenti “zoiper2″ “555″ “domenico.raffaele@voipandhack.it” “/tmp/1284047868.34″”) in new stack
– Executing [h@default:3] System(”SIP/zoiper2-00000022″, “/var/lib/asterisk/scripts/mailfax.sh “zoiper2″ “555″ “domenico.raffaele@voipandhack.it” “/tmp/1284047868.34″”) in new stack

Lo script mailfax.sh provoca l’invio per posta elettronica dell’avviso di ricezione di un fax alle caselle postali desiderate, col fax ricevuto in allegato.
Se si è verificato un errore bloccante nella ricezione, ne viene comunque inviata una notifica per email.

Un riscontro di questo lo si ha nella immagine seguente.

t38_mail

Send post as PDF to PDF | PDF Creator | PDF Converter
:, , , , , , , ,

Comments are closed.

Cerchi qualcosa in particolare?

Usa il form qui sotto per cercare nel sito:

Blogroll!

Alcuni links...

Archives

Tutte le entries, in ordine cronologio...