[asterisk-dev] [Code Review] Rework of T.38 negotiation and UDPTL API to address interoperability problems

Steve Underwood steveu at coppice.org
Tue Jul 14 07:52:11 CDT 2009


Hi Kevin,

Kevin Fleming wrote:
> 1) T.38 applications in Asterisk (app_fax) only generate/receive IFP packets, they do not ever work with UDPTL packets. As a result of this, they cannot be allowed to generate packets that would overflow the other endpoints' MaxDatagram size after the UDPTL stack adds any error correction information. With this patch, the application is told the maximum *IFP* size it can generate, based on a calculation using the far end MaxDatagram size and the active error correction mode on the T.38 session. The same is true for sending *our* MaxDatagram size to the remote endpoint; it is computed from the value that the application says it can accept (for a single IFP packet) combined with the active error correction mode.
>   
How do you interpret the meaning of T38FaxMaxDatagram? Its a stupid 
name, as nothing in T.38 is actually referred to as a datagram. They use 
the term packet for both the IFP and UDPTL levels.

T.38 D.2.1.3.1 says its "The maximum size of the payload within an RTP 
packet that can be accepted by the remote device."

T.38 D.2.3.5 says its "This parameter signals the largest acceptable 
datagram for the offering endpoint and the answering endpoint (i.e., the 
maximum size of the RTP payload). The answering endpoint may accept a 
larger or smaller datagram than the offering endpoint. Each endpoint 
should be considerate of the maximum datagram size of the opposite 
endpoint."

What exactly is the RTP payload? Before adding redundancy, or after? 
What about UDPTL? They never mention T38FaxMaxDatagram as having any 
relevence to UDPTL, although most systems only support UDPTL and most 
send a value for T38FaxMaxDatagram. A transmitted RTP packet can 
obviously be larger than T38FaxMaxDatagram, as you need to add the 
framing words to the payload. What happens in the case of UDPTL, where 
the framing and redundancy coalesce?

In practice it seems some systems treat T38FaxMaxDatagram as the maximum 
IFP length, and some treat it as the maximum UDPTL length. I infer this, 
because some system use a number too small for it to be anything but the 
maximum IFP length.

I've always regarded the number sent to my software as kinda iffy, and 
just tried to keep my IFPs pretty short.

This area really needs exploring more in the FoIP working group.

Regards,
Steve





More information about the asterisk-dev mailing list