Faxing is one the most universally accepted technologies around. By some accounts,
revenues generated by faxing add up to 30 billion dollars per year worldwide. And with 80
to 100 million fax machines and fax modems around the world (with that number expected to
grow) you can imagine how excited the telephone companies are with this lucrative market.
Fax technology uses the same analog lines used to make voice calls. At the beginning of
every fax transmission process, the sending and receiving fax machines synchronize by
sending handshake signals. Then from the sending fax machine a document is scanned,
converted to a digital image, compressed, and sent over the analog lines (using
modulation) to the recipient fax, which reconstructs the facsimile of the original
document by reversing the process. The digitizing process uses the CCITT G3 or G4
protocols, which specify image compression algorithms.
With the advent of the Internet and its subsequent popularity, faxing has found a new
home in the way it is generated, routed, and received. Since a fax transmission is
basically data, the Internet is a perfect carrier for faxing, and faxing over the Internet
can reduce the associated costs as compared to traditional analog methods. Moreover, since
fax transmission does not require a real-time characteristic, delays associated with the
Internet will not disturb the process.
FaxSav is a pioneer in using the Internet for a managed and cost-effective way to
transmit faxes. To that end, FaxSav has a broad range of products from desktop faxing, to
fax-to-email transmission, to fax-to-fax service.
For this review, we tested the FaxSav ServerLink API development product, which is a
set of APIs (application programming interfaces) designed for developers to craft
customized desktop Internet faxing applications, or enhance fax server products using the
FaxSav network for fax transmission. Desktop Internet faxing through FaxSav comes with
several benefits, including: reduced transmission cost, reduced fax equipment cost, faster
fax transmissions, easier enterprise fax tracking, and accounting management. The
disadvantages are Internet reliability problems (e.g., blackouts), and a need for a
scanner to fax paper documents. Considering the pros and cons of desktop Internet faxing,
we believe that the ServerLink API advantages clearly outweigh the disadvantages, making
it a valuable and powerful tool to quickly create fax applications suited to specific
business requirements as well as enhancing fax server products to take advantage of the
FaxSav network as an added service to analog transmission.
ServerLink API is a set of API functions allowing for the development of desktop Internet
fax applications. Its features include:
- Support for Windows 95 and NT.
- Support for multi-page G3 and G4 Tiff, Adobe Acrobat (PDF), and ASCII text files.
- Multiple methods of sending faxes to the FaxSav network.
- Fax tracking through Query API functions.
- E-mail notification.
- Free transmission retries.
The ServerLink API documentation was bundled with the installation program and came in two
formats - MS Word and Adobe Acrobat (PDF). While there was an overview, and usage
instruction was provided, most of the documentation was taken up by the FaxSend API and
Query API function references. The function references were relatively complete with
sample programming usage provided in most cases. The three sample programs installed with
ServerLink API, while very helpful, lacked good supporting documentation, which we think
would make the sample programs easier to understand.
We downloaded the self-extracting ServerLink API file from FaxSav's ftp site
(ftp.faxsav.com) and installed it on our PC, a 90 MHz Pentium with 32 Megabytes of RAM
running Windows 95. The installation file created the ServerLink API corresponding files,
which included the static libraries, DLLs, documentation in MS Word and Adobe Acrobat, and
sample codes placed in separate directories.
The ServerLink API functions can be used with several development platforms, but since
the included sample codes were written in Visual C++, we decided to follow suit and use MS
Visual C++ 5.0 to write a simple fax program. Our Internet access was a 28.8 Kbps dial-up
connection to an ISP. Although ServerLink API is a free product, fax transmission requires
an account, which comprises an e-mail address and a password. We obtained an account from
FaxSav to begin our review.
For those who do not require a customized fax program, or just need a simple Internet fax
application, FaxSav provides FaxLauncher, a free fax software package that sends faxes
over the Internet from any Windows or Macintosh application (the fax transmissions are
billable). FaxLauncher is essentially a print driver with an added Internet transmission
module. When the user is ready to fax a document, they choose the FaxLauncher printer,
which handles the document rendering. This is automatically followed by the transmission
module which sends the rendered document over the Internet. Faxes are routed through the
FaxSav system on an intelligent network of gateways which route the fax transmission to
the gateway with the best calling rate to the destination fax number (least cost routing).
At this point, a regular PSTN call is made to the destination number, and the fax is
transmitted. The fax job is completed by sending a confirmation e-mail to the user,
notifying them about the status of the fax (this option can be disabled by the user).
ServerLink API essentially addresses the latter part of this process, which is the fax
transmission over the Internet. In this scenario, there is no universal document rendering
capability, the documents should already be in the accepted formats before transmission.
The supported formats are multi-page G3 and G4 Tiff, Adobe Acrobat (PDF), and ASCII text
files. A program based on ServerLink API can then transmit one or more of these documents
using several methods. The confirmation e-mail and billing procedures are handled the same
way as in FaxLauncher.
ServerLink API functions fall under two categories. The FaxSend API includes functions
to package documents as faxes and deliver them to the FaxSav network using SMTP (Simple
Mail Transfer Protocol). The Query API functions allow the application to query the FaxSav
database to obtain the status of faxes sent to the system using the FaxSend API calls.
Moreover, the Query API functions are also used to gather information on individuals or
departments that have made fax transmissions for accounting and billing operations. The
FaxSend and Query APIs work independently of each other and could be used to build
separate applications - one to transmit faxes, and another to query their status. However,
in order for the Query API functions to locate information on the transmitted faxes in the
FaxSav database, they must be furnished with a USERCODE value used in the FaxSend API
ServerLink API came with 3 separate sample applications together with their sample
codes in Visual C++. These were an application demonstrating a common GUI to send faxes,
an application demonstrating a daemon or service to handle fax transmissions, and an
application using Query APIs to obtain information on the status of fax jobs sent to the
FaxSend API Operation
When a user is ready to transmit a fax, for instance, using FaxLauncher, they fill out
fields in a dialog box indicating information such as the name and the fax number of the
recipient, the subject of the fax, and perhaps a cover page note, and then click on a
button to start the transmission process. Using the common GUI sample application as our
guide, we built our own simple application using Visual C++ to transmit faxes. Our
application entailed a simple dialog box with subject, text, and fax number fields. A
check box would allow the user to choose between sending the text directly from the dialog
box or sending a file attachment instead. We started by using the application wizard to
generate a dialog-based MFC (Microsoft Foundation Class) application, which created the
appropriate classes in our new project. We added the appropriate fields to the dialog box
and followed it up with adding the fax-specific code to the dialog class.
A fax transmission starts out by preparing the fax job. The fax job preparation
involves a few steps, some of which include calling functions to:
- Create a fax job.
- Specify the Transmitting Subscriber ID (TSI).
- Specify the account and password.
- Specify the subject.
- Collect and add destination fax numbers to the program.
- Add the document to be faxed and specify its type (e.g., ASCII, PDF).
- Set the delivery notice type (e.g., e-mail notification).
- Set the fax resolution mode (e.g., normal, fine).
- Set the cover page.
Finally the program can call the appropriate function to start the transmission process
to the FaxSav network. FaxSend API supports 3 methods to fax documents through the FaxSav
Asynchronous Callback Transfer - This method is typically used by applications
that need to transfer faxes and provide user interface response to the user. The
associated functions transfer multiple faxes within a short period of time and quickly
return. As progress is achieved on the fax transfer, callback messages are sent to the
application window allowing for an application to provide feedback to the user as the fax
is transferred. Therefore, the calling application must continue to execute a Windows
message loop to catch all callback messages.
Synchronous Modal Transfer - This method is used for applications that can
afford to enter a modal function that will not return until the fax is transferred. This
means that the application would remain tied up until the fax transmission is completed.
However, applications that can dedicate a thread for fax transfer can continue with normal
operation since only the particular thread would be tied up during fax transmission. The
tradeoff for the loss of application responsiveness is the ease of implementation since no
message loops or callback handling is required.
Manual Selected Transfer - This method is a cross between the synchronous and
asynchronous transfers. There are no message loops involved, but the application must
periodically make API calls to allow continued processing of the fax transfer until the
transmission process is finished. Server applications that are not willing to tie up a
thread while a fax is transferring and cannot execute Windows message loop will use these
functions by first calling the Send function and then periodically calling the Process
function until the transfer is complete.
In keeping with creating a simple application, we used the synchronous method for
transmitting faxes to the FaxSav network. We followed that up with a simple error-checking
function for transmission error notification and finally called another function to
release all allocated memory associated with the fax job. After building the program
(which generated the executable application) we were able to successfully run the
application, sending faxes that included text from the edit box or attached files
depending on our selection. Every time we started a fax transmission, the synchronous
application (as expected) became unavailable, returning with a notification dialog box
when the send job was completed. The speed of transmission to the destination fax machine
in our labs was very good and we were notified by e-mail after each fax job completion.
QUERY API OPERATION
The Query API functions provide a program with the capability to request information about
particular faxes sent to the FaxSav network using the FaxSend API. The USERCODE value used
in the fax transmission by the FaxSend API functions is utilized as the database key (for
unique identification) to access the "sent faxes" records. In order to use the
Query API, the FaxSav account must be provisioned to allow Query Access.
The general pattern for using the Query API is the following:
- Create a Query Connection object.
- Send faxes using the FaxSend API employing unique USERCODEs to allow fax identification.
- Create a QUERY object.
- Set up the query with the USERCODE values.
- Send the query to the FaxSav network.
- Process the query response to retrieve specific key values from the returned Query item
- Release the resources associated with the QUERY object.
- Close the associated database logon.
- Release the Query API resources.
We used the included query sample program to see the Query API functions in action.
From the dialog box, we specified our account, password, and the USERCODE that we used for
fax transmission using our simple application. After sending a couple of faxes, we issued
the query command, and sure enough, we received information on the transmissions including
status, destination number, and receive time, among others. We were very impressed with
the Query API capabilities - this could be an invaluable tool in managing, tracking, and
accounting for fax transmissions.
One of the shortcomings of ServerLink API is its limited support for document formats.
In its current standing, the desired documents must be converted to one of the supported
formats before they can be used as attachments in the program developed using ServerLink
API. When we mentioned this to FaxSav, they said that work is already under way to allow
full control of the printer driver currently shipped with FaxLauncher. The new product,
named Control Center, will allow full access to the document rendering functions by
exposing them through DDE and OLE allowing for the development of an end-to-end Internet
desktop fax transmission program with capability to support any attached document. One
other improvement for ServerLink API would be to provide additional native support for DCX
format, which is an industry standard for fax documents.
If you require a customized fax transmission application from the desktop, we think that
ServerLink API by FaxSav will fit the bill. Using FaxSav gateways and the Internet as the
transmission medium, ServerLink API can be used to quickly craft a fax application using
several development platforms in Windows 95 or NT. These fax applications can range from
simple to sophisticated using several approaches to prepare and transmit faxes over the
FaxSav network. ServerLink API also allows the developer to query the faxes for management
and accounting purposes. One of the important advantages of using the FaxSav network is
reduced cost - in terms of equipment as well as transmission.
We found ServerLink API to be a powerful, flexible, and practical tool for developing
customized desktop fax applications. As far as room for improvement, we would like to see
an ActiveX version of ServerLink to allow for easier application development using
platforms such as Visual Basic, and support for DCX format. As a final note we want to
mention that if your company has WAN (Intranet) connections between different locations,
it may be worth your while to look into fax gateways which, while entailing associated
equipment costs, will provide you with free faxing between locations.