Send Receive Fax-T38

From Kolmisoft Wiki
Revision as of 13:22, 12 March 2008 by Admin (talk | contribs) (Howto send&receive faxes with T.38 with almost 100% success rate)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

Howto send&receive faxes with T.38 with almost 100% success rate

In this article i will show you how to enable fax -ing with T.38 support. For those who don't know what T.38 is, it's a protocol especially for FAX over VoIP. You can send & receive faxes with almost 100% success rate, even if you're using a low-quality codec (g726,g729).

The main technology is simple: Because standard FAX is mainly designed for POTS media, it's very sensitive to quality of the line.

From the view of VoIP it works only with g711u/a (PCM) and with very good network conditions (no packet loss, very low round-trip). The T.38 makes a tunnel between two (T.38 capable) devices and code-decode the fax at the ends of that tunnel. The data-sending protocol of T.38 is (in most cases) UDP based and it can be sent via very poor network environments.



Because of it's mechanism, you will need a device (ATA) with T.38 support and your provider must support T.38 too.

My device is a Linksys SPA2102 (settings are the same for SPA3000). Of course you can use other ATA, which supports T38.


1. First, you'll need the source tarball of Asterisk (same version as installed). (My version: 1.4.17)

 After you untar it, edit chan_sip.c file located in channels/ directory of the source tree.
 
 Search for this line:  
    static int global_t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 |
                          T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600;


 and replace with this line (If your provider & ATA supports T.38 version 1, change T38FAX_VERSION_0 to T38FAX_VERSION_1):
    static int global_t38_capability = T38FAX_VERSION_0 | T38FAX_RATE_2400 |
                          T38FAX_RATE_4800 | T38FAX_RATE_7200 | T38FAX_RATE_9600 | T38FAX_RATE_12000 | T38FAX_RATE_14400;
 Save the file and change directory to the root of the source tree:
    
     cd ..
 Build the source:
     make
 Copy the newly created chan_sip.so over the old one:
     cp channels/chan_sip.so /usr/lib/asterisk/modules/

2. Turn on T.38 in MOR gui at both the provider and the device!


3. Make sure T.38 is enabled in /etc/asterisk/sip.conf!

  T.38 can be enabled by this setting:
  t38pt_udptl = yes

4. Edit /etc/asterisk/udptl.conf like this:

 ;
 ; UDPTL Configuration (UDPTL is one of the transports for T.38)
 ;
 [general]
 ;
 ; UDPTL start and UDPTL end configure start and end addresses
 ;
 udptlstart=4000
 udptlend=4999
 ;
 ; Whether to enable or disable UDP checksums on UDPTL traffic
 ;
 udptlchecksums=no
 ;
 ; The error correction type to be sent
 ;
 ;T38FaxUdpEC = t38UDPFEC
 T38FaxUdpEC = t38UDPRedundancy
 ;
 ; The maximum length of a UDPTL packet
 ;
 T38FaxMaxDatagram = 200
 ;
 ; The number of error correction entries in a UDPTL packet 
 ;
 udptlfecentries = 3
 ;
 ; The span over which parity is calculated for FEC in a UDPTL packet
 ;
 udptlfecspan = 3


5. Settings on SPA2102

 Make sure you have "FAX Enable T.38" enabled in your device! You should also set other settings to make it work:
 FAX Passtru method: ReINVITE
 Call Waiting: Disable
 Jitter level: Very High
 Silence Supp: Disable
 Echo Cancel: Disable
 By the way, it should work with factory settings out-of-box (T.38 is enabled by default).

I hope you will get working for now. If not, try to tune settings in udptl.conf!


--Szab100 14:22, 12 March 2008 (CET)