SIP COMMUNICATOR - a JAIN-SIP Video Phone for the People!
Emil Ivov, Network Research Team (ULP Strasbourg)
1. What's in this package?
SIP COMMUNICATOR is a JAVA based SIP User Agent with audio/video capabilities built
on top of the JAIN-SIP-1.1
API and the Java Media
Framework. The phone is a pure JAIN-SIP application: it does not need any proprietary
nist-sip classes in addition to those defined in JAIN-SIP 1.1, you can substitute
the NIST-SIP stack by another JAIN-SIP compliant stack and plug the phone on top
of it. This application was successfully tested against Microsoft Messenger, Ubiquity's
Helmsman User Agent, and NIST's SIP proxy, and registrar server. So far, SipCommunicator
has been tested to run under Windows XP and RedHat 8.0 Kernel-2.5.65. Note that
there is an RTP problem with 2.4.x linux kernels and sessions are often dropped.
2. How to build SIP COMMUNICATOR
You need to have Apache Ant (http://ant.apache.org/)
installed and in your path. Use ant clean and ant make to respectively
clean old class files and build the project. Note that you should manually set
the jmf property in the build.xml file.
3. Configuration
You could run SipCommunicator without any configuration as it assigns default values to
all mandatory properties. To change any of these you could either use the configuration
frame (on the menu bar, Call->Configure) or manually modify the SipCommunicator.properties
file. The latter could be either in the nist-sip-1.2/src/net/java/sip/communicator directory
or in $HOME/.sip-communicator. SipCommunicator uses the following properties:
- SipCommunicator's custom properties:
- net.java.sip.communicator.sip.PUBLIC_ADDRESS:
Your sip url (e.g. sip:emil_ivov@yahoo.com, or sip:toto@130.79.90.142).
Default is user.name@<local IP address>
- net.java.sip.communicator.sip.DISPLAY_NAME:
The display name that SipCommunicator should use when establishing calls
(e.g. Emil Ivov). Default is null.
- net.java.sip.communicator.sip.TRANSPORT:
The transport layer protocol (tcp or udp) that should be used to
carry sip messages. Default is udp
- net.java.sip.communicator.sip.PREFERRED_LOCAL_PORT:
The port that SipCommunicator should bind to and use for SIP message exchange.
If this port is not available SipCommunicator will try random ports until success. Please
note that this port is only used for SIP communication. Default is 5060
- net.java.sip.communicator.sip.REGISTRAR_ADDRESS:
The IP address or domain name of the registrar server that you want
to register with. Default is null
- net.java.sip.communicator.sip.REGISTRAR_PORT:
The registrar server port.
- net.java.sip.communicator.sip.REGISTRAR_TRANSPORT:
The transport layer protovol (tcp or udp) that should be used to
communicate with the registrar server. Default is udp.
- net.java.sip.communicator.sip.REGISTRATIONS_EXPIRATION:
For how long (in seconds) do you want you registrations to be valid.
Default is 3600
- net.java.sip.communicator.sip.STACK_PATH:
The fully qualified path to the package that contains the JAIN-SIP
implementation. If you want to use the phone with another stack, that's where
you should plug it. Default is gov.nist
- net.java.sip.communicator.media.MEDIA_SOURCE:
This property is very useful if you don't have a camera or no capture
devices at all but would like to transmit audio and/or video. You can enter
the URL of a media file (e.g. file://home/user/sipcommunicator/lostinspace.mov)
and it will be used to send audio and/or video streams to the remote party.
If you don't have a suitable movie file around, you could use
this one. Default is null (this means use capture devices).
- net.java.sip.communicator.media.VIDEO_PORT:
Specifies the port that SipCommunicator should use to receive video. Default
is 22222.
- net.java.sip.communicator.media.AUDIO_PORT:
Specifies the port that SipCommunicator should use to receive audio. Default
is 22224.
SipCommunicator's stack properties:
All properties specified by the JAIN-SIP api could
be set in the SipCommunicator.properties file and will be passed to the underlying stack.
- javax.sip.IP_ADDRESS:
Sets the IP Address of the SipStack to the property value i.e 11.1.111.111.
Default is InetAddress.getLocalHost().getHostAddress().
javax.sip.STACK_NAME:
Sets a user friendly name to identify the underlying stack implementation
to the property value i.e. NISTv1.1. The stack name property should contain
no spaces. Default is SipCommunicator
javax.sip.ROUTER_PATH:
Sets the fully qualified classpath to the application supplied
Router object that determines how to route messages before a dialog is established
i.e. com.sun.javax.sip.RouteImpl. An application defined router object must
implement the javax.sip.Router interface. Different routing policies may be
based on opertaion mode i.e. User Agent or Proxy. Default is net.java.sip.communicator\pCommRouter.
javax.sip.OUTBOUND_PROXY:
Sets the outbound proxy of the SIP Stack. This property maps to
the the outbound proxy parameter of the Router interface. The format of the
outbound proxy parameter should be "ipaddress:port/transport" i.e. 129.1.22.333:5060/UDP.
This property is optional
javax.sip.RETRANSMISSON_FILTER:The default retransmission behaviour
of this specification is dependent on the application core and is defined
as follows:
- User Agent Client: Retransmissions of ACK Requests are the responsibility
of the application. All other retansmissions are handled by the SipProvider.
- User Agent Server: Retransmissions of 2XX Responses are the responsibility
of the application. All other retansmissions are handled by the SipProvider.
- Stateful Proxy: As stateful proxies have no Invite transactions all
retransmissions are handled by the SipProvider.
- Stateless Proxy: As stateless proxies are not transactional all retransmissions
are the responsibility of the application and will not be handled the SipProvider.
This filter can be viewed as a helper function for User Agents that can
be set by an application to prevent the application from handling retransmission
of ACK Requests and 2xx Responses for INVITE transactions, i.e. the SipProvider
will handle the retransmissions. This utility is useful for hiding protocol
retransmission semantics from higher level programming environments. The acceptable
values are ON/OFF. This property is optional, therefore if not supplied the
default is OFF.
javax.sip.EXTENSION_METHODS:
This configuration value informs the underlying implementation
of supported extension methods that create new dialog's. This configuration
flag should only be used for dialog creating extension methods, other extension
methods that don't create dialogs can be used using the method parameter on
Request assuming the implementation understands the method. If more than one
method is supported in this property each extension should be seprated with
a colon for example "FOO:BAR". This property is optional
4. Running SIP COMMUNICATOR
- Using the build.xml:
You need to have Apache Ant (http://ant.apache.org/)
installed and in your path. Use ant run to run the SIP
COMMUNICATOR. Note
that you should manually set the jmf property
in the build.xml file.
- Running the binary downloads:
Once you download and unzip it all. You'll find a run.bat an a
run in the root directory. Use the run.bat script to start
the project on Windows and ./run for UNIX, Linux, Solaris and etc.
5. A brief description of SIP COMMUNICATOR's features
Currently SIP COMMUNICATOR is able to handle calls, participate in unicast audio/video
sessions, register itself with a registrar server, and display incoming MESSAGE
request. More features, (such as NOTIFY & SUBSCRIBE support) are planned for
the near future (i.e. next couple of months). If you would like to see any
particular features, currently non-implemented in SipCommunicator, we will be glad
to discuss that and eventually add them.
|
To call someone you need to enter their SIP
URL in the top left corner field of the SipCommunicator (the only editable field
actually :) ) and press Dial. Examples of correct addresses are:
sip:emil_ivov@yahoo.com
emil_ivov@yahoo.com
sip:emil_ivov@130.79.90.142:5060
In other words - valid SIP URLs according
rfc3261 with the only difference
that the scheme is not mandatory (a default sip: prefix is added by SipCommunicator)
If this is not the first time you are running the phone you might find
it handy to use the dial history (press the black arrow).
|
Use Answer and Hangup to respectively answer and end calls.
Your registration status as well as the address, port and transport you
are currently using is shown in the SipCommunicator's status bar.
SIP COMMUNICATOR works fine on both IPv6 and IPv4
The Menus
Well not much in here. Call->Configure let's you configure the application.
Note that you should restart the application for the changes to take effect.Call->Exit
exits (weird, isn't it). Tools->View Traces starts NIST's SIP TraceViewer.
Help->About, shows my name and the name of the place where I work :).
6. About
7. Acknowledgements
I would like to thank a lot Mudumbai Ranganathan, for agreeing to include
the SIP COMMUNICATOR in JAIN SIP's RI, I really appreciate the confidence, Ranga, and
thank him as well (this time as a developer) for the great SIP stack that
he and his team have provided "for the people".A BIIIG thank you
goes as well to Thomas Noel (my boss :) ) first of all for providing me with
everything I needed to work on the SIP COMMUNICATOR, secondly for letting me work on
it for longer than initially previewed and most of all for letting me contribute
it to the nist-sip community.