CS 790 MEng Project Report

Jingyang Xu

5/28/99

 

Design, Implementation and Usage of a Java-based Internet Telephony System

Abstract

For the Spring 1999 semester, I help the design and implementation of a Java-based Internet Telephony API, code named ITX, which enables anyone interested in creating Internet Telephony applications as well as ITX extension to do it easily and quickly. For the ITX project, I had several duties:

Results

As of May 28, 1999, I have accomplished the following:

Most of these can be found at http://www.cs.cornell.edu/cnrg/telephony.

The ITX API

The ITX API was designed by myself and the other members of the ITX team. It is a Java-based, component-centric Internet Telephony system made up of the following components:

Data – The Data component provided the most basic means of data acquisition, transportation and presentation for the ITX system. It provides ‘devices’, which interact with the Microphone for data acquisition, which uses the network for data transfer, and which controls the PC speakers for data presentation. Using object-oriented programming techniques, it provides an API that’s versatile and powerful, yet intuitive and easy to use and extend.

Signaling – Signaling plays a vital role in the ITX network. Acting as the control layer, it hides a lot of complexity of the network from any ITX application. It deals directly with the directory and other peer signaling components to provide seamless integration between different applications. It is able to handle multiple connections while allowing outgoing calls as well as incoming call notification. The signaling components are distributed and can discover each other through the Directory Service.

Directory Service – The Directory is a computerized "phone book". Like the phone book, it contains information about all the users in the ITX network so that they can be reached from anywhere in the telephony network, including the PSTN and the ITX network. It also contains information about ITX applications, such as the Gateway, so that applications and users can find each other.

Gateway – The Gateway is actually a specialized ITX application. It uses the other components: Data, Signaling and Directory Service, and run and controls the computer with the telephony hardware (i.e. the Dialogic card). It is the vital connection between the telephone network and the Internet. The Gateway allows a person to call a desktop ITX application from a telephone and vice versa.

CUPS

CUPS is a ITX application that demonstrates the capabilities of the ITX API. It was also used to do a lot of the testing for the ITX API as it was being designed and implemented. CUPS is a WFC (Windows Foundation Classes) application that is written purely in Java and its Microsoft extensions in Visual J++.

The following is a screen shot of the CUPS user interface:

CUPS utilizes the components of the ITX API in the following fashion:

Data

The CUPS application uses the devices MicrophoneSource, SpeakerDestination, NetworkSource, NetworkDestination, StreamSource and StreamDestination. CUPS application also contains something called a cupsStreamSource, which was an attempt to use the Microsoft Speech API for synthesized speech. CUPS uses data connections returned to it by Signaling or it will create its own customized connections as the need rises.

Signaling

The Signaling component is the most used component by CUPS. CUPS uses Signaling to register the user when he or she logs on to CUPS. It also uses Signaling to make out going calls as well as receive incoming calls from other ITX applications, including the Gateway and other CUPS applications. During a call, CUPS can use Signaling to send and receive DTMF tones to the other end of the connection. When the call ends, CUPS uses Signaling interfaces to hangup the call and receive hangup notification from the other end of the connection

Directory Service

Signaling uses and hides a lot of the Directory Service calls away from CUPS as well as any of the ITX applications. It takes care of things like Directory Service registration, as well as searches through the ITX Directory Service. However, since when an user with administrative privileges logs onto CUPS, CUPS will extend its administrative capabilities, CUPS also calls some Directory Functions directly. CUPS receives a dump of the directory service which contains all the users and displays it to the user. For the administrator, CUPS allows the addition and removal of users from the directory service.

Gateway

Since the Gateway is a specialized ITX application. CUPS doesn’t call its interfaces directly. However, if a call is made to a phone number, signaling will contact the Gateway server/application for CUPS and set up a connection. Additionally, if a incoming call is received on the Gateway meant for an user running CUPS, the call can be connected to CUPS just like another CUPS applications can call and be connect to CUPS.

CUPS is a WFC application, which mean it runs under Windows and looks and feels just like any other Windows application. It uses some of the graphical and non-graphical controls that WFC exposes. These include:

Additionally, one nice feature exposed throughout CUPS is AutoComplete. CUPS remembers users who have been logged on as well as phone numbers and users who have been called so that the second time the users log on or is called, the text entry will be complete before the person at the keyboard finishes typing the whole name. AutoComplete was accomplished by a trie data structure that I wrote in Java that enables the programmer to insert strings into it. Subsequently, the programmer can then ask for ends of string in the trie dictionary by giving it the first couple of letters.

CUPS can be found in the CuTel installation through the link above.