HylaFAX e modem virtuali

L'utilizzo di modem virtuali con HylaFAX può essere utile in tutte quelle situazioni in cui sia impossibile, anti-economico o semplicemente meno pratico ricorrere a quelli hardware.
Si pensi ad esempio a quelle infrastrutture di rete nelle quali le comunicazioni telefoniche (fax inclusi) viaggiano via VOIP. Se le funzioni di PBX sono svolte da un prodotto come Asterisk, è praticamente certo il ricorso a modem software qualiIAXmodem o T38modem affinchè sia possibile operare con HylaFAX.
Essi costituiscono inoltre un eccellente strumento da utilizzare nel caso in cui si intenda virtualizzare un'infrastruttura fax per ridurre i costi di gestione, evitare lo spreco di risorse, contenere gli spazi, etc. ma anche per creare dei laboratori di test in cui implementare delle funzionalità particolari, sperimentare delle configurazioni di un certo tipo, etc.

Qui di seguito si analizzerà una modalità di impiego di modem virtuali proprio per quest'ultimo tipo di esigenza.

HylaFAX <-> T38modem

Per fare fare in modo che i modem virtuali riescano a comunicare fra loro scambiandosi messaggi fax senza appoggiarsi ad hardware fisico e senza ricorrere alla linea PSTN, si può ricorrere a T38modem, parte del progetto OpalVoip e presente nei repository di Debian.

Per poter inviare un fax da un modem virtuale ad un altro, bisognerà creare i modem e impostare una route che instradi la comunicazione:

root@vmtest:~# t38modem --no-sip -n -o /var/log/t38modem_trace.log -p +/dev/ttyx0,+/dev/ttyx1 --route "modem:0.*=h323:all@127.0.0.1" --route "h323:.*=modem:" > /var/log/t38modem.log
T38Modem Version 1.2.0
 (OPAL-3.6.8/3.6.8, PTLIB-2.6.7/2.6.7) by Vyacheslav Frolov on Unix Linux (2.6.32-5-openvz-686-i686)

Enabled audio formats for H.323 (in preference order):
  G.711-uLaw-64k
  G.711-ALaw-64k
Waiting for incoming H.323 calls from tcp$*:1720,tcps$*:1300
Disabled SIP protocol
Route table:
  modem:0.*=h323:all@127.0.0.1
  h323:.*=modem:

Oltre ai modem ttyx0 e ttyx1, sono stati creati un endpoint H.323 e una route table avente il compito di indirizzare tutte le chiamate (che iniziano con '0') su localhost.

Per testare la funzionalità dei due modem si può utilizzare cu avendo cura, prima, di modificare i permessi sui device:

root@vmtest:~# chown uucp /dev/ttyx0
root@vmtest:~# chown uucp /dev/ttyx1

Avviate due istanze su due terminali/console diversi:

terminale 1

cu -l /dev/ttyx0
Connected.

terminale 2

cu -l /dev/ttyx1
Connected.

impartendo sul terminale 1:

atdt012345

sul terminale 2 l'output sarà:

.
RING

RING

e contemporaneamente nei log:

Call from modem:T38Modem%20v1.2.0 to 012345@+/dev/ttyx0, route to h323:all@tcp$127.0.0.1:1720
Call from h323:T38Modem%20v1.2.0 to all, route to modem:

Questo vorrà dire che i due modem sono attivi e che riescono a comunicare fra loro.

Perchè HylaFAX possa riconoscerli, bisognerà creare i due file di configurazione /etc/hylafax/config.ttyx0 e/etc/hylafax/config.ttyx1 aventi entrambi contenuto:

#
# HylaFAX configuration for a T38FAX Pseudo Modem
#

# SessionTracing:   0x2FFF
RingsBeforeAnswer:  1

ModemType:          Class1
ModemFlowControl:   rtscts
ModemRevQueryCmd:   AT+FREV?

ModemResetCmds:     "AT#CID=10"
RingsBeforeAnswer:  2

Visto che in Debian il file di configurazione per hylafax di t38modem è già presente, basterà:

root@vmtest:~# cp /var/spool/hylafax/config/t38modem /etc/hylafax/config.ttyx0
root@vmtest:~# cp /var/spool/hylafax/config/t38modem /etc/hylafax/config.ttyx1

Una volta riavviato HyLAFAX ci si accerterà del riconoscimento dei modem:

root@vmtest:~# /etc/init.d/hylafax restart

root@vmtest:~# faxstat -s
HylaFAX scheduler on vmtest.machine: Running
Modem ttyx1 (): Running and idle
Modem ttyx0 (): Running and idle

e si potrà infine procedere all'invio di un fax da un modem ad un altro:

root@vmtest:~# sendfax -n -h ttyx0@ -d 0123 testfile.txt 
request id is 2 (group id 2) for host localhost (1 file)

I log dovrebbero restituire qualcosa del genere:

...
Jan 10 15:58:07 vmtest FaxQueuer: SUBMIT JOB 2
Jan 10 15:58:08 vmtest FaxGetty: LOCKWAIT
Jan 10 15:58:08 vmtest FaxQueuer: req.items.item = "docq/doc2.ps;c0" ()
Jan 10 15:58:17 vmtest FaxSend: MODEM VYACHESLAV FROLOV T38FAX/1.2.0
Jan 10 15:58:17 vmtest FaxSend: SEND FAX: JOB 2 DEST 0123 COMMID 000000002 DEVICE '/dev/ttyx0' FROM 'root ' USER root
Jan 10 15:58:22 vmtest FaxGetty: ANSWER: FAX CONNECTION  DEVICE '/dev/ttyx1'
Jan 10 15:58:34 vmtest FaxSend: SEND FAX: JOB 2 SENT in 0:00:09
Jan 10 15:58:35 vmtest FaxGetty: RECV FAX (000000003): from , page 1 in 0:00:11, INF, 3.85 line/mm, 2-D MMR, 14400 bit/s
Jan 10 15:58:35 vmtest FaxGetty: RECV FAX (000000003): recvq/fax000000001.tif from , route to , 1 pages in 0:00:13
Jan 10 15:58:35 vmtest FaxGetty: RECV FAX: bin/faxrcvd "recvq/fax000000001.tif" "ttyx1" "000000003" ""
Jan 10 15:58:37 vmtest FaxQueuer: NOTIFY: bin/notify "doneq/q2" "done" "0:00:29"
Jan 10 15:58:37 vmtest FaxQueuer: NOTIFY exit status: 0 (1173)
Jan 10 15:58:45 vmtest FaxGetty: MODEM VYACHESLAV FROLOV T38FAX/1.2.0
Jan 10 15:58:46 vmtest FaxGetty: MODEM VYACHESLAV FROLOV T38FAX/1.2.0

In questo caso il file testfile.txt è stato correttamente spedito da ttyx0 e ricevuto da ttyx1.

Ovviamente l'utilizzo di modem virtuali non è affatto di esclusiva pertinenza di HylaFAX.
Ci sono tante aziende che tutt'oggi continuano ad utilizzare software che sfrutta connessioni modem dirette. Il passaggio a connessioni TCP/IP comporterebbe di certo numerosi benefici, ma dover re-implementare quel tipo di software significherebbe vedersi costretti ad investire una gran quantità di denaro.
I modem virtuali, in questo caso, costituiscono un'alternativa tecnicamente percorribile, a costi contenuti ed affidabile.

 

Happy virtual-faxing!