Date: 12/16/1998

Name of group: Phonedation

Team members: Zhongwei Li and Xiangjiang Ma

Task: Multiparty audio conferencing + whiteboard

 

1. What did we set out to do?

 

We are working in a multiparty audio conferencing plus whiteboard project in Phonedation, a start-up company that develops Internet Telephony products. Following picture shows what Internet Telephony looks like.

 

 

Our task is to design and implement an audio conference application to allow participants to join and leave conferences. The conference control scheme will allow a speaker to cede control to one of a set of waiting speakers. The scheme will also allow users who may not be accessible on the Internet to have an audio-only connection to a conference. In addition, a shared whiteboard, which allows participants to share a graphic workspace, will be created.

Following picture shows what whiteboard looks like. Computer users in the same conference group can share text and graphical information on the whiteboard in addition to voice conversation.

Following is the highlight of the basic feature:

2. What did we actually accomplish?

We have achieved all the goals we set out to do and added more on whiteboard application. We made a schedule at the beginning of this project and we made sure that everything is on schedule throughout this project. Our design is based on open structure, so that future expansion of this project is straightforward. The user interface we designed is comprehensive and all of the functionality has been implemented successfully (for which we responsible). In addition, we have successfully built JAVA RMI server for each conference for whiteboard application. Following is a screen shot of the user interface that we designed and implemented in JAVA.

 

Above user interface is pop up after the user has successfully input his/her username and password, which are stored in a database built by directory service team. Both the menu and the buttons can be used.

User can create new conference by clicking the "Create New Conference" button. A dialog box will pop out, and a new conference will be created after proper information is filled in. If the "Use Password?" checkbox is chosen, the conference will be private. In such a case,

the conference creator will set the password and only those who know the password can join the conference.

 

Users can also choose to join an existing conference by clicking "Choose Conference" button. All existing conference names will be shown on the left panel and the user can pick any conference of interest to join. When the existing conference group is clicked, the user names in that group will be displayed on the right panel. Following is a screen shot.

 

 

Anyone who wants to join the conference has to be registered. This can be accomplished by choosing "add new user" item from User menu. A dialog box will pop up and the filled information will be sent to the database maintained by the Directory Service.

The whiteboard can be invoked from App menu. The RMI white server is created at the time when new conference is created. Basically, we build a white board server for each conference group through RMI so that different group cannot share a whiteboard. Only users in the same conference group can communicate and share the information on the whiteboard.

We added this part as a bonus. Since it seems not required for us to do anything more on whiteboard application except simply running it. Though the recommended whiteboard application may satisfy our demo purpose, we decided to do some extra work and tried to make our project more impressive by introducing a new whiteboard written in JAVA and modified it to suit our application. The new whiteboard was downloaded from CMU, and we added a RMI server thread and client thread to each conference group so that different conference group will have separate whiteboard channel. Our efforts will help us get around limitation of local computer domain and build a portable application for Phonedation.

Another bonus work we have done is to help telephone user to join the conference. We built a phoneuser RMI server which implements the remote interface to signaling at the time when telphone users dial in (join the conference) or hang up (leave the conference).

Most conference control has been implemented successfully. We have fulfilled all the tasks for which we are responsible. Since our application is written in Java, we use RMI to communicate with our peer teams. In addition, thread is used throughout our program. When our application starts, all initial threads such as whiteboard server/client, phoneuser server, message receiver will be invoked automatically. Flow control is basically provided by team 1 (data). In our application, we added a speaker button trying to avoid congestion.

Following shows a list of the whole conference control mechanism. Highlighted items are related to our job.

Create new conference:

    1. Create conference with group id, name, property (private/public)
    2. Send info to directory service, return multicast address
    3. Let signaling tell Billing + Directory Service (DS)
    4. Establish UDP connection with group multicast address, return a connection id

Join conference from computer side:

    1. Get the list of conference groups from DS
    2. User picks an existing conference to join
    3. if private, user gives password
    4. Get information for that conference from DS, including
    5. Multicast IP, password if applicable, and group member list

    6. Let Signaling tell Billing
    7. EstablishConn(multicast add.), return a connection id

Leave conference from computer side:

    1. If the current client is the conference creator, then tells signaling to call destroy(conference name), else tells signaling to leave (conference name)
    2. Signaling telling Billing, DS; tell gateway to tear down phone links
    3. If the creator quits, send message("Destroy") to multicast address, else, send message("Quit")
    4. Destroy Connection

Join conference from phone side:

1. User enters login userid/passwd, signaling verify them with DS

    1. User picks "2" to join conference
    2. Input conference id (suppose caller know it before calling)
    3. Signaling checks conference id with DS, if private, verify the password entered by the caller. Signaling tells gateway to play RM5.
    4. Signaling inform gateway to setup connection
    5. Gateway: EstablishConn, return connection id
    6. Signaling tells the conference application
    7. Application: recvMsg(parameters), if the participant is the first phone call user, then EstablishConn(parameters) to gateway at an available port.
    8. Signaling tells billing + DS

Hang up from phone side:

1. User calls hangup() which is an interface provided by Signaling

    1. Signaling tells Gateway
    2. Gateway: disconnect the phone link sending (c, "Quit")
    3. Signaling tells Billing + DS
    4. Signaling tells conference application

6. Application: RecvMsg() --- Signaling handle

If there is no phone user in current conference, then destroy the connection to gateway.

 

 

Following is the class hierarchy of our source code.

class java.lang.Object

Following is the interface hierarchy of our source code.

 

 

 

 

 

3. Problems:

We have run into a large number of problems since we took this project. Looking back on this painful process, we feel relieved that all those unexpected problems were solved and we have made progresses throughout this project. Following are some main problems we encountered.

 

 

  1. What we learnt:

We have learnt a lot through out this project. Though it is a painful process, we feel that it will benefit for our future career.

 

5. What would we do differently next time:

 

Next time when we undertake a large collaborative project like this, we will try to approach the problem differently and avoid the same mistakes we made this time.

 

  1. Interface that our team provided to other teams or used:
  2.  

    Interfaces that we used from team1 (data), team2 (signal), and team4 (directory) have been specified. We also provided a JAVA RMI interface to team2. Details can be found in the source codes, which is placed on babbage in the directory /amd/babbage/a/cs519pdt/t8/. This report in Word format and HTML format can be found on babbage in the directory /amd/babbage/a/cs519pdt/reprot/. Following is the exact procedure calls that we used and provided:

    From Team1 (data):

    native long EstablishConnection(String dest_name, short dest_port,

    long sample_size, long input_type,

    String input_file, long output_type,

    String output_file, short loop_file,

    long primary_enc, long secondary_enc,

    String err);

    native long DestroyConnection(long c);

    native long ModifyConnection(long c, long size, long input_type,

    String input_file, long output_type,

    String output_file, short loop_file,

    long primary_enc, long secondary_enc);

    // lc is the long EstablishConnection returned

    native long SendMessage(long lc, String buf, long buf_size);

    // msec is how long to wait for a message, in milliseconds

    // 0 means (try to) wait forever (system calls will interrupt)

    native String RecvMessage(long lc, long buf_size, long msec);

     

    From Team2 (signal):

    public interface DesktopSignalInterface extends Remote

    {

    // create a conference

    public boolean Construction(String groupname, String ipaddress, int portnum) throws RemoteException;

    // join the conference

    public boolean Connection(String groupname, String ipaddress, int portnum) throws RemoteException;

    // conference creator invite telephone user

    public boolean Dial(String calledtelephone, String ipaddress, int portnum) throws RemoteException;

    // quit the conference

    public void Hangup(String ipaddress, int portnum, boolean isCreator) throws RemoteException;

    }

    To Team2 (signal):

    public interface PhoneSignalInterface extends Remote

    {

    public void DialIn(String phoneNumber, String callerName) throws RemoteException;

    public void Hangup(String phoneNumber, String callerName) throws RemoteException;

    }

    From Team4 (directory):

    native void CreateNewConference(String cname, String userid,

    int priority, String pword);

    native void DeleteConference(String cname, String userid, String pword);

    // Return the multicast IP address

    native String GetMulticastAddr(String cname);

    // Return 1 for public, 0 for private

    native int GetConfPublic(String cname);

    // Return password for the conference

    native String GetConfPword(String cname);

    // Return all userids in the conference

    native String GetMemberList(String cname);

    // Return the number of members in the conference

    native int GetNumMembers(String cname);

    native void AddUser(String userid, String cname, String cpword);

    native void DeleteUser(String userid, String cname);

    // Verify that password matches user, Return 0 for fail, 1 for success

    native int Verify(String userid, String pword);

     

  3. Advice for the course staff:
  4.  

    It would be better if all hardware for this project is ready at the beginning of this project. In addition, more computers and more telephones are needed for this project since we are dealing with multiparty conference. It would be excited in Demo if we could show all of functionality we have implemented.

     

  5. References:

 

"An Engineering Approach to Computer Network" by S. Keshav

Record of meeting with Professor Keshav on 9/25/1998

Record of several meetings within Phonedation in November 1998.

Record of several meetings within Phonedation in December 1998.

http://www.sun.com/java/index.html

http://www.cs.cornell.edu/cs519/project/description.html

http://www.cs.cornell.edu/cs519/project/overview.pdf

http://simon.cs.cornell.edu/home/bba/javagroups.html

http://oac3.hsc.uth.tmc.edu/staff/snewton/tcp-tutorial/

http://www.ietf.org/internet-drafts/draft-ietf-mmusic-mbus-transport-00.txt

http://www-in.npu.edu/introjava/week12/udp.html

http://www.ietf.org/1id-abstracts.html

http://www.ietf.org/internet-drafts/draft-ietf-mmusic-sip-09.ps

 

 

Acknowledgements

 

We would like to express our appreciation to Prof. Keshav for introducing this interesting project. We would also like to thank our peer teams in Phonedation for co-operation.

The whiteboard application was written by Robert Kraut and William Schelis (scherlis@cs.cmu.edu), CMU, and it is available publicly. This code was modified to suit our application. The big picture on the first page of this documentation is downloaded from http://www.cs.cornell.edu/cs519/project.