-----------------------------------------------------------------------------
Vanakkam! Namaste! Hello! Holla! Howdy Doodie! Konichiwaa! Bon Jour! Guten Tag!
-----------------------------------------------------------------------------


O genki desu ka?


This is the public domain nist-sip message parser and stack package. It
includes parsers and header definitions for SIP, SDP and URIs, a simple
stack and an implementation of the JAIN-SIP interfaces that passes the
Technology Compatibility Kit (TCK) and is officially JAIN CERTIFIED.
This software is primarily intended for SIP software developers.

This file contains instructions on how to build this distribution and a
list of credits for various people who have contributed to this code.
Do read this file and please point your browser at docs/index.html to
find out more.

The distribution is pre-built. However, if you make modifications, you may 
wish to re-build it. The following tools are used to build this distribution:

1. JDK 1.4.0  (www.javasoft.com 
	      (you can do with 1.3.1 but 1.4.0 is preferred and is faster)).

2. Antlr 2.7.1 (www.antrlr.org) 


3.  You can use either gnu make files or the apache ant tool
    to build the whole thing.

     The apache ant build file is called build.xml and is located
     at the root of the distribution tree. An attempt is made to
     keep the jakarta ant build.xml in sync with makefiles but make
     is our build tool of choice and hence the make files are more
     up to date. Please report discrepancies (updates to build.xml will
     be gratefully accepted).

     If you are working under windows NT/2000/XP and want to use gnu
     make, or any of the shell scripts in the examples directory you
     need cygwin. Please get it from  http://sourceware.cygnus.com.
     (STRONGLY RECOMMENDED). By presidential decree, tools are generally
     invoked using shell scripts or make files unless otherwise noted :-)

4. If you want to build the torture tests  you need :
     - the xerces xml parser included in lib/xerces; but if you want
       the latest, go to http://www.apache.org.

5.  For the template matching responder:
    -  the apache regexp package (also included herein under lib/regexp) 
       which is available from http://www.apache.org
     - The xerces xml parser (see above).
     - the JAVA version of Python (a.k.a jython). This is already included
       herein in lib/jython but if you want the latest and greatest,
       http://www.jython.org

6. If you want to generate documentation for the responder (this is already
	generated for you so YOU SHOULD NOT NEED TO), then set WANT_DTD_DOC=1
	in the build-config file and download and install the perlSGML tools.
	I also use python to munge dtd identifiers for case sensitivity.
	These are not included here. 
	Please go to http://www.nacs.uci.edu/indiv/ehood/

A version of the required jar files (for xerces, antlr, jython and regexp)
are included in the subdirectories lib/xerces and lib/antlr lib/jython
and lib/regexp respectively; however, these are not necessarily the
latest versions. If you want a freshness guarantee, please download
these from the web sites above.

If you are using make: Adjust the settings in build-config to suit
your system. Run 'make all' from this location to build the whole thing
(including JAVADOC documentation).

If you are using jakarta ant: ant all 

If you are using 1.4 and ant, you must enable the -quiet and
-breakiterator flags for javadoc generation or you will see lots of
scary warnings.  Edit the build.xml file and add these flags.

Warning: ant IS NOT THE BUILD TOOL OF CHOICE in these parts so the ant
file may well be out of date. ( We are nervous about the name of the tool
and we prefer to remain on the make; besides, after all, an ant is a bug. )
If you are an ant fan/expert please feel free to modify the build.xml
and send me the changes.

Documetation is a bit sparse. However, don't worry; be happy. I hope
our documentation will improve with time.

This is beta code and is evolving (and hopefully getting better). Bugs
are a natural outcome of this situation.  The humans involved in this
development effort (a set of small cardinality that is frequently
the singular set and sometimes even the empty set) are often greatly
outnumbered by pesky bugs; however, we will attempt to promptly fix all
the bugs that we know of and put out fixes. We sincerely hope that
the number of bugs decreases monotonically with time. Please bring any
bugs that you encounter to our attention (by emailing mranga@nist.gov
or nist-sip-dev@antd.nist.gov) and feel free to kill a few of your own.
A periodic stable snapshot will be made available at:

ftp://is2.antd.nist.gov/pub/nist-sip/nist-sip.tar.gz

and at 

ftp://is2.antd.nist.gov/pub/nist-sip/nist-sip-install.exe

Check docs/bugs/bugparade.html in your downloaded copy to see if your 
bug has been reported or has been fixed.


Each snapshot is stamped with a revision and a release date. This will
correspond to a the tag in the cvs repository.  New revision numbers are
assigned when there are any class changes (that may break applications)
and snapshots are stamped with the date on which the snapshot was made.

-------------------------------------------------------------------------
To get the latest version:

As the source is subject to frequent updates, you may also wish to access
our public CVS repository regularly. In order to do this:

1. Install cvs (if you are using windows, please install cygwin 
and this gets you cvs).

2. Log into cvs:

cvs -d :pserver:anonymous@is2.antd.nist.gov:/home/nist-sip/nist-siprepository login

Supply a password when prompted.

Password: nist-sip

3. check out the repository:

cvs -d :pserver:anonymous@is2.antd.nist.gov:/home/nist-sip/nist-siprepository co nist-sip

This will download all the files you need to build the source.

Read nist-sip/README (this file) and follow the build instructions.

4. To make an update to your copy of the source

cvs -d :pserver:anonymous@is2.antd.nist.gov:/home/nist-sip/nist-siprepository update -P -d nist-sip

This will download appropriate files from our repository and merge them with 
your changes. The -P and -d flags prune empty directories and add any new ones
respectively.

To make source code changes, you can email us your changes and we will
update the repository after reviewing them.  

You can view the latest repository at the following http URL:

http://www.antd.nist.gov/view-nist-sip/viewcvs.cgi

-----------------------------------------------------------------------------

Address questions, comments and feature requests to the jolly hackers at

nist-sip-dev@antd.nist.gov

or the user group:

nist-sip@antd.nist.gov

or the wild and whacky hacker who wrote some of this

"M. Ranganathan" <mranga@nist.gov>

We hope you find this a useful piece of work!

**********************************************************************
* 			      WARNING				     * 
*        This is highly radio active EXPERIMENTAL code!	             *
* 	    If this code glows in the dark, run.                     *
*    NEVER signal your neighborhood nuclear reactor with this code.  *
**********************************************************************

----------------------------------------------------------------------------
CONTRIBUTORS
============

M. Ranganathan <mranga@nist.gov> 
Chief Implementation Officer (CIO), poet, philosopher, philanthrope,
misanthrope and of anthropomorphic shape.  (Frequently mistaken as human.)
Architecture, Design and Implementation lead.  (In real life: Computer
Engineer, Advanced Networking Technologies Division, NIST).

Olivier Deruelle <deruelle@antd.nist.gov>
(Guest Researcher Advanced Networking Technologies Division).
Documentation, JAIN-SIP: joint implementation and testing Test harness
for protocol test tools. Web tester implementation.  JAIN Proxy
implementation.  Instant Messenger Implementation.  Trace viewer
application.  Impromptou French lessons for Ranga.

Marc Bednarek <bednarek@antd.nist.gov> 
(Guest Researcher (emeritus) Advanced Networking Technologies Division).
Proxy and firewall support for proxy: joint implementation and debugging.
The firewall enabled proxy has been retired.
Current location - absconding in Europe.

Christophe Chazeau <chazeau@antd.nist.gov> 
(Guest Researcher (emeritus) Advanced Networking Technologies
Division).  Documentation, AWT Trace Viewer application, JAIN-SIP:
joint implementation.  Current location - absconding in Europe.

Doug Montgomery <dougm@nist.gov> 
(The Beaurocrat who Hacks. Chief Critic and  Financial Officer.
Late night closet perl hacker.  In real life: Manager, Internetworking
Technologies Group).  Provides resources to keep the project going and
the critique to keep us honest. Provides salaries.

Jeff Keyser  <jkeyser@telocity.com> Contributed the transaction layer
gov.nist.sip.stack.transaction DNS Locator code and some key ideas 
for the SIP Stack (generalized message processors, start/stop the 
stack etc.)

Tim Bardzil <bardzil@colorado.edu> contributed a utility that converts
Ethereal Sniffer trace captures into a format that can be viewed as
a call flow by the trace viewer.  This code was completed as part of
a class project in TLEN 5843 Singaling Protocols, taught by Professor
Douglas C. Sicker, Ph.D. at the University of Colorado, Boulder.

And the fearless users who have sent us bug reports and helped in debugging
the distribution. Thanks to the following (contributions are noted as
comments in the source code and bugparade and are summarized here):

Lamine Brahimi (IBM Zurich) sent in a bug report that noted that the From
and To headers are inverted when generating a BYE from an INVITE.  Lamine
also pointed out that tags were not being generated properly for messages
and that extensions were not being handled in JAIN.  Lamine requested a
feature to allow for a single processing thread for UDP messages. This
permits serialization of processing of incoming messages. This was added
as a configuration property to the NIST SIP stack.  Yann Duponchel of IBM
made a bug fix in the PipelinedMsgParser to fix a very screwy problem
with deadlocking under heavy load conditions. This fix was sent to me
by Lamine Brahimi. The bug resulted in removing pipelining entirely
from the PipelinedMsgParser (thus making the name a misnomer). Lamine
also noticed problems with ExtensionHeader and UserInfo class of the
SIP URL. Lamine noticed that the scheme data part of the URL was not
being properly handled. This was also noticed independently by Jakob
Schlyter. Lamine unearthed a screwey race condition that was occuring
on fast processors and posted a bug fix for it.

Gordon Ledgard of IPeria sent in several bug fixes in the JAIN
implementation. Gordon also noticed that reverse name lookups was causing
timeout problems under windows. Gordon noticed some memory leaks caused
by not deleting dialog objects in JAIN.

Jeff Keyser came up with a nice way of allowing for different transport
mechanisms to be incorporated into the stack layer. Jeff also suggested
a more elegant start/stop mechanism for the stack. Given that stopping
the stack is a useful operation to have, I made this into a public 
method.

Andreas Bystrm of e-horizon Streaming Technologies noticed a problem with
tag assignment in the generation of responses. Andreas also suggested
that the JAIN stack stop issuing retransmissions when a provisional
response is received. Andreas has unearthed a number of bugs with the JAIN
implementation (documented in the code and below).

Andre Pharand of Warplogic sent in a bug fix in the JAIN implementation. 

Stefan Foekel of GMD Fokus for reported bugs in the JAIN stack. 

Steven Lass reported parser and stack bugs.

Chris Mills from Nortel Networks reported bugs in the JAIN stack, NIST-SIP
implementation and helped to clarify and understand the JAIN-SIP spec.

Hkan Jonsson and Marcus Sigling from Bluelabs, SE  reported bugs 
in the NIST-SIP stack and proxy.  

Maria Yndefors and Mikael Danielsson from e-horizon Streaming Technologies
reported bugs in the JAIN SIP implementation.

Jakob Schlyter of Carlstedt Research & Technology  reported bugs in the
JAIN SIP implementation. 

Ganesh Jayadevan from Lucent reported a bug with the clone method of
SIPMessage. Ganesh requested a method to preload the lexical analyzers
so as to reduce latency in message parsing.

Kim Kirby from Keyvoice suggested that duplicate elimination be added to
the stack.

Christophe Lafaille from Alcatel reported a bug in the generation of Bye
messages.  

Bob Copeland from eStara reported a bug in the encode method of 
sipheaders.ExtensionHeader

Juan Francisco Martin from Vida Software (Spain) reported a bug in the
JAIN SIP sendAck and sendBye impelementations that were causing null
pointer exceptions.

Ahmet Uyar from Florida State University sent in a bug report for the TCP 
operation of the JAIN-SIP stack which resulted in a bug fix.

Prasanna Kumar sent in a bug report for cloing jain messages that was
generating an illegal access exception.

Nadeem Anwar from AT&T labs noted several problems in the example proxy.

Thanks to the JAIN-SIP and SIP implementors mailing list members for help
with numerous queries; especially to Chris Harris, the JAIN SIP lead for
help in figuring out the spec. Much is written in between the lines.

Please report bugs. Your feedback is vital! I will try hard to keep up
with your bug reports and I will acknowedge your feedback.

If I missed your name in error (or would rather I not mention your
contribution), please let me know:

mailto:mranga@nist.gov

OR

mailto:nist-sip-dev@antd.nist.gov 

with bug reports, contributions and suggestions for improvement.

----------------------------------------------------------------------------
TO CONTRIBUTE
=============

If you want to contribute, we welcome that and will fully acknowledge
your contribution if we distribute code that contains your contributions
(unless you would rather not be identified of course).  In acknowledging
your contribution, we will not divulge any details about your project.
However, please be aware that unless prior agreements have been made,
by law anything we develop at NIST is in the public domain and is
therefore not subject to copyright protection (see scary warning
below). Essentially what this means is that the gov.nist..., examples
and tools hierarchy stays in the public domain as do all the makefiles,
scripts, documentation and other miscellaneous odds and ends. However,
if you develop a meaningful project that uses NIST-SIP and want to
distribute it as open source along with the nist-sip distribution under
a GPL-like license we can do that (let us know).

If you are working on a cool project that uses NIST-SIP, let
us know and we will include a URL to your project page (we
likewise hope you will include a pointer to our project page
http://is2.antd.nist.gov/proj/iptel).

---------------------------------------------------------------------------
UNCOPYRIGHT
===========
This software was developed at the National Institute of Standards and
Technology by employees of the Federal Government in the course of their
official duties. Pursuant to title 17 Section 105 of the United States
Code this software is not subject to copyright protection and is in the
public domain. This software is an experimental system. NIST assumes
no responsibility whatsoever for its use by other parties, and makes
no guarantees, expressed or implied, about its quality, reliability,
or any other characteristic. 

This software can be redistributed and/or modified freely. We request that
any derivative works bear some notice that they are derived from it,
and any modified versions bear some notice that they have been modified.

We would appreciate acknowledgment if the software is used.

============================================================================

Scary eh? If you want to get a blow by blow bug accounting, read on....

Major Revision Summary
======================

Version 0.9
-----------


January 01 01 
-------------
Initial public release

Revision A  01-10-01
--------------------
1. Added better support for dealing with malformed and invalid headers.
2. Added a new exception class gov.nist.sip.msgparser.SIPInvalidHeaderException 
3. Added several more torture tests.
4. Added support to the SIPMessage class to compute a transaction ID.
5. Fixed a problems in the parser which would report an incorrect error line
   when the error token occured at the end of the line.

Revision B  01-16-01
---------------------
1. Moved Address over to the net package
2. Fixed a bug which would bomb the parser if the tag parameter is present
   in the From and To headers.
3. Changed the way in which parameters are tracked in the From and To headers.

Revision C 01-24-01
--------------------
1. Minor reshuffling of class sipheader class hierarchy for uniformity.
2. Added a couple of new methods to StringMsgParser (for addresses 
	and hostnames).
3. Migrated torture tests to the xerces xml parser (available from apache.org)

Revision D 02-08-01
-------------------
This is a somewhat major revamp. The following changes have been made.

1. More re-arrangement of sipheader classes for uniform naming conventions:

	remove AcceptLanguageBody
	remove AddrParms
	remove ContactBody
	remove Language 
	remove WarningValue
	remove ContentPreference
	remove OptionTag
	remove LanguageTag
	remove Encoding
	add    Warning
	add    InReplyTo  
	add    WWWAuthenticate
	add    ProxyAuthenticate
	add    AcceptEncoding
	add    Contact
	add    ServerList
	add    Unsupported
	add    ProxyRequire
	add    RecordRoute
	add    ContentLanguage
	add    Also
	add    Require
	add    ErrorInfo

These changes increase the overall number of classes (some of which are 
almost identical to others) but add the following uniformity:

Each SIP Header now maps directly to a single sipheader class and
each SIP Header for which there are multiple headers possible maps
to a SIPHeaderList of the same name (i.e. Require is a SIP Header and
RequireList is a list of Require headers).

Added encode method in each SIP Header  to encode the header into 
canonical form.


Revision E 03-18-01
-------------------

More bug fixes and a few more creature features.

1. Equality checking predicates for various headers.

2. Made the syntax rules more lax for user agent and Server headers.
   Product tokens can now be pretty free form except that they cannot have
   commas in them.
	remove  UserAgentList
	add	ProductToken

3. Debugged the pipelined (TCP) parser. The interface to this parser has
   changed. You need to call processInput to begin processing input from 
   the pipe.

4. Tested interoperabilty against a couple of other commercial implementations.

Revision F 3-30-01
------------------

1. added support for cloning sip headers.
2. added the Supported header.
3. Fixed a bug in the default error handler code.
4. Added a few methods to various classes (en route to building a 
	jain-compliant implementation).


Revision G 4-23-01
------------------

1. Added more access functions and edit functions in support of JAIN-SIP
2. Debugged Authorization header
3. Added support for parsing telephone numbers (according to RFC2806)
4. Naming changes of get and set methods for various headers 
	(en-route to JAIN-SIP).
5. Got rid of UserAgentProduct, UserAgentComment  
   and collapsed these into a single UserAgent class
   (it is easier to have a 1-1 mapping with JAIN-SIP classes).
6. Renamed the DateHeader class to SIPDateHeader class to avoid a 
	naming conflict with JAIN-SIP.

Revision H 5-11-01
------------------
1. More JAIN-SIP support.
2. Improved javadoc (thanks to Olivier Deruelle).
3. Removed SubjectList (should not be a list - rather it should be a
	singleton).
4. the method gov.nist.sip.msgparser.getXXXHeaders() (where XXX is
	one of the List types) will return null (not an empty list)
        when no headers of XXX type exist in the SIP message.
5. The replace(...) method that does a find and replace of portions of a 
    SIP/SDP object was debugged (thanks to bug report from user).
6. Minor fixes in the encode method for a couple of classes.

==========================================================================

Version 1.0

New!  Improved!!  Extra Clean!!!  Even Lower Price!!!!  Now with JAIN-SIP !!!!!

Initial Release 6-15-01
------------------------
Following are the changes for Version 1.0:

1. Fixed parser and lexical analyzer warnings. The build is clean.

2. Added the following packages:
    gov.nist.sip.stack
    gov.nist.sip.stack.security
    gov.nist.jain.protocol.ip.sip         (JAIN-SIP)
    gov.nist.jain.protocol.ip.sip.header  (JAIN-SIP)
    gov.nist.jain.protocol.ip.sip.message (JAIN-SIP)

3. Added an example proxy implementation.

4. Added jain-sip example implementation.

5. Cleaned up make files.

6. Significant Performance enhancements in the Parser.

7. Cleaned up the grammar.


Revision A 06-21-01
-------------------

1. Fixed bug in the pipelined parser.
2. Added zone field and repeat field to the sdp parser 
(and corresponding support classes).

Revision C 08-07-01 (OK. Revision B was an OOPS)
------------------------------------------------

1. Fixed a major implementation error in JAIN-SIP:
	Provider does not block until a message is recieved. Added
	logging facility with remote access to the stack. Added
	customizable routing algorithm to the stack. Thanks to jainsip
	mailing list and help from  from NIST-SIP users.
	Thanks to Stefan Foekel of GMD Fokus.

2. Performance enhancements 
	provided an API to disable input tracking
	gov.nist.sip.msgparser.MsgParser.disableInputTracking()

	This disables tracking of the input while parsing and consequently
	saves significant processing overhead.

	Enable sdp parsing only when explicitly enabled in the proxy.
	(You can enable this by parseSDP in the configfile).

3. Fixed  SIPMessageFormatter problems (and consequently fixed 
	a few more jain problems).

4. Fixed a bug in parsing telephone number strings in sdp fields.

5. Fixed timeout and transaction handling algorithm in JAIN-SIP implementation.
	(Thanks to Chris Mills of Nortel).

6. Fixed a bug in generating a cancel request. 

7. Added a new parameter to configfile to allow for tuning of the 
   scan interval ( transactionTimeout in configfile for the JAIN stack).

8. Fixed a bug in the Message Matching (now this feature works).

9. Fixed a problem with JAIN request URI setting (thanks to Stefan 
  Foekel of GMD fokus for pointing this out).
	

Revision D 08-11-01
-------------------

1. Fixed a bug in the pipelined message parser having to do with reading
   message cotents (thanks to Hkan Jonsson of Bluelabs SE for pointing this
   out). Pipelined parser now supports content encoding types for reading
   the message content.  The input reader uses the encoding type specified
   in this header to read the content. This support is NOT AVAILABLE IN
   the String Parser. (i.e. the StringParser assumes a uniform encoding of
   the message).

2. Fixed a bug in the generation of messages which would put two
   content-length headers in a message generated from a response.

3. Fixed a bug in the sdp parser having to do with media field parsing
   (the generated structure was previously not being attached to the SDP
   announce structure.


Revision E 08-29-01
-------------------

1. Fixed another bug in the PipelinedMsgParser. Now both StringMsgParser
   and PipelinedMsgParser can accept binary body types.
 
2. Removed a lot of unnecessary synchronization between the parser thread
   and the pipeline input reader for PipelinedMsgParser. The pipelined
   parser runs faster.

3. Fixed a bug in encoding the date for the expires parameter of contact
   headers. (Bug reported by Stfan Foekel of GMD Fokus).


4. Put in synchronization for mapping the NIST header to JAIN header as
   these access static data structures (i.e. the mapping table).



Revision F 09-19-01
-------------------

Many fixes in the JAIN implementation to pass the TCK. Note that
there are some timing and locking bugs in the TCK itself. I had to fix
these before this version passed. Thus the impelmentation is still not
officially compliant; however, it passes the modified TCK which I believe
to be correct.



Version 1.1 09-30-01
--------------------

1. Fixes to the JAIN implementation.

2. Many fixes to the proxy server. The proxy server now works correctly.
   However, cleanup of structures (garbage collection) is still not correct.

3. Correct handling of binary message content in the sip stack.

4. Logging support in the JAIN stack. The messages that pass through the
   stack can be logged and visualized.

The following new tools have been added to the distribution
  Includes a trace viewer that allows messages to to be logged and 
  viewed off line (in order to enable this feature, you need to 
  include the accessLogViaRMI line in configfile).
  See ( tools/traceviewerapp )

  Includes a load generator tool (See examples/responder) that can do
   template matching on SIP messages and responds according to the match.



Revision B 10-12-01
-------------------

1. Fixes a locking bug in the JAIN stack 
  (reported by Maria Yndefors of E-Horizon).

2. Uses the topmost via header to route replies 
	(reported by Chris Mills of Nortel Networks).

3. Allows local tel: url's (reported by Jakob Schlyter).

Revision C 10-16-01
-------------------

1. Fixes another locking and synchronization bug in the JAIN stack.

Revision D 10-23-01
-------------------
1. Added exponential backoff to timeouts in the jain stack (bug
   pointed out by Chris Mills of Nortel Networks).

2. Fixed and revised a bunch of stuff in the responder (you can now register
   fragments of Jython code that fire on events). The agent portion of
   the responder is now separated from the FSM specification.

3. Fixed a bug in the SIPMessageFormatter for correct formatting of BYE messages
   extracted from INVITE messages 
   (bug pointed out by  Maria Yndefors of e-horizon).


Revision E 11-08-01
-------------------
1. Fixed a bug in the SIPMessageFormatter for correct formatting of BYE messages
   extracted from INVITE messages.

2. Fixed a bug in the SIPRequest.clone() method 
   (reported by Ganesh Jayadevan of Lucent).

3. The request URI of the ACK message is now derived from the Contact header
   of the corresponding invite or the OK to the INVITE
   (Bug reported by Maria Yndefors of E-horizon).

4. Changed the responder xml spec so it is clearer to the untrained eye!

Revision F 11-26-01
-------------------
1. Added a highly experiemental tools.testproxy directory which includes
   a mechanism to do template matching at the proxy and return responses.
   This is an elementary service creation environment for testing. I 
   solicit your feedback.

2. The jain sip stack, tools.proxy, examples.proxy and tools.testproxy all
   use properties for configuration (this is the java standard way of
   doing things after all - feature suggested by Jakob Schlyter of
   Carlstedt Research & Technology.)

3. Changed the responder state machine spec for the test tool in 
   tools/responder.

4. Added a build.xml file in the root directory for building using the
   jakarta-ant tool (for ant fans). I am leaving the make files in the
   distribution for a while until I am comfortable with ant.
    

5. Fixed the gov.nist.sip.stack.MessageChannel so that responses are
   sent to the address in the topmost via header (the protocol used 
   was previously wrong). You can now send an invite using tcp and
   recieve the response using UDP on a completely different machine
   (although I would'nt know why you would want to do so...).

6. Fixed a bug for contact extension handling in sip_msgParser.g 
   noted by Steven Lass .

Revision G 12-06-01
-------------------

1. Kim Kirby of Keyvoice suggested that duplicate elimination be added to
   the stack and this was incorporpated.

2.  Andre Pharand of Warplogic sent in bug fixes for the JAIN implementation. 
    which have been incorporated into the stack.

3.  tools/responder  state machine spec has been revamped to allow for global
    events and local events.

Revision H 
----------
1. Added a generalized pattern matching facility for SIP messages. You can
   implement the gov.nist.sip.Match interface and achieve very general
   match and find and replace facilities for sip messages. This could
   be useful for implementors of firewalls (and in our case for pattern
   matching responders). Use the jakrarta regexp package to build a
   patter matcher (i.e. to implement the Match interface) or roll your
   own simpler solution. See the examples/msgparser/RegexpMatch.java
   example for clues.

2. Fixed a bug in the generation of Bye messages. Bug was reported by
   Christophe Lafaille  of Alcatel.

3. Fixed a transaction id bug for sendBye.  The stack now passes a TCK 
	that was sent to me by the Spec lead (Chris Harris of Dynamic Soft).

4. Included a bug fix from Gordon Ledgard of IPeria for 
	sipProviderImpl.sendAck and sipProviderImpl.sendBye

5. Included a bug fix from Gordon Ledgard of IPeria for generating 
   transactionIDs when no port is present in the sentBy field of the
   via header.

6. Included a revised build.xml file (from Gordon Ledgard of IPeria).

7. tools/responder state machine spec has been revised to allow for event
   generation from within the handler script.

8. transaction timeout bug fix.

9. Added preloadLexers() method to StringMsgParser ( feature request from
    Ganesh Jayadevan of Lucent).

Revision I
----------

1. Fixed JAIN SIP transaction timeout problems. I hope I finally got it!
   (reported by Gordon Ledgard of IPEra and Robert Billingslea of estara).

2. Revised logging and trace viewer code. Allows for remote registration
   of traces.

3. Fixed proxy to pass through unrecognized methods as a default action (rather
   than return an error to the message sender).

4. Revised jainsip examples.

5. Bug fixes for sendBye and sendAck in the JAIN implementation (bug reported
	by Juan Fco. Martin)

6. Bug fix for JAIN SIP TCP transport (reported by Ahmet Uyar of FSU).

7. Fixed a problem with cloning sip messages (was generating a illegal access
	exception). Bug reported by Prasanna Kumar.

8. Fixed a problem with encoding where quotes were being omitted while encoding
	headers. Bug reported by Kirby Kiem of Keyvoice.

9. Fixed a problem with FROM and TO headers being inverted when generating
  a BYE from an INVITE.

10. Fixed a problem with handling extension headers as pointed out by Lamine
	Brahimi intern from IBM Zurich.

11. Fixed a synchronization problem with the piplenined msg parser -- bug fix
   contributed by Lamine Brahimi .

12. Fixed problems withe message routing in the proxy example as pointed out by
	Nadeem Anwar from AT&T labs.

13. Kirby Kiem noticed that there was a problem with setting 
contact headers in MessageImpl. This has been fixed.

14. Numerous fixes in the tools/responder

15. Chris Mills of Nortel Networks noted that the transaction identifier
    was being compared in a case sensitive fashion in the JAIN Implementation.
    This has been fixed -- all tids are returned in lower case.

16.  Andreas Bystrm of e-horizon Streaming Technologies noticed a problem 
     with tag assignment in the generation of responses.

17. Prasanna Kumar and Andreas Bystrm (e-horizon) noticed a problem
    with the generation of tags for BYE and ACK messages in the JAIN 
    implementation. The tag parameter must be extracted from the most 
    recent response to the transaction.

18. Fixed problems with domain registration in the proxy.

19. Yann Duponchel of IBM made a bug fix in the PipelinedMsgParser to
    fix a very screwy problem with deadlocking under heavy load
    conditions. This fix was sent to me by Lamine Brahimi (also from
    IBM Zurich) and I eventually threw out pipelining from the 
    PiplelinedParser on the principle that progress (even slower progress)
    is better than deadlock.

20. Bug in logging code under windows that caused timeouts was noticed by 
	Gordon Ledgard from iperia.com.

21. Removed tools/responder from the distribution as this is in too high a
    state of flux and buggy-ness.

22. Jakob Schlyter reported that getSchemeData was returning null for tel
	URLs. I fixed this.

23. Changed the interfaces for SIPServerRequest.processXXX and 
	SIPServerResponse.processXXX

24. Fixed setting of scheme data in URI class.

25. Added dtd documentation for the pattern matching responder.

26. Remove message content before adding new content (bug reported by
   Thai Dang Vu).

27. Will Scullin  noted that when there are two nulls, at 
    the end of the buffer, the parser crashes.

28. Will Scullin noted that  the Router was ignoring the
	maddr parameter in the request URI causing the request to be
	sent to machines that were bewildered by SIP.

29. Added back tools/responder to the distribution along with some nice
    documentation.
    
30. Fixed a bug with setting MAddr parameter in the request URI (was being
    set as a string).

31. Andreas Bystrm Requested a feature to limit the number of timeout
	notifications delivered to the application from the JAIN stack.
	A maxTimeoutNotifications configuration parameter was added.

32. Andreas Bystrm Noticed that timeouts were being generated even after
	a provisional response was received by the stack.

33. Andreas, Lamine and others requested that ACKs do not generate timeouts
	so an ack just generates a dummy transaction identifier (no timeout
	notifications are generated for the ACK transaction).

34. Jeff Keyser sent in a bug fix for StringMsgParser.parseAddress (the 
	parserMain variable was not being set).

35. Robert M. Smith from Motorolla sent in a bug report that supported
	header was causing problems in the parser when no token was specified.

36. Robert M. Smith from Motorolla sent in a bug report that call-id should
	be allowed to include ":" 

37. Lamine Brahimi requested that the Dialog object be made public.

38. Lamine Brahimi added cases for SUBSCRIBE and NOTIFY to 
	NistSipMessageHandler.java

Revision J 
----------

The gov.nist.sip.SIPServerRequestInterface and 
gov.nist.sip.SIPServerResponseInterface have changed. This is in order
to accomodate applications that may be statically allocating implementations
of these interfaces. This will only affect you if you are using the NIST
interfaces (it will not affect you if you are using the JAIN interfaces).

Fixed a race condition observed by Lamine Brahimi

1. Jeff Keyser came up with a nice way of allowing for different transport
   mechanisms to be incorporated into the stack layer. Jeff also suggested
   a more elegant start/stop mechanism for the stack. Given that stopping
   the stack is a useful operation to have, I made this into a public 
   method.

2. Fixed a bug with encoding of Contact headers (extraneous "<>" was being
   generated).

3. S. Nageswara Rao noticed that SIP URL Parameters were being too
    restrictive on allowed character sets.

4. S. Nageswara Rao reported a bug that resulted in fixing 
	gov.nist.sip.net.URI.hasParameters()

5. Andreas Bystrm noticed that there was a problem in processing CANCEL 
	messages in the JAIN stack where the transaction was not being found.

6. Will Scullin noted that when multiple interfaces were present on a machine,
	the outgoing messages may be sent out of a restricted interface.
	The UDPMessageChannel class was fixed up to send messages out
	only through the Stack address by bining the socket explicitly 
	to the given address.

7. Andreas Bystrm noticed that the body was being included when generating
	an ACK message in SipProviderImp.sendAck(clientTransactionId). 
	The ACK Message is now generated without including the body. There
	are other methods that allow you to include the body.

8.  Andreas Bystrm noticed that tags were not being generated 
	for To headers in in 
	MessageFactory.createResponse(String,Request,
		contentType,contentSubtye)

9. Fixed a bug in MessageFactory.creatResponse when the body is specified 
 	as a byte (I was converting to a string).

10. Fixed a bug in parsing Supported headers.

11. Niklas Uhrberg <niklas.uhrberg@utfors.se> requested thread pooling be
   added to the stack.

12. Niklas Uhrberg <niklas.uhrberg@utfors.se> requested  a mechanism to
   limit the max # of simultaneous tcp connections that can be handled
    by the stack.

13. Discovered a bug in the urlParser for parsing http urls..

14. Changed the class hierarchy for RequestLine and StatusLine (no longer
  	derive from SIPHeader class).

15. Added an abstract method encodeBody() in the SIPHeader().
    Removed the abstract method encode().

16. Changed the encode() methods for headerList to use name: comma separated
    value list when ever possible (more space efficient).

17. Juan Martin and Andread Bystrom noticed that cancel was not being 
    properly handled in the JAIN stack. 

18. Juan Martin noticed a problem in tag assignment in sendBye()

19. Fixed a garbage collection problem in JAIN stack.

20. Jeff Keyser added response generation methods to 
	gov.nist.sip.msgparser.SIPRequest

21. Jeff Keyser added a method "isReliable()" to the MessageChannel class.  
	This will be required by the transaction layer to decide 
	whether to retransmit messages or not.

22. Jeff Keyser added a method "getViaHeader()" to 
	the MessageChannel class.  This will be required by the transaction 
	layer so it can supply a Via header with a "branch" parameter.


23. Jeff Keyser added a method "createMessageChannel()" to the 
		MessageProcessor interface

24. Added isRequest/isResponseHeader check in SIPMessage.java and
	made a call to this method from SIPMessageFormatter.newSIPRequest
	and SIPMessageFormatter.newSIPResponse as well as 
	SIPRequest.createResponse 

25. Fixed a bug in parsing credentials for proxy_authenticate header.

26. Fixed bug in tag assignment when a provisional response with a tag is
	received by the JAIN stack.

27. Added method to generate a new request from  a SIPRequest 
	(useful for when you just want to modify an incoming request and 
	generate a new request from it).

28. bis 09 compatibibility hacks for transaction identification using 
	the magic cookie and branch identifier.

30. Performance improvements in the parser.

31. bis 09 compatibility hacks on tag assignment and creation of dialogs

32. Fixed bug in encoding of Credentials (parameters are comma separated).

33. Added an OutgoingMessageHook to allow for extension headers to be
 	added to JAIN responses.

34. Check for null dialog record when generating a bye request.

35. Fix the responder JAVA service examples.

36. Added a transaction layer contributed by Jeff Keyser

37. Added a DNS Router contributed by Jeff Keyser

38. Modified the JAIN layer to make the transaction model configurable.

39. Removed all static structures from the JAIN implementation so now
    you can imbed multiple stacks in a single application (this feature
    has yet to be tested).

40. Removed examples/proxy

41. Added tools/jainproxy

42. Added examples/instantmessaging

43. Added ethereal trace viewer code contributed by Tim Bardzil

44. Fixed JAIN proxy TCP bug.

Revision K
----------

1. Added javax.sdp (preliminary) based on SDP API JSR 141

2. Fixed and changed the UDP and TCP message channel interface.

3. Fixed TCP processing for correct logging of messages.

===========================================================================
Related
-------
G.K. Shashidhara  (mailto:gkshashidhara@yahoo.com) has undertaken porting
NIST-SIP to c++ (current status of this effort is not known -- address 
queries to him).

Jakob Schlyter has developed a Redirector based on the NIST implementation
of JAIN-SIP. See http://www.crt.se/~jakob/sip/

The SIPTREX project (www.siptrex.net) uses an early version of the the 
NIST-SIP parser. See http://www.siptrex.org/ 

The ETSI conformance test tool uses the NIST-SIP parser.
See http://www.etsi.org/ptcc/ptccsip.htm

The bone-phone project 
http://cvs.berlios.de/cgi-bin/cvsweb.cgi/BonePhone/?cvsroot=bonephone
uses NIST-SIP


