Changes:
----------------------------------------------------
2008/10/11 - Greg Dorfuss - http://mhspot.com
-added 302 redirect support

2008/03/10 - Greg Dorfuss - http://mhspot.com
-changed logging system to log4j
-added inbound RFC2833 support - existing useragents and RtpStreamReceiver don't support it though
-fixed sdp mapping bug
-fixed invite listener being lost causing no more inbound connections

28/2/2006
-add: ExtendedCallListener,ExtendedCall,CallListenerAdapter,UserAgent: new ExtendedCallListener methods onCallTransferAccepted() and onCallTransferRefused()
-change: ExtendedCallListener: changed method onCallTransferFailure(call,code,reason,msg) into onCallTransferFailure(call,reason,notify)

23/2/2006
-fix: GraphicalUA: command-line option 'call_to' was disabled: re-activated
-change: GraphicalUA,CommandLineUA: renamed option '-o' to '-n'
-add: GraphicalUA,CommandLineUA: added option '-o' for setting the outbound_proxy

14/2/2006
-change: InviteDialog: renamed method isCallActive() to isSessionActive()

12/2/2006
-change: ParametersHeader: renamed method getParameters() to getParameterNames()
-change: header: renamed class ParametersHeader to ParametricHeader
-change: BaseMessageFactory: removed parameter body from method createResponse(req,code,reason,contact)
-change: BaseMessage: removed method setNullBody()

11/2/2006
-add: dialog: new class DialogInformation that collects basic Dialog attributes (URLs, tags, route, etc.) 
-change: Dialog: it now extends DialogInformation  
-change: Dialog,InviteDialog: listener is automatically added and removed within metods changeStatus() and update()   
-change: SubscriberDialog: minor changes 
-change: NotifierDialog: minor changes 

4/2/2006
-change: SipURL: minor changes to costructors; port is added only if >0
-change: dialog: changed name and visibility of methods that manage the dialog state

29/1/2006
-add: UserAgentProfile: new method updateUserAddress()
-change: ua: auto answer mode became -y
-change: AckTransactionServer: renamed method onAckSrvTimeout() to onSrvAckTimeout()
-change: CallListener: in method onCallIncoming() changed order of caller and callee parameters
-change: InviteDialogListener: in method onDlgInvite() changed order of caller and callee parameters
-change: UserAgentListener: in method onUaCallIncoming() changed order of caller and callee parameters
-change: org.zoolu.sip.transaction: minor changes to transaction initialization and logs
-change: Transaction: renamed attribute 'method' to 'request'
-change: InviteDialog: added costructor for an already received INVITE request (for server-side InviteDialog)
-change: NotifierDialog: added costructor for an already received SUBSCRIBE request

28/1/2006
-change: Dialog: method update() automatically updates the dialog_id used as listener key with the SipProvider; Dialog now implements SipProivderListener 
-change: SubscriberDialog, NotifierDialog: changed the implementation  

23/1/2006
-add: header: added headers ListHeader, AllowEventsHeader
-change: AllowHeader: now it extends ListHeader
-change: SipHeaders: added "Allow-Events"

21/1/2006
-fix: Random: fixed an error in method nextHexString()

20/1/2006
-change: ServerEngine,Proxy: changed the rule for performing loop detection: added temporary Loop-Tag header filed
-change: SipProvider: minor changes within method pickBranch(msg)

19/1/2006
-change: ServerEngine: changed the rule for performing loop detection: no detection for messagres the server is responsible for

18/1/2006
-change: ServerEngine: new method isResponsibleFor(msg) replaces method isTargetOf(msg)

17/1/2006
-change: ServerEngine: renamed method isForLocalServer() to isTargetOf()
-change: ServerEngine,Proxy: renamed method matchesDomainName() to isResponsibleFor()

1/1/2006
-change: ServerEngine,Proxy: renamed method isLocalDomain() to matchesDomainName()
-change: ServerEngine,Registrar: renamed method localDomains() to getLocalDomains()

29/12/2005
-add: SipURL: added methods hasLr() addLr() for processing param "lr"

25/12/2005
-change: Dialog: renamed T_Client and T_Server to UAC and UAS respectively
-change: InviteDialog: close the dialog when no ACK is received
-change: InviteDialog: close the dialog when no response is received also for a re-INVITE

21/12/2005
-change: RtpStreamSender: changed the synchronization method: the frame time is now simply calculated from frame length and sample rate 
-change: RtpStreamSender: added attribute sync_adj (milliseconds) that accellerates the frame rate respect to the nominal value in order to compensate program latencies 
-change: JAudioLauncher: now it forces synchronization when capturing system audio
-change: UserAgentProfile: changed default attribute value of audio_frame_size from 500 to 160

17/12/2005
-fix: ServerEngine: when validating an ACK request do not generate error response
-fix: ServerEngine: do not detect a loop for requests with Route header field 
-fix: AckTransactionServer: 2xx retransmission did not use exponential backoff; now it starts after T1 seconds and doubles for each retransmission until it reaches T2 seconds (as defined in RFC3261)

11/12/2005
-change: ServerProfile: renamed parameter pstn_gateways to phone_routing_rules
-fix: Proxy,StatefulProxy: now in case of is_open_proxy=false does not filter messages with to_url corresponding to local users 
-add: AuthenticationServer,AuthenticationServerImpl: added Proxy-Authentication
-add: Proxy,StatefulProxy: added Proxy-Authentication
-add: ExtendedInviteDialog,ExtendedCall,UserAgent: added proxy and server authentication
-fix: UserAgent: fixed JMFAudioLauncher and JMFVideoLauncher costructor declaration with java reflection ('int' parameters were not declared java.lang.Integer.TYPE)

10/12/2005
-change: KeepAliveSip,KeepAliveUdp: moved to package local.net
-add: SipProvider: added option 'log_all_packets'; defalut value is false (no)
-change: SipProvider: improved message logs
-fix: Transaction: the t_number value ,that is the transaction's sqn, was not incremented; fixed
-change: Proxy: sends a 484 if no username is set in non-REGISTER requests addressed to local server 
-add: Random: new methods nextBytes(len), nextString(len), nextNumString(), nextHexString()
-change: SipProvider: used method Random.nextNumString(len) for random token generation
-add: server: added new interface RoutingRule; added new class PrefixRoutingRule
-change: ServerProfile,Proxy: use new class PrefixRoutingRule

9/12/2005
-add: ServerEngine,Proxy: implementted loop detection, distinguishing spirals, as suggested in RFC3261
-change: AddressResolverKeepAlive,Makefile: updated AddressResolverKeepAlive and Makefile with new KeepAliveSip

4/12/2005
-add: KeepAliveUdp,KeepAliveSip: new classes media.KeepAliveUdp and media.KeepAliveSip 
-add: RegisterAgent: added support for SIP keep-alive (by means of KeepAliveSip) 
-add: CommandLineUA,GraphicalUA: added support for SIP keep-alive when registering 
-fix: UserAgentProfile: 'expires' value eas not read from configuration file; fixed.
-change: SipStack: attribute expires renamed to default_expires
-change: ServerProfile: new attribute expires
-add: SocketAddress: added costructor SocketAddress(String)
-change: SipProvider: attributes outbound_addr and outbound_port replaced by outbound_proxy
-change: ServerProfile,Registrar: pstn_gw_addr,pstn_gw_port,pstn_gw_prefix have been generalize by a list of pairs {pstn_gateway,pstn_prefix} that are the Vectors pstn_gateways and pstn_prefixes

3/12/2005
-change: RegisterAgent: renew_time for succesive re-registrations is updated with the expire value(s) in the 2xx response

1/12/2005
-fix: Registrar: do not generate a 501 response for ACK methods

28/11/2005
-change: AuthenticationService,AuthenticationServiceImpl,LdapAuthenticationServiceImpl: removed user attributes 'rand' and 'seqn'
-add: AuthenticationServiceImpl: file aaa.db now can contain passwd in plain text (passwd=<passwd>)

27/11/2005
-change: AuthenticationServer,Registrar: AuthenticationServer becomes an interface
-add: AuthenticationServerImpl: new class 

24/11/2005
-change: UserAgentProfile,: renamed attribute audio_rate to audio_sample_rate
-add: UserAgentProfile,JAudioLauncher,UserAgent: in UserAgentProfile new attributes audio_sample_size and audio_frame_size

21/11/2005
-change: Dialog: status becomes protected (it was private)

19/11/2005
-fix: JAdudioLauncher: fixed a problem with DatagramSocket: the socket was not explicitly closed when halting audio; fixed
-add: UserAgentProfile,CommandLineUA,GraphicalUA: added command-line parameters -d (debug level) and --log-path 

18/11/2005
-change: UserAgent,UserAgentProfile,CommandLineUA,GraphicalUA: added auto-accept time; UserAgentProfile.auto_accept replaced by UserAgentProfile.accept_time 

13/11/2005
-change: RtpStreamSender,RtpStreamReceiver: by default, the debug mode is disabled (DEBUG=false)
-change: RtpStreamSender,RtpStreamReceiver: attribute DEBUG is now public and not final
-change: RtpStreamReceiver: attributes BUFFER_SIZE and SO_TIMEOUT are now public
-change: RtpSocket: now method close() does not close the DatagramSocket
-add: media: new classes MixerLine, SplitterLine, Mixer, ExtendedPipedInputStream, ExtendedPipedOutputStream

12/11/2005
-add: added new class AudioOutputStream for audio conversion and output (javax.sound contains only AudioInputStream, and no conversion seems to be possible in output)  
-change: AudioOutput: new AudioOutput class, without the internal Thread for audio playback  
-change: UserAgentProfile: removed SipStack initialization (and dependaces)
-change: UserAgentProfile: added costructor UserAgentProfile()

11/11/2005
-add: GraphicalUA, CommandLineUA: use audio as default media in case of..
-fix: GraphicalUA, CommandLineUA: some command-line option was not used (such as transfer_to); fixed
-add: GraphicalUA, CommandLineUA: new command-line parameters: -p, --via-addr, -m, --username, --realm, --passwd, --from-url, --contact-url
-change: GraphicalUA: the window title now reports the registered url (AOR), or (in case of registration failure) the contact url

3/11/2005
-change: a.cfg,b.cfg: bin_vic set to mbone/vic (inseted of mbone/rat!)
-change: UserAgent,CommandLineUA,GraphicalUA: AudioInput.initAudioLine() moved from CommandLineUA,GraphicalUA to UserAgent
-fix: Redirect: fixed a casting problem caused by a non-updated use of getTargets() method 
-fix: UserAgent: patch to make rat working: in case of rat, do not load and play audio clips
-fix: Makefile: 'make server' did not include the local.auth package; fixed   

16/10/2005
- fix: Registrar.java: myclass=Class.forName(authentication_service_class) in place of myclass=Class.forName(profile.authentication_service);
- add: UserAgentProfile, UserAgent: added realm parameter; if not defined it is taken from contact_url
- change: UserAgentProfile, UserAgent: contact_user becomes username; if not defined it is taken from contact_url
- change: UserAgent: used reflection to create a JMFAudioLauncher or JMFVideoLauncher
- change: AuthenticationServer(): removed methods getRealm(), getQopOptions(), getRand()
- change: AuthenticationServer(): removed parameter 'authentication_scheme' from the costructor; only 'Digest' is currently supported

9/10/2005
- change: Registrar: use reflection to init location_service and authentication_service
- add: CSeqHeader: added method incSequenceNumber()
- fix: RegisterAgent: when it tried to retransmit a deregistration (after had received 401) the Expires value was not set to 0; now fixed
- add: RegisterAgent: maximum number of authentication attempts is added
- change: RegisterAgent: after 401 responses, register methods are resent with the same Call-Id (and CSeq+1)

8/10/2005
- fix: AuthenticationServer: in case of authentication failure the Registrar sends a 403 instead of 400
- add: local.server: new interface Repository 
- change: LocationService: it now extends Repository
- change: AuthenticationService: AuthenticationService renamed to AuthenticationServiceImpl
- add: local.server: new interface AuthenticationService, extending Repositoy
- change: LocationServiceImpl: UserBinding becomes private; removed method getUserBinding()
- change: UserBinding: it becomes part of LocationServiceImpl
- change: LocationServiceImpl, AuthenticationServiceImpl: removed attribute 'default_fext'
- add: ServerProfile: added new parapeters: is_open_proxy, location_service, authentication_service
- add: Proxy, StatefulProxy: relay only message for or to local user if 'is_open_proxy' is not set
- add: AuthenticationServer: added method getAuthenticationInfoHeader()
- change: Registrar: used method AuthenticationServer.getAuthenticationInfoHeader()
- change: Makefile, local: package auth renamed to authentication 

3/10/2005
- change: SipProvider: after call onReceivedMessage() for promisque mode, check the message validity (it could be changed for dropping..)

21/9/2005
- fix: SipProvider: when halted, it resets the listener tables, without setting them to 'null'; this overcome the Exception the could occured when trying to uses attribute 'listeners' or 'exception_listeners' after method halt() is called

19/9/2005
- fix: InviteDialog: the reception of a re-invite was not handled correctly (only 100 trying was sent); fixed 
- fix: CommandLineUA, GraphicalUA: re-invitation option was not handled; fixed 

11/9/2005
- add: InnerTimerST: new class InnerTimerST for executing all InnerTimerSTs in a single thread (it uses class java.util.Timer)
- add: SipStack: new parameter single_timer (default value is 'false')
- change: Timer: it uses InnerTimer or InnerTimerST based on new static attribute Timer.SINGLE_THREAD
- change: SipStack: it set Timer.SINGLE_THREAD to SipStack.single_timer attribute value
- change: Transaction: trasaction states are now int (instead of String)
- change: Dialog: dialog states are now int (instead of String)

10/9/2005
- add: BaseMessageOtp: new class BaseMessageOtp (one-time-parsing version of BaseMessage)
- add: ExceptionPrinter: new class org.zoolu.tools.ExceptionPrinter and j2me.ExceptionPrinter
- change: Log: it now uses class ExceptionPrinter
- change: SipProvier: replaced method Log.toHexString(long) with Log.toString(long,16) (for compatibility with j2me) 
- add: Makefile: added 'net' target 
- change: SipResponses, BaseSipResponses: method init() becomes protected; attribute is_init becomes private
- change: AuthenticationHeader: method isQuotedParameter(String) was final (no reason), now is static
- add: MessageDigest: new abstract class MessageDigest
- add: SimpleDigest: new class SimpleDigest
- change: MD5: now it extends MessageDigest
- change: SipProvider: it uses SimpleDigest in place of MD5

8/9/2005
- add: BaseMessage: added methods getRecordRouteHeader() and removeRecordRouteHeader()
- fix: BaseMessage: getViaHeader(), getRecordRouteHeader(), getRouteHeader(), getContactHeader() have retuned multiple header fields in case of comma-separated fields: fixed

6/9/2005
- change: ua: renamed class VisualUA to GraphicalUA
- change: mjsip-cfg.txt: updated the example of configuration file server authentication attributes
- change: SipProvider: checks whether ttl is present before getting it from request-uri
- change: SipProvider: if maddr is used, add maddr and ttl to the top most Via field

5/9/2005
- change: RegisterAgentListener: added attribute RegisterAgent in callback methos
- change: UserAgentListener: added attribute UserAgent in callback methos
- change: MessageAgentListener: added attribute MessageAgent in callback methos

3/9/2005
- change: tools: renamed class OTP to MD5OTP
- add: MessageAgent: added method send(recipient,subject,content_type,content)
- change: MessageAgentListener: renamed onReceivedMessage() to onMaReceivedMessage()
- add: MessageAgentListener: added method onMaDeliveryFailure()
- change: package domotica: completly updated
- change: Makefile: domotica
- add: Archive: new public methods getFileURL(file) and getJarURL(jar,file)
- change: Archive: methods getImage(jar,file), getImageIcon(jar,file), getInputStream(jar,file), getAudioInputStream(jar,file) replaced by getImage(url), getImageIcon(url), etc.

31/8/2005
- change: BaseMessage: getContacts(), getVias(), getRecordRoutes(), and getRoutes() now return null if no such header fields are found
- fix: Register: in case of no Contact header field, it returns 200 Ok with the list contacts (fetching bindings)

28/8/2005
- add: server: added class AuthenticationServer
- add: ServerProfile: new parameter 'authentication_db'
- change: server: removed class AuthenticationRegistrar
- add: Registrar: added support for message authentication

28/8/2005
- change: SipProvider: removed method setViaAddress()
- add: UserAgentProfile: new parameter 'passwd'
- add: RegisterAgent: added support for digest-authentication
- add: ServerProfile: added parameters 'do_authentication' (and 'do_proxy')
- add: Makefile: ua: added DigestAuthentication
- change: AuthenticationService: added user check
- change: AuthenticationHeader: LWS_SEPARATOR=" "
- add: added methods add/set/hasQopOptionsParam()

26/8/2005
- change: ServerEngine: method validateRequest(msg) returns an error message (or null) in place of an error code (or 0)

25/8/2005
- change: AuthHeader: AuthHeader renamed to AuthenticationHeader

24/8/2005
- add: Makefile: server: added DigestAuthentication
- change: SipProvider: pickBranch(), pickCallId(), pickTag() now use org.zoolu.Random.nextLong() instead of MD5.digest()
- add: BaseMessageFactory: added method create2xxAckRequest(dialog,body)

23/8/2005
- add: AuthHeader: added parameter "nextnonce"
- change: server: removed class AkaRegistrar
- change: server: renamed class AuthenticationServer to AuthenticationService

22/8/2005
- fix: ServerProfile: domain-names 'auto-configuration' value didn't have any effect, fixed
- add: InviteDialog, InviteDialogListener: new methods onDlgByeSuccessResponse(dialog,code,reason,msg) and onDlgByeFailureResponse(dialog,code,reason,msg) in place of method onDlgByeResponse(dialog,msg)
- change: InviteDialog, InviteDialogListener: renamed methods onDlgInviteProvisionalResponse(), onDlgInviteSuccessResponse(), onDlgInviteRedirectResponse(), onDlgInviteFailureResponse()
- add: BaseMessage: getProxyAuthorizationHeader(), getProxyAuthenticateHeader(), etc.
- add: BaseMessage: getAcceptHeader(), getAlertInfoHeader(), getAllowHeader(), etc.
- fix: AttributeField: getAttributeValue() returned ':<attribute-value>'; fixed
- add: new class local.auth.DigestAuthentication

21/8/2005
- add: UserAgent, UserAgentProfile, JAudioLauncher: audio can be read or written from/to a selected file

20/8/2005
- change: CommandLineUA: new method run(), simplified method main(), some other improvements
- change: VisualUA: new method run(), simplified method main()

18/8/2005
- change: ua: renamed classes RegisterUA and RegisterUAListener into RegisterAgent and RegisterAgentListener
- add: ua: new class CommandLineUA with static main method and call-back methods of class UserAgent
- change: bin: new scripts uac.bat and uac.sh
- add: ua: new class CommandLineMA with static main method and call-back methods of previous class MessageAgent
- add: ua: new class MessageAgentListener
- change: bin: new scripts ma.bat and ma.sh

15/8/2005
- add: SipProvider: added method addSipProviderListener(listener) equal to addSipProviderListener(ANY,listener)
- change: Call: ExtendedCall: removed costructors Call(sip_provider,from_url,contact_url,sdp,call_listener)
- change: Call: removed method getInviteDialog()
- add: Call: added method isOnCall()
- add: Transaction, Dialog: added method getSipProvider()
- add: Transaction, Dialog: added costructors Transaction(SipProvider) and Dialog(SipProvider)
- change: MessageFactory, BaseMessageFactory: removed parameter sip_provider in methods that have a dialog
- change: InviteDialog: attribute transaction substituted by invite_ts, ack_ts, and bye_ts

24/7/2005
- change: UdpSocket: costructor UdpSocket() becomes public
- add: media: added new classes UdpStreamReceiver and UdpStreamSender

21/7/2005
- fix: EndPointHeader: added "expires" to the ENDPOINT_PARAMS list, in order to overcome the problem of SIP (SIP bug?) when dealing with both URL parameters and header parameters

19/7/2005
- fix: ParametersHeader: fixed method removeParameter(String)

18/7/2005
- add: ContactHeader: added method removeExpires()

10/7/2005
- add: Assert: new class Assert
- change: Log: removed costructor Log(label,debuglevel)
- change: added reference to GPL license into SipProvider.java and SipStack.java files
- change: modified reference to LGPL license into MessageAgent.java file
- fix: AuthenticationInfoHeader: fixed hasParameter() getParameter() methods
- add: ProxyAuthenticateHeader, ProxyAuthorizationHeader, BaseSipHeaders: added new header
- add: AuthHeader: added methods getAuthScheme(), getParameters()
- add: AuthHeader: added LWS_SEPARATOR static attribute
- add: AuthHeader: added array of QUOTED_PARAMETERS; added methods addQuotedParameter(), addUnQuotedParameter(); changed method addParameter()
- change: ParametersHeader: method getParameters() now return a void Vector in case of no parameter (instead of null)
- change: Parser: renamed getWordUnquoted() into getWordSkippingQuoted(); renamed goToUnquoted() into goToSkippingQuoted()

9/7/2005
- add: RegisterUA, RegisterUAlistener: new classes
- change: UserAgent: now it uses RegisterUA for handling registrations
- fix: SipProvider: when sending through udp transport it erroneously returned conn_id!=null: now fixed
- change: MessageAgent: new version of command line MessageAgent
- change: UserAgent: now used inline reInvite() and transferTo() threads instead of nested classes
- change: Log: removed static method timestamp()
- change: Log: removed methods verifyThat(boolean), assertThat(boolean), and printWarning()

7/7/2005
- fix: SessionDescriptor: fixed the handling of session-type attributes

5/7/2005
- change: removed package org.zoolu.sipx; modified Makefile

3/7/2005
- add: new class j2me.BaseMessage

29/6/2005
- change: Parser: removed methods isSpace(); changed method subParser(len)
- change: SipParser: renamed and changed methods getHeader(), getHeader(hname), getDate(), getSipURL(), getNameAddress(); now they go to the end of the objects read or to the end of parser

29/6/2005
- change: Parser, SipParser: new costructor Parser(StringBuffer)
- change: BaseMessage, Message: String replaced with StringBuffer

19/6/2005
- fix: UserBinding.getData() fixed (it didn't return data)
- change: Makefile: now make mjsip does not obfuscate sipx.jar
- change: org.zoolu.sip.transaction: Transaction.startTransaction() method renamed to TransactionClient.request() or TransactionServer.request()
- change: Transaction: terminateTransaction() method renamed to terminate()
- change: TransactionServer, InviteTransactionServer: automatically starting the transaction with costructor TransactionServer(SipProvider,Message,Listener)
- change: InviteTransactionServer: new parameter auto_tryng in costructor InviteTransactionServer(SipProvider,Message,boolean,Listener)
- change: InviteTransactionServer: method auto100Tryng(bool) renamed to setAuto100Tryng(bool) 
- change: AckTransactionServer: startTransaction() method renamed to respond()

18/6/2005
- change: LocationServiceImpl: added user check, before getting user's data
- change: LocationService: removed public method userToString(user)

10/6/2005
- fix: TransactionServer: fixed the initializiation of transaction_id in costructor TransactionServer(SipProvider,String,TransactionServerListener)

2/6/2005
- add: ExpiresHeader: added method getDate()
- change: getDeltaSeconds() now returns int; changed implementation of getDeltaSeconds()
- add: ContactHeader: added method getExpiresDate()
- change: ContactHeader: getExpires() now returns int; changed implementation of getExpires() and isExpired()
- change: UserBinding: getExpires() renamed getExpirationDate(), and it now use getExpiresDate()
- change: LocationService, LocationServiceImpl: getUserContactExpire() renamed to getUserContactExpirationDate() 
- change: Registrar: updateRegistration() now returns directly the response message
- add: Registrar: updateRegistration() limits the expire value (lesser than SipStack.expires)
- add: Registrar: set the contact urls and expire values in REGISTER responses
- add: G711, RtpStreamTranslator: in local.media added classes G711 and RtpStreamTranslator

29/5/2005
- change: AudioSender, AudioReceiver: added command-line parameter '-U' for PCMU codec
- change: UserAgent, VisualUA: audio file is now 'audio.wav' (expected in 8000 mono PCMU format)
- add: AudioFormat: added method formatYYYYMMDD() for "YYYY-MM-DD hh:mm:ss.mmm" format
- change: CallLoggerImpl: now it uses AudioFormat.formatYYYYMMDD()
//- add: RtpStreamSender: added costructor with parameter 'src_port'
- fix: JAudioLauncher: when sending audio tone or file, now it uses the DatagramSocket opened on specific local_port
- fix: UserAgent, VisualUA: when sending audio tone or file, do not init (and get use of) the javax sound
- change: SipStack: NO_UA_INFO and NO_SERVER renamed to NONE 
- change: SipProvider: NO_OUTBOUND renamed to NONE 

28/5/2005
- change: Timer: removed the list of listener, removed methods addTemerListener(), removeTimerListener(), changed Timer costructors
- change: ExtendedSipProvider: now it uses ExtendedAddressResolver supporting keep-alive functionality 
- change: AddressResolver: setBinding(): do not remove a binding if it is going to be set again
- change: AddressResolver: periodically refreshes the address cache and removes the expired bindings 
- change: ServerProfile: renamed do_log_calls to call_log

24/5/2005
- change: SipStack: parameter expires becomes an int (it was a long)
- add: presence: new classes SubscriberDialog and NotifierDialog
- add: Event: new added parameters 'id'
- add: sipx: new SubscriptionStateHeader
- add: Messageadd: added method isSubscribe()
- change: MessageFactory: added parameter 'id' when creating SUBSCRIBE and NOTIFY methods

23/5/2005
- add: Parser: added static method equalIgnoreCase(char,char)
- add: Parser: added methods startsWith() and startsWithIgnoreCase()
- add: Parser: added methods indexOfIgnoreCase() and goToIgnoreCase()
- change: SipParser: changed indexOfHeader(String): now it is case-unsensitive
- change: SipProvider: Exceptions throwed by callback method onMessageException() are now captured

19/5/2005
- add: SessionDescriptor: added methods addAttribute(AttributeField attribute), addAttributes(Vector attribute_fields), removeAttributes(), hasAttribute(String attribute_name), getAttribute(String attribute_name), getAttributes(String attribute_name), getAttributes()

15/5/2005
- change: LocationService: removed method getName()
- change: LocationServiceImpl: renamed LocationServiceImplementation to LocationServiceImpl
- change: CallLoggerImpl: new CallLoggerImpl with setup-time and call-duration records (the previous version has been saved in CallLoggerImpl.java.saved)

14/5/2005
- add: SessionDescriptor: added method removeMediaDescriptor(String)
- add: UserProfile, UserAgent: added various new configuration parameters
- change: UserAgent: addAudioDescriptor becomes addMediaDescriptor
- add: Configure: added static attribute 'NONE'
- add: InviteDialog: dialog states become public (they were private)
- change: UserAgent, VisualUA: some changes on UA configuration and startup
- add: VisualUA: added redirect, automatic accept, transfer, and re-invite features
- add: server: added new class CallLogger
- add: Proxy, ServerProfile: added CallLogger support
- add: Log: new costructor Log(filename,logtag,loglevel,logsize,append)

13/5/2005
- change: Dialog, InviteDialog: removed method init(side,msg); used method update(side,msg) instead
- change: Dialog: attributes CLIENT and SERVER renamed to T_CLIENT and T_SERVER
- change: removed all DEBUG_PERFORMANCE statements
- change: renamed class ProxyState to StatefulProxyState

12/5/2005
- change: Dialog: dialog_sequence becomes dialog_counter
- change: Transaction: transaction_sequence becomes transaction_counter
- change: Dialog, InviteDialog: moved several attributes and methods from InviteDialog to Dialog

11/5/2005
- change: NameAddressHeader, EndPointHeader: now it is EndPointHeader: that remove eventual 'tag' or other EndPointHeader parameters (ENDPOINT_PARAMS) from returned NameAddress
- change: Dialog, InviteDialog: renamed class DialogState to Dialog; InviteDialog noe extends Dialog (instead of use it as attribute)

10/5/2005
- add: SipStack, SipProvider: current date and stack version
- fix: NameAddressHeader: indexOfFirstParam(): in case of no '>'-tag, do par.setPos(0).goToUnquoted(';').skipChar().skipWSP();
- change: ParametersHeader: removeParameter(String): moved up (within the 'if' clause) and removed the line: par=new SipParser(header,par.getPos());
- add: SipURL: added removeParameters() and removeParameter(String) methods
- fix: NameAddressHeader: remove eventual tag parameter from name-address
- add: SipProvider: added SipStack version and current time in the event log

28/4/2005
- add: SipStack, SipProvider: new parameter 'force_rport' that force the rport on every incoming requests
- change: SipProvider: renamed hasRport() into isRportSet()
- change: mjsip: new version: 1.5.1