Sending faxes through a plain phone (FoIP)

Fax machines are bulky, and rather old-fashioned. They are often located in centralised pools and have their own phone numbers. Wouldn't it be nice to have a fax integrated into every phone? Therefore, sending and receiving faxes from every desktop, without requiring further infrastructure? The 0cpm Firmerware makes it possible.

Modern desktops have no problem with scanning documents, and can also find the software to turn it into a multi-page TIFF image. This format is very close to the wire format used by fax. Uploading this to a phone is a very smooth method of shipping faxes, better even than what people are used to. The only thing needed to ship the image out is a reliable fax-over-IP or FoIP connection.

Reliable network connections for fax don't grow on trees. As a matter of fact, most VoIP connections are so tuned to voice, that fax doesn't get through well enough. So, to transport fax, you should not pick a voice codec. Not even if it is simplistic per-sample compression such as G.711 (the ISDN codec) because that might fail due to jitter in delivery timing.

To transport fax over a network, a special codec was developed, named T.38. This is the most reliable FoIP method you will find. So, what we've done to support fax on a plain phone is simply to build in the T.38 codec for talking to the network, and TFTP-over-LLC1 for easy desktop uploads. This is not even very difficult, as it is part of a wonderful open source toolkit named SpanDSP.

There are various alternative transports for T.38 -- TCP, UDPTL and RTP. The TCP transport is not used very often, because it has its own ideas about timing and might mess up the transmission on account of that. The UDPTL transport is a protocol that was only designed for use with fax, and is now recognised as a mistake -- but it is still available in many places. The modern way is through RTP, the same realtime carrier protocol that is also used for voice, video and live text messaging. This is advised to also be implemented everywhere, to pave way towards a future without UDPTL.

We are going to walk that way, and hope it is sufficiently paved. The reason is simple: we want to help forward privacy mechanisms, and ZRTP is the way in which we achieve that. ZRTP is defined for RTP in general, but UDPTL is not part of that -- and never will be, due to its specific target.

By sticking to RTP instead of UDPTL, we can try to setup encryption just like we support it for voice calls and realtime text. So if you were to exchange a fax with another phone supporting both fax over RTP and ZRTP for privacy, we can easily encrypt the fax exchange. Moreover, it is possible to log the ZRTP secret, so you have a way of checking that the other side received the same document as you did!

We hope you enjoy the choices we've made.

More background, potential problems and a FAQ can be found alongside SpanDSP, the library that has been used to support fax in these phones.

Note: This functionality is planned, but not yet fully implemented.