Date: December 16, 1998

Name of group: Phonedation

Team Member: Jonathan Chern, James He

Task: TEAM 7, Voice-Email gateway

What did you set out to do?

Courtesy of Professor Keshav’s web site, this is the basic layout of our final project in CS519. Our telephony company, Phonedation, intended to merge the computer data network and existing analog telephone system into one flexible network provides multi-functionality. My partner and I received the task of building an email-voice application system. The goal behind it is to enable mobile users to check their email from everywhere so long there’s a phone they can use to dial into our PBX. Also vice versa, providing alternatives to voice mail system by sending recorded system as email attachment to any user who has an email account. The integration of the voice recording and email system is a powerful concept and has been pioneered by giant BELL companies and new tech startups. The benefit of such system lays not only in its convenience to the end user, but also present an great savings to the corporate world. Traditionally the PBX and phone system hiding in corporate company’s wiring closet has been proprietary technologies dominated by few industry monopolies. Sieman ROLMS, AT&T, and NORTEL comes to mind when dealing with these boxes. Very often the voice mail system in these phone system are stored in computer style hard disks. This might lead one to think that cost of these things should be inexpensive because the speed of innovation in computer storage technology. On the contrary, these 500-minutes storage space (they are often referred by storage time limits) is just a 2GB of hard drives in many cases, yet the manufacturers charges them ten-twenty times the price of an off-the shelf product. Hence, developing an computer integrate phone system would greatly reduce the telecom department in any corporation. Additional benefits would be the reduced cost of wiring, since our phone system is able to take advantage of the shared network media. And moving to computer platform means lots of flexibility, open standards, and away from awkward and often expensive proprietary system. The illustration above is a scaled downed version of what we envisioned as future of telecommunication system. Many previously separated devices will be able to merge and form a smart collective network. For our system, it has the following special features over traditional standalone phone/computer network:

Message from + <FROM HEADER> + is received at + <TIME STAMP> + with + <SUBJECT LINE> + and following + <BODY MESSAGE> text.

What did you actually accomplish?

I was able to peek into how POP3 and SMTP protocol works. These simple yet functional protocols are really the driving force behind Internet revolution. I was able to gain thorough understanding of the mail routing domain and MX records system. Additional to that, I learned how one can easily fake the mail messages and unless otherwise protected, most Internet systems are fairly vulnerable to malicious attacks. MIME file encoding and Uuencode is another technology I picked up along the way. Multi-part MIME format is an creative way of distributing Binary files in the form of base64 text message. Additional to the understanding of mail system, I was introduced to TTS system/software also. Voice recognition and related products are another hot areas in the computer science.

As for specific accomplishment in the project, I was able to utilize the SDK provided by Eloquent text-to-speech software to customize and optimize the mail reading system. The biggest challenge I faced has to do with parsing and editing of text strings in the mail message. I believe I made a mistake in choosing C/C++ instead of Java to accomplish the project. There are quite of few JAVA software/shareware available on the market to simplify task of message parsing. Even though it’s a lot of work, I was able to extract major fields of the message text, which includes SUBJECT, FROM, MESSAGE text, and TIME STAMPS. The text synthesizing part is rather straightforward. The SDK provided clear documentation to the capability and functionality of the software package. I was able to use their API to translate string texts into PC .wav files.

The most challenging tasks, however, is to get coordinated with Signaling and underlying designing team and performing the final integration. Many teams were not able to fully integrate the system as each integration often introduce and exploit new problems in the code. I build up my project by modular approach. I first worked on the audio synthesizing and learned how to produce wave files matching the specification laid out by data exchange and signaling team. Second step is working on POP clients and learned ways to parse all necessary information. This is rather time consuming and I did not succeed to my own desire. The integration part with other team is fairly successful. Clear interface documentation allowed me to implement calls to other parts of the system. One surprise to me is that all modules worked well separately and tested out fine when they are standalone, as soon as I put the codes together they begin to falter apart.

However, I did not get the voice to work over the telephone-computer, or the final integration. Lack of integration time is the cause for this result. The voice menu structure is implemented in my code, however, only the very first voice menu could be played. At the end of playing wave file, I received ring buffer full message from the data exchange code.

Problems:

Unfortunately, my partner and I drifted apart and were not able to work out the differences. We divided the applications into two distinct sections and begin working separately around Thanksgiving holidays. I tried to resolve the issue by communicating with the management team and directly with the partner. The management team was well aware of the problem early on. It is rather sad we did not have professional working relations at end. Hence, we have to write this report separately and double the workload. Beside this, I had great time working and collaborating with other team members. We were able to help each other regarding interfacing and final integration. Regarding the technical difficulties of the coding, I tried resources such as web, friends and good ‘ol books. Let’s of semantics and C commands really gave me a headache. I was able to play with the JAVA interface late in the development stages with a classmate. At end, we both agree JAVA is much nicer for the project and have more flexiblities. The distributed RMI (which is similar to the DCOM/COM programming promoted by Microsoft), provided a powerful programming tools for today’s network world.

What you learnt:

This project is extremely educational. It is better than most of the project course I have taken here in Cornell. Besides the technical aspect of the project, I had learned even more important lessons regarding team communication and interpersonal skills. However, it’ is rather unfortunate that I wasn’t able to patch up the professional working relationship with my partner, that is why I am writing this final report alone. But I tried to bridge the gap between us and communicate either directly or through management team. At the end of several meetings with James and management team, we mutually agreed to separate the team project into two distinct parts, and we will demo and file final report independently. Overall, I had excellent relationship with other group members, I was able to help out Chong-A from Fax team regarding email usage. Talking with Stock quote team helped me understand how the JAVA side of coding would work in our environment (I had the luxury of coding my part entirely in C/C++, partially due to Eloquence SDK and interface from Signaling and Directory Service team were all done in C/C++). The long three-hour group meeting sessions during Thanksgiving break is extremely helpful. It helped me to synchronize my application interface calls and procedures with the lower layer team. Without further delay, I will list out everything I learnt during this project development.

Technical Knowledge:

Collaboration Skill:

* Constant communication with team members and leader, keep everyone well informed of current progress.

Others:

What would you do differently next time:

Again, I will divide this section to two parts, one focus on the technical side and the other about team working issues.

Technical Mistakes:

Collaboration Mistakes:

Interface that your team will provide to other teams or use:

My application did not provide any interface for other teams because it is an end application. However, to make my application to work , I had to make/utilize numerous service/interface calls from signaling (Team 2), gateway (Team 3), directory service (Team 4), and data exchange (Team 5). Below is a list of Interface/function calls I used:

From Data Exchange (Team 1):

typedef struct _ConnectionParameters {

Destination dest; /* the IP address of the destination */

int size; /* desired primary sample size */

Input input; /* source for sounds to send out to dest */

Output output; /* where to play out received sound packets */

int primary_encoding;

int secondary_encoding;

int fec_delta;

int send_silence;

} * ConnectionParameters;

typedef struct _Connection * Connection;

Connection EstablishConnection(ConnectionParameters p, char **error);

int DestroyConnection(Connection c);

int ModifyConnection(Connection c);

int UDP_SendMessage(Connection c, char *buf, int buf_size);

long UDP_RecvMessage(Connection c, char*buf, long buf_size, long msec, long *sender_ip_addr);

From Signaling (Team 2):

Bool Hangup();

Bool StartRecording();

Bool EndRecording();

From Gateway (Team 3):

From Directory Service (Team 4):

Char * ulnlookup(int UserID);

Char * ufnlookup(int UserID);

Char * emulookup(int UserID);

Char* GetUserFirstName(int UserID);

Advice for the course staff:

It is rather unfortunate that we did not receive the hardware until very late into the semester (after second report is due). Although we still got close to a month of working time, it would be nice if we can start this even earlier. In turns of support, I think Cristian has done an excellent job in answering email and questions. I found the whole project extremely educational and well worth the time and efforts I put into it.

References:

I have utilized the resources on the web quite extensible. Many software I used in the project are just released version and hence company web sites provided the best learning ground. Below are some of the links I frequently visited during the project.

General Networking and Socket information:

http://users.neca.com/vmis/ Excellent web site!!

Mail server information:

http://infor.internet.isi.edu:80/in-notes/rfc/files/rfc1939.txt

http://infor.internet.isi.edu:80/in-notes/rfc/files/rfc821.txt

Audio server information:

http://www.realaudio.com

http://service.real.com/help/library/servers.html

Voice-over-IP

http://www.data.com/roundups/internet_voice.html

http://www.pulver.com/gateway/

Text-to-Speech Synthesize (TTS)

http://www.eloq.com

http://robotweb.ri.cmu.edu/comp.speech/Section5/Q5.5.html

MIME Attachment Information

http://www.distinct.com/vit16/docs/vit16.mime.htm Excellent web site!!