This project is about integrating BASS - the desktop sharing application - into Sipc agent.
SIPc is a SIP user agent that can be used for Internet telephony calls. It supports a range of media types, such as audio, video, text, white board, desktop sharing, and can be extended easily to additional media types. [1]
BASS Application Sharing System is efficient, reliable, independent of the operating system, scales well via heterogenous multicast, supports all applications, and features true application sharing. [2]
SIPc does not provide application sharing functionality itself; rather, it uses external media application for handling media streams. In earlier work, SIPc was using VNC - the famous remote control software - to implement the application sharing function.
Now we use BASS, which is more efficient and reliable, instead of VNC. Since the commands of BASS are quite different from the ones of VNC, we need to make some changes through the code of SIPc. Besides, BASS has some new functions that VNC has not: BASS can share the video and the desktop applications at the same time, which would require the client side to invoke two client processes. To meet this requirement, we also need to make some changes on the SIP messages.
Following is the list of this report:
Background: Brief introduction of SIPc, VNC and BASS
Related Work: Introduction of the software that SIPc used to implement the application sharing function, and the differences between the current version and the previous version.
Architecture: Brief overview of the architecture of SIPc, and the introduction of modules which is related to application sharing.
Program Documentation: Links of Program Documentation.
Task List: Information of the task.
SIPc is a SIP user agent that can be used for Internet telephony calls. It supports a range of media types, such as audio, video, text, white board, desktop sharing, and can be extended easily to additional media types.
However, SIPc does not provide audio, video and desktop sharing functionality itself; rather, it uses external media application for handling media streams. [3]
In previous version, SIPc use VNC to implement the desktop sharing function. Here we use BASS, a more efficient and reliable program to implement the desktop sharing.
BASS Application Sharing System is efficient, reliable, independent of the operating system, scales well via heterogenous multicast, supports all applications, and features true application sharing. Currently, BASS has a Java client and Windows XP server. [2]
In earlier work, SIPc was using VNC - the famous remote control software - to implement the application sharing function. Now we use BASS, which is more efficient and reliable, instead of VNC.
Since the commands of BASS are quite different from the ones of VNC, we need to make some changes through the code of SIPc. Besides, BASS has a new function that VNC has not. BASS can share the video and the desktop applications at the same time, which would require the client side to invoke two client processes. To meet this requirement, we also need to make some changes on the SIP messages.
Here are some differences between VNC and BASS:
Commands:
To invoke the server application in Windows System:
VNC:
set the VNC password (in SIPc, this is
implemented by changing the values of Windows registry);
winvnc
-connect <ip_address>:<port>
BASS:
java -cp {.;bass/libraries/jheora-patch.jar;bass/libraries/jogg-0.0.7.jar;bass/libraries/theora-java.jar;}
-Xms32M -Xmx128M bass.AppShareServerManager
To invoke the client application in Windows System:
VNC:
vncviewer -listen <port>
BASS:
java -cp {.;bass/BassClient.jar;}
bass.AppShareClient -e <ip_address>/<port>
In VNC, the client must be run before the server is run; while in BASS, the server must be run before the client, or else the client would lost connection. They have different order. In the previous SIPc version, VNC client would be run before the connection is set up. In the latest version, the BASS client would be run after the connection is set up, to ensure that the BASS server is already run.
SIP messages:
Since BASS introduces a new function of sharing the video and the desktop applications at the same time, which would require the client side to invoke two client processes, the SIP messages would be changed to meet this requirement.
SIP messages use "media-descriptions field" ("m=" line) and "attribute-field" ("a=" line) of SDP to describe the multi-media applications.
In previous version which is using VNC, VNC is described as:
Server:
m=application 6000 TCP rfb
a=fmtp:rfb vncserver
Client:
m=application 6000 TCP rfb
a=fmtp:rfb vncviewer
In the version using BASS, BASS is described as:
Server:
m=application 6006 TCP rfbs
a=fmtp:rfbs bassserver
m=application 6000 TCP rfb
a=fmtp:rfb bassserver
Client:
m=application 6006 TCP rfbs
a=fmtp:rfbs bassviewer
m=application 6000 TCP rfb
a=fmtp:rfb bassviewer
Here is the function set in SIPc which is described in the paper "SIPC, a multi-function SIP user agent". [4]
To meet the requirements of BASS, I have changed the code of "SIP Multimedia call control" part, which is related to the controlling of desktop sharing application.
Following graph would describe the architecture of the modules which are related to "SIP Multimedia call control".
Controller: Controller is the central part of the system. It connects the GUI service and the stack. It handles events from GUI, like making a call, hanging up, etc.; handles events when received a message, like parsing the message and encoding a response message; and communicates with service, like preprocessing the applications which user had chose. The Controller is implemented by 18 source files, which are named begin with "controller".
The source files which are related to the "SIP Multimedia call control" in this part are:
controller.tcl: Handle events from GUI and communicates with service.
controller_invite.tcl: Handle invite request and response to the received messages.
controller_cancle.tcl: Handle cancel request and responses to it.
GUI: GUI (Graphical User Interface) provides the interface to interact with the user. GUI is implemented by 33 source files, which are named begin with "gui" and "addressbook".
The source files which are related to the "SIP Multimedia call control" in this part are:
gui.tcl: Initialize the main GUI (Graphical User Interface).
gui_call.tcl: Handle the user activities which are made on GUI, like choosing the media applications, clicking on the button, etc.
addressbook_callarrive.tcl: Pop up invite window when an incoming call arrived, handles the user events and process the corresponding functions.
The main functions which would be call when handling the "SIP Multimedia call control":
application.tcl: Invoke the application which is to be run, and kill the application which is to be closed.
sdp.tcl: Handle SDP of SIP messages parsing when the SDP message is received, and also encode the SDP of response SIP messages when necessary.
Configuration files which are related to the "SIP Multimedia call control":
mimecap: The mapping between media type and media application.
mime.tcl: Load or save the information of external media applications from mimecap.
media.conf: Media configuration file, stores the port and codec information for each media type.
media.tcl: Handle media application and media transmission based on the information in media.conf.
Changed and Added Source Files: All the changed code is commented with my name "Qijun" and the original code. To find out the changed code, please search the files using the keyword "Qijun".
Following are the source files that had to be changed:
3pcc.tcl
addressbook_callarrive.tcl
app.conf
application.tcl
controller.tcl
controller_cancel.tcl
controller_invite.tcl
gui.tcl
gui_call.tcl
images.wrap
main.tcl
media.conf
mimecap
sdp.tcl
sipc.wrap
Following are the source files that were added:
sipcmd.tcl
/image/recv_location.gif
/image/tkbt.gif
/tkcon/pkgIndex.tcl
/tkcon/tkcon.tcl (this file is an open source plugin which is downloaded from
website of sourceforge.net [5])
All the changed and added files are available here. All the changed code has comment with my name "Qijun" and the original code. To find out the changed code, please search using the keyword "Qijun".