Skip to content
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Go to file
Cannot retrieve contributors at this time
executable file 513 lines (394 sloc) 20.9 KB
<h2> Key contributors </h2>
Substantial contributions made by the following people:
<li> Jeroen Van Bemmel (Lucent) contributed key ideas for JSIP 1.2
and helped fix several bugs in the RI and answered questions on the
mailing list.
<li> Sarit Galanos (Radvision) contributed key design ideas for JSIP 1.2.
<li> Olivier Deruelle wrote a lot of the code for V 1.1 when he
was a guest researcher at NIST </li>
<li> Emil Ivov contributed the TCK for the Transaction and Dialog layer for
version 1.1 that served as the basis for the v 1.2 TCK. Emil presented
a convincing use case for JSIP 1.2 to support multiple stacks in a
JVM. </li>
<li>Jeroen van Bemmel contributed significant effort to bring the TCK up to
version 1.2. Jeroen validated the TCK against another implementation. </li>
<li> Ben Evans (Open Cloud) contributed several ideas to the design
of JAIN-SIP 1.2 and participated enthusiastically in mailing list
discussions. </li>
<li> Jeff Keyser Contributed the initial version of the Transaction layer
to NIST-SIP 1.1 that served as the basis for NIST-SIP 1.2.
Jeff also suggested the architecture for MessageProcessors and
extensiblity that is a part of the implementation architecture.
<h2> Acknowledgements </h2>
Marc Bednarek and Christophe Chazeau were guest researchers at NIST when
NIST-SIP 1.0 and NIST-SIP 1.1 were in development. Their contributions
are acknowledged.
The JAIN-SIP 1.1 API design is largely based on the NIST implementation
experiences of JAIN-SIP 1.0. The help of Chris Harris from DynamicSoft
(Spec Lead for JAIN-SIP 1.0) in understanding JAIN-SIP 1.0 is hereby
acknowledged. Implementing JAIN-SIP-1.0 was a great learning experience.
Hopefully our hindsight is good.
<p> Design contributions to JAIN SIP 1.1 API were made by:
<li> Jeroen van Bemmel (Lucent) suggested several key ideas.
Ben Evans from Open Cloud contributed several ideas to the design
of JAIN-SIP 1.2 and participated enthusiastically in mailing list
discussions. </li>
<li> Brian O'Neill and Josh Burger (currently at BaseVoice).
<li> Dave Ferry and Ben Evans from Open Cloud inc.
<li> Brad Templeton suggested that Dialog.sendBye be changed to the more
generally useful Dialog.sendRequest.
Emil Ivov, Brad Templeton and others requested a method to create a cancel
and Ack request for a client transaction and consequently
ClientTransaction.createCancel was added to the API.
Bug Reports and enhancements for NIST-SIP were contributed
by the following people:
<li> Brad Templeton noticed bugs in the Transaction/Dialog layer
Brad suggested that Dialog.sendBye be changed to a more general
Dialog.sendRequest Brad templeton noticed that the stack was
sending out a Trying immediately and thereby not giving the application
a chance to do so.
<li> Emil Ivov Contributed IPV6 Support. Emil Cotributed the Video Softphone
under GPL Licensing. (See acknowledgement above) later moved to
its own project (see
Emil noticed spec documentation bugs.
Emil uncovered bugs in the transaction layer
implementation for several corner cases. Emil and Iain Macdonnell from
Sun reported a problem with SDP parsing. Emil discovered a bug in the
Server transaction implementation. Emil contributed comprehensive
state machine unit tests of the Transaction layer to the TCK. Emil
set up the build automation cruise control scripts.
<li> Andreas Bystr�m reported bugs in set/get methods for Authentication
headers (quotes were missing). Andreas reported bugs in the
SDP implementation. Andreas helped to unit test call flows. Andreas
found documentation bugs and reported problems and incompleteness with
the TCK. Andreas noticed problems with Acking 487. Ack should be sent
before the TU gets called. Andreas noted that CANCEL should not
contain content. Andreas noted that a dialog can change from client to
server in the middle of the dialog (for example client sends a re-invite
and puts caller on hold -- see sipping service examples draft). The
RI was not allowing this. This was fixed and tested by Andreas.
<li> Antonis Karydas reported bugs in the implementation of the JAIN transaction
model. Server transactions were being created with non-null TID
on reciept of invites. Antonis reported that To/From headers should
not be restricted only to use SIP urls. Antonis reported that
route sets were not properly maintained in the DialogImpl. Antonis
reported that the DefaultRouterImplementation should be able to handle
NON-SIP URLs. Antonis fixed a bug in Dialog.sendRequest() and
Dialog.createRequest(). Antonis reported several bugs in the strategy
being used for dealing with ACKs for 4xx responses. Antonis reported
a problem in handling Server transaction timeouts and posted a fix
for this problem. Antonis reported a problem in content length for
generation of responses. Antonis reported a problem with closely
spaced ACKs for CANCELed Server Transactions. Antonis reported that
CANCEL after OK was not properly handled (stack should respond OK
to cancel and not bother application.
<li> Beichuang reported bugs in the IM Client and presence server. BC also
noted that extension methods were not working (Dialogs were not being
<li> Steve Crossley reported bugs in the parser and setting local/remote party
of dialog layer. Steve contributed a fix to the next hop determination
in the Dialog code that could allow it to deal with legacy systems.
Steve noticed that the short form of Refer-To was not supported in
the parser. Steve noticed that null pointers were being generated
when SessionDescriptionImpl was being cloned with null fields.
Steve reported that content length was being set to 0 when the
content of the SIP message is specified as an Object.
<li> Viswashanti Raj Kadiyala reported a bug and contributed a bug fix
in the initialization of the tcp message channel. Shanti also
reported a bug and contributed a bug fix for reciever tagging for
Via headers.
<li> Andrew Prokop reported a bug in cloning of Authentication headers.
<li> Bob Johnson noticed documentation bugs.
<li> Mark Smith noticed that there were bugs in the handling of lr in the proxy.
<li> Tiago Dias (Altitude software) noticed that there was a bug with
subscribe/notify processing in the proxy. Tiago noticed that
Notify processing in the proxy (presence extension)
was not returning final response immediately and contributed
a bug fix for the proxy that rectified the problem.
<li> Roberto Tealdi reported a problem in instantiating multiple
stacks in multi-homed hosts.
<li> Laurent Schwitzer noticed that events were being dropped (not delivered
to application) when request and response were closely spaced
in time. Laurent noticed that the recieved parameter was not
handling ipv6 address types.
<li> Stuart Woodsford (British Telecom) noticed a bug in the parsing of host
names when there are more than 3 components in the host name.
<li> Brian J. Collins discovered bugs in the implementation of SdpFactory.
<li> Dekeyzer Dmitri noted that PRACK was not updating the Dialog
state and therefore route sets were not being applied appropriately.
<li> Willem Romijn AT&T corrected the payload type constant for H.263 codecs
<li> Peter Parnes noted a bug in handling null messages. Null messages
could be sent to keep alive firewall NAT mappings. Peter tested
the stack on a dual multiprocessor hyperthreaded machine and
uncovered some race conditions in the transaction state machine
implementation that were later fixed.
<li> Christophe at noticed a bug in the transaction state
machine when the retransmission filter is enabled. Christophe noted a
bug in IOHandler when an IO Exception occurs while transmitting via TCP.
Christophe noted a stack bug when IOException occurs (timer tick needs
to be updated). Christophe tested the stack for Exception conditions
under TCP Transport and uncovered some bugs in retransmission filter
implementation under these conditions. Christophe noted that the stack
was trying to retry connections for sending responses. This is against
the SIP RFC (request/response should use the same connection) and it
was fixed.
<li> Gareth Deli noticed a bug in TCP transport.
<li> Ben Evans (Open Cloud)
noticed a transaction state machine implementation error
in SIPServerTransaction.
Ben Evans reported numerous TCK related problems.
<li> Zvalli at reported bugs in the parsing of warning headers and
found a bug when there was a whitespace separating the header name
and the : following it.
<li> Sverker Abrahamsson reformatted everything to conform to the java
style guide and eliminated many annoying javadoc problems.
<li> Bruno Konik torture tested the parser and unearthed some
problems with the parsing of SIP urls and methods.
These problems were fixed. Bruno contributed the torture test
cases from the IETF torture test case draft-ietf-sipping-torture-tests.txt
that are included in the torture test (tests/torture) directory.
Bruno noted that the Rack header was encoded in the wrong way.
Bruno noted that SIPDate header was encoded in the wrong way (should
use 24 hour date format).
<li> Wanrong Lin noted that the spec called for a dummy dialog to be created
even if there is no possibility of a transaction being assigned to
a dialog. This was fixed - now a static dummy dialog is assigned to a
transaction that has no possibility of being assigned to any dialog.
<li> Mafasumi Watanabe noted that setting message content as a string should
compute content length after converting to byte rather than directly
take length() to allow for double byte character set.
<li> Emmanuel Proulx noticed a bug when trying to send large amounts of
data via TCP transport that was caused by a race condition in
the coded that caches threads and connections.
A new configuration parameter gov.nist.javax.sip.MAX_MESSAGE_SIZE
was added to limit the max size of messages.
<li>Venkatesh from CMU noticed that there were threads hanging around
even after all stack resources had been released. This was corrected
by adding a stack finalization method that exits all threads. The stack
now runs happily as an applet.
<li> Dave Stuart (SIPQuest Communications) discovered a deadlock with
the stack and submitted a bug fix for this. Dave also discovered an
error with ParametersHeader in converting String to boolean.
<li> Thomas Froment submitted a bug fix for parsing of
host:port as discovered in the CERT tests (there could be one or more
spaces between host and port). Thomas suggested that the main scanner
thread be eliminated from the SIPTransaction Stack and Timers be used
Thomas Fromet and Pierre De Rop suggested a fast lookup path be
added for looking up Transactions. An auxilliary hash table for quick
lookup was added based on their suggestions. Thomas contributed
a bug fix for sending responses in server transactions. The maddr
parameter was being ignored.
<li>Alex Rootham from Blue Slice noticed that out of sequence messages
directed to a Dialog should be responded to with a 500 (Internal Server
Error) by a UAS. This is decidedly strange but the spec does say so. This
support was added to the dialog layer of the stack.
<li>Bruce Evangelder from Soleo communications found a race condition
with the UDP message processor.
<li>Mike Andrews contributed the idea of a configurable network layer. This
can be used to better integrate with a container and provide management
and other functionality.
<li> Matt Keller noticed a bug where the ACK for 300-699 responses was being
sent to the wrong destination because the contact header in the last response
was being ignored. Mat sent in a bug fix for this problem. </li>
<li> Bill Roome (AT&T research) noted that Applications may want to see
the route header. The stack was previously stripping it.
A configuration parameter was added to pass the route header up to
the application. Bill reported a null pointer exception bug and fixed
some make file bugs. This design flaw has been rationalized in version
1.2 of the JSIP API. </li>
<li> Stefan Marx found a bug in the SipUriImpl.getHeaderNames function. </li>
<li> John Martin from RockSteady noticed some uncessary synchronization
in the MessageHandler that was removed. </li>
<li> Xavi Ferro from Vida Software helped debug a memory leak when 4xx
responses are sent in response to dialog creating requests.
<li> Daniel Martinez contributed TLS support. </li>
<li> Hagai Sela added support for symmetric NAT (rport parameter handling
in via header). Hagai Reported a bug where ACK was not seen by application
on re-invite. Hagai noticed a bug in computation of next hop
for strict routers when the request is sent through
Dialog.sendRequest(transaction). This resulted
in the route being stripped twice. Hagai contributed a bug fix in the
Dialog implementation for route management for strict routers.
Hagai contributed a bug fix for the Default router (for the case
of handling strict routing ). Hagai reported a bug in the updating of
route set for established dialogs. (Only Remote target should be updated
and not route set).
<li> Rob Daugherty (Lucent) detected a bug in handling of TCP messages
and contributed a fix for this. </li>
<li>Jeff Adams ( ) submitted a patch for the sniffer tool.
Jeff submitted a patch for setting the timer on the Transaction Timer. </li>
<li> Pierre Sandstrom submitted a bug fix for the Trace Viewer to fix a
problem where some messages were not showing up in the viewer. </li>
<li> S. R. Jeyashankher from Lucent Submitted a bug fix
for error conditions where one cannot bind to local port </li>
<li>Greg DuPertuis found a bug in the generation of unique branch IDs and
submitted a fix for it </li>
<li>Shu-Lin Chen from the Communications Research Institute (Canada) submitted
a bug fix for timeout post processing. </li>
<li> Banibrata Dutta submitted suggestions for code cleanup </li>
<li> Robert Rosen submitted a fix for a race condition in generating new
CallIDs and with switching lexers.
<li>Daniel Machin Vazquez-Illa submitted a bug fix for the Dialog State
Machine on processing 3XX-6XX class responses in Server Transactions.
Daniel noticed that the remote sequence number for server dialog needed
to be updated even on unsuccessful server transaction processing.
<li>Mario Mantak posted a bug fix for a missing short form header name
for the Event header </li>
<li> Jordan Schidlowski of MDCI fixed a bug that pegs the CPU when
pending requests are directed towards a transaction under some heavy
load conditions. </li>
<li> Dan Muresan submitted changes that speed up cloning of requests
that did not need to use reflection for cloning. </li>
<li> Jeff Heynie submitted a bug fix for the URL parser </li>
<li> Attila submitted a fix for a race condition in ACK processing </li>
<li> Frank Reif submitted a bug fix for a race condition in
SIPServerTransaction </li>
<li> Ivelin Ivanov <> ported
some examples to tck test cases </li>
<li>Yanick Belanger noticed a memory leak in NOTIFY client transaction
which was fixed. Yankick also made some performance enhancements to the
parser. Yanick noted a bug in random generation of call IDs and branch IDs.
Yakick contributed code to support offloading of TLS requests.
Yanick contributed performance enhancements and cleanup to StringMsgParser.
Yanick contributed performance ehnancements to the Message and header
Yanick measured the performance on contemporary high speed processors
and reported these results.
<li> Kathleen McCallum contributed the Third Party Call Control (tpcc) example
and the authentication example. </li>
<li> Jose Miguel Frietas, Nuno Silva ( PT INOVAO - EST DEPARTMENT ) and
Alexandre Miguel Silva Santos ( Aveiro University - Portugal) contributed
parsers and headers for IMS. These are included in the Implementation
of the Factory interfaces but are not yet part of the JSIP standard. </li>
<li>Lebing Xie fixed bugs in the contributed IMS headers. </li>
<li>Ricardo Borba (Natural Convergence) reported bugs in the Dialog
implementation and also in the UDP Message processor. Ricardo contributed
a patch for Ricardo made several contibutions
related to hardening the stack and guarding it against application
programming errors:
<li> Fixed Session Description to allow it to take a null session name.
<li> Fixed Sdp parser to handle mixed \r , \n and \r\n
<li> Fixed case sensitivity issue with content type and content subtype.
<li> Added a Safe timer task. If an exception occurs in the timer the stack does not exit.
<li> : Fixed exception handling so that exceptions in the listener dont exit the stack.
<li> SessionDescriptorImpl is now a deep copy
<li> Added listener thread (liveness) auditing facitlity
<li> Added Transaction table (leak) auditng facility.
These will be of particular importance to you if you are building robust server applications. Examples have been provided for these new facilities.
<li>Brett Buckingham (Natural Convergence) submitted a patch for a
reliable timer that does not cause the stack to die when a cancelled
timer is cancelled during stack stop and restart. Brett contributed
a fix for RFC2543 CANCEL handling.</li>
<li>Peter Musgrave (Newheights Networks) contributed code for
RFC 3892 (Refer method ) and Session Timer (RFC 4028) headers
and parsers for the same. </li>
<li>Hai Phan noticed that responding with a From tag different from the
original request From tag with automatic dialog support enabled, resulted
in memory leak due to Dialogs getting allocated despite invalid
<li> John Barton noticed an
issue with PRACK being dropped under heavy load. This issue has been fixed.
<li> Peter Li <> sent in a bug fix for parsing of IPV6
<li>Ryan Mitchell Noticed that the ACK for 3xx responses should not use
the contact header for constructing the Request URI. Using the contact header
will direct the ACK to thw new location. This was fixed in the RI.
<li>Anil H noticed a problem with retransmission of ACK in the case of
RE-INVITE processing. He contributed a bug fix which was applied to the RI.
<li>Nabeel Mohammed submitted a patch for dealing with RFC 2543 backwards
compatibility in CANCEL requests. This was applied to the RI. </li>
<li> Jens Tinfors submitted patches for SIPDialog.equals and SIPDialog.createFromNOTIFY. </li>
<li> Raghav Ramesh (BT) noticed an issue with CANCELing INVITES for a load balanced appliction </li>
<li> Roger M. Persson submitted a bug fix for closing message channels on stop. </li>
<li> Sebastien Mazy contributed a patch that allows storing application data in SIPMessage-s. </li>
<li> Aayush Bhatnagar (Rancore Technologies)
contributed a patch for header definitions and parsers
for several IMS Headers. These headers complete the IMS Package </li>
<li>Hauke D<> Noticed a bug having to do with premature Dialog deletion </li>
<li>Simon Shieh ( Nortel Networks ) noticed a bug in the caching of TCP connections. </li>
<li>Subramanian Thamaraisamy (Cisco} reported and contributed <a href="">DoS attacks against JAIN SIP</a> . </li>
<p> Following is a list of people who contributed bugs reports and fixes to
NIST-SIP 1.1 (which implemented the JAIN SIP 1.0 interefaces). Many of
these fixes carry over to NIST-SIP 1.2 and hence their contributions
are acknowledged in rough chronological order of first contribution.
Acknowledgements for contributions are listed below and in the code
where their contributions appear:
<li> Chris Mills
<li> Maria Yndefors
<li> Stefan Foekel
<li> Jakob Schlyter
<li> Ganesh Jayadevan
<li> Steven Lass
<li> Kim Kirby
<li> Andre Pharand
<li> Christophe Lafaille
<li> Gordon Ledgard
<li> Robert Billingslea
<li> Juan Fco. Martin
<li> Ahmet Uyar
<li> Prasanna Kumar
<li> Lamine Brahimi
<li> Nadeem Anwar
<li> Andreas Bystr�m
<li> Yann Duponchel
<li> Thai Dang Vu
<li> Will Scullin
<li> Jeff Keyser
<li> Robert M. Smith
<li> S. Nageswara Rao
<li> Niklas Uhrberg
<li> Eero Vaarnas
<li> Laurent Schweizer
<li> M.P. Ardhanareeswaran
<li> Stephen Jones
<li> Espen Skjaeran
<li> Scott Holben
<li> Salva Rey Calatayd
<li> Tsun-Chieh Chiang
<li> Dan Timoney
<li> Majdi Abuelbassal
<li> Srinivas Maganti
<li> R.W. Johnson
<li> Emil Ivov
<p> This code was developed in the Internetworking Technogies Group (ITG),
Advanced Networking Technogies Division (ANTD), the National Institute of
Standards and Technology (NIST).
Group Manager: Doug Montgomery <>
Division Chief: David Su <>
<a> <a href=""> </a>