
Session synchronisation at initiation using tag NextExpectedMsgSeqNum (789)

1.15.1
------
Support for python 3.

Native SSL support.

Support micro and nanosecond precision on timestamps.

Use std::unique_ptr instead of auto_ptr when available.

Use boost::shared_ptr if std::shared_ptr not available.

Support for Visual Studio 15 (2017).

Custom data fields can be decoded in header and trailer.

Can decode data fields in message body that contain more than 16 fields.

FieldMap iterators changed to non-const.

Message generator works with recursive components.

Preserve order of messages when resending.

Can configure a source host and port to choose routes.

Addressed several thread safety issues.

Regenerated messages against latest repository.

Faster sorting of fields.

Faster double/string conversion with Florian's Loitsch "double-conversion."

Replaceed std::multimap with std::vector for fields for improved performance.

Detect and throw InvalidMessage when data field length contains junk.

Fixed issues with integer_to_string()

Bug fix for large messages.

getField/setFields deprecated, use getTag/setTag.

Fixes for SunOS/sparc/64 bit.

Groups in headers.

1.14.3
------
Fixed buck in SocketConnection where recv result stored in signed value.

Added ruby api to RubyGems.

All Python and Ruby tests pass again.

1.14.2
------
Test for std::shared_ptr and std::tr1::shared_ptr.  Allows us to compile on
gcc 4.1-4.2, and with anaconda python.

Distribute FIX specs with pip package.

Use all detected compiler flags when building ruby native library.

1.14.1
------
Replaced libxml2 and MSXML dependencies with embedded pugixml.

Fixed all warnings from -Wshorten-64-to-32.

Added python api to PyPi.  Can be installed with 'pip install quickfix'.

Fixed memory leak in SessionFactory when creating DataDictionaries.
shared_ptr is used to track the objects so we don't have to.

1.14.0
------
Major performance improvement sending/receiving messages.  Thanks to 
Viktor Pogrebnyak for a great patch.

Added getFieldIfSet and getIfSet methods.  No longer need to check for a
field and pull it out in two steps.

UseLocalTime=Y works again.

Improvement in how DataDictionaries are initialized makes starting up with
a large number of sessions much faster.

Generator will generate a message defined in the spec even if it has no fields.
This was preventing the XMLnonFIX message from being generated in the various
APIs.

Added ValidateLengthAndChecksum. Allows you to ignore the length and checksum
fields on incoming messages. Accept the message anyway. A wild free for all.

Added FIX 5.0 sp1 and sp2 support to MessageCracker.

SocketReuseAddress, SocketNoDelay, SocketSendBufferSize, and SocketReceiveBufferSize
config settings can be overriden on a per session basis.

Field containing number of groups will be removed if all instances of 
a group are removed from the message.

SocketConnection would block other sessions if it was unable to connect
immediately.  Brian Crowell submitted a patch that makes the connection
call non-blocking.

Initiator started before StartTime was doing an unecessary logout and 
disconnect.

MessageCracker will not cast non-const messages to const.

Polling was kind of broken.  Fixed.

Fixed bug where LogonTime does not fall between StartTime and EndTime when
days are used.

Fixed bug where port was not being correctly scoped in the DEFAULT section
of the config file.

All data is read from the socket before the engine begins to parse messages.

Socket will make a better attempt to determine if a full message is available
on the socket before determining if a logon failed.  Before it could potentially
fail on a partial message that was in the middle of transmission.

Header and Trailer are now distinct objects, instead of typedefs to FieldMap.

Ambigous and confusing name getValue on the Field class has been renamed to 
getFixString. This return a value such as 55=AAPL.

Message groups can be parsed even if there is no delimiter present.  A new
group is detected if the parser encounters any duplicate field.

Fixed potential crash when stopping an initiator that has not yet started.

When calling backup() on a .NET log, it was instead invoking clear() in the
underlying C++ class. Fixed.

Fallback ports were not being parsed correctly for fallback connections. Fixed.

Not all constructors in the ThreadedSocketConnection were properly initializing
the log object.  Fixed.

Generate XML (and source) files from latest publicly available FIX repository.

Alternate C++ allocators will no longer be automatically chose. They can be
manually selected with configure --with-allocator.

MySQL and PostgreSQL are detected using standard m4 when running configure.

Environment variables RUBY and PYTHON are used to find which version of
instance to use when running configure.

Fixed/standardized various issues with python library deployment.

If session is disabled, it will immediately disconnect without sending any
messages.

Added support for visual studio 11 and 12.

Removed C# library.  Use QuickFIX/n.

Ruby API works with ruby 1.9.x

1.13.3
------
Added support for FIX 5.0 sp1 and sp2

Fixed bug with ResetSeqNumFlag going out but not coming back.
Logon will now be processed correctly even if field is absent
if sequence number is set to 1.

Fixed bug where data dictionary settings in the default section
were being ignored. Mostly manifested itself by doing validation
the user didn't want done, such as user defined field validation.

Fixed initialization errors with OdbcConnection which caused some
problems connecting to the database.

Updated the generator.  Should be more consistent.  Deprecated fields
are not longer necessary as they are now generated along with current
fields.

1.13.2
------
Fixed bug where messages containing repeating groups would 
not be properly resent under a FIXT.1.1 session

Fixed bug where group fields would not be in the correct order
after copying a group object.

Fixed compilation error with OdbcStore

Updated m_stop variable in initator and acceptor to true
to better reflect initial state.

Fixed issue with reconnect when acceptor not available and timeout
interval is reached.

Objects take in timestamps instead of generating them themselves
to make them more testable.

Generated python and ruby APIs no longer rely on pulling in
FIX namespace so there are no clashes.

1.13.1
------
Fixed install script under unix systems. The new FIX 5.0 and 
FIXT 1.1 headers were not being installed.

Fixed compiler errors under windows due to typedefs conflicting
with #defines.

Fixed exception being thrown when no LogFactory is provided.

User defined UTC timestamps will have milliseconds now.

Fixed memory leaks and other bugs in odbc interfaces.

Fixed exception caused by peername returning a null char*.

Corrected installation problems when DESTDIR is provided.

QuickFIX should build on netbsd, though it is not yet
officially supported.

Perfomance optimization for .NET messagecrackers.


1.13.0
------
Support for FIX 5.0 and FIXT 1.1 session transport.

Added solution files for Visual Studio 2008 and 2010.

Compiles under newer versions of gcc.

JNI API is no longer.  QuickFIX/J is recommended.  JAR file
included with quickfix distribution for your convenience.

Full support for 64 bit systems.

Switched from proprietary unit testing framework to UnitTest++.

Added settings for send and recieve buffer size on sockets.

Header and Trailer generated instead of hardcoded.

Groups can be queries against DataDictionary.

ConfigError will be generated if session is defined twice. Several other
improvements to recognizing bad configuration files.

PersistMessages is true by default.

identifyMessage exposed to .NET API.

Fixed some potential deadlock scenarios with socket implementation.

Added support for backing up logs.

Added millisecond resolution to logs.

Added NullMessageStore implementation.

Sessions can be queried for data dictionary and configuration settings.

Fixed problems with resent messages going out with repeating groups
fields in the wrong order.

Fixed some issues with database connection pools.

Persistance is done before sending and will fail if message cannot be
stored or sequence number cannot be incremented.

Builds against STLPORT 5.

Log messages can be redirected to different database tables.

Added memory pressure to .NET messages to give a hint to the
GC that memory should be reclaimed.

When polling you can pass in a timeout value.
 
Many other minor bug fixes.

1.12.4
------
ODBC escape values for times used in time values so they work with any database.

Session will not throw an exception when sending a message without a MsgType.

Added NetworkStatusReport and NetworkStatusRequest messages fix FIX 4.4.

.NET SessionID object can be constructed with field objects.

getSessions implemented in SessionSettings object in .NET.

SessionSettings can be output in the same format as the input stream.

Fixed repeating groups in ruby which where incorrectly instantiating arrays
indicating sorting order.

Fixed crashes in .NET due to logger being called after going out of scope.

Fixed crashes in gcc due to different allocators being used in user application
vs QuickFIX library by the FieldMap.

Disposing an initiator or acceptor in .NET will also call stop.

1.12.3
------
A logon will now be sent immediately after initiator establishes a connection.
Previously we were waiting up to 1 second before sending a logon.

PersistMessages configuration setting will not store any messages when sent to Y.
This is useful for sessions where you never want to do a resend request. Mostly for
high bandwidth sessions.

.NET field objects have static members for each of their enumeration values.
This is equivalent to the Java implementation. (i.e., OrderSide.BUY).

Fixed bugs in python and ruby APIs where objects passed into Initiator or
Acceptor were being garbage collected to early causing random crashed.
This was due to Swig not creating placeholders for these objects to live.

Additional global logging indicated when an initiator/acceptor is created/destroyed,
and started/stopped.  Global log also with log messages that do not belong to any
loaded sessions.

Configuration settings are now case insensitive (the keys, not the values).

Underlying socket exception is provided if acceptor cannot be created.

ODBC escape sequences are used for time columns so correct format is always
sent to the underlying database.

Fixed problem where file descriptors were not being released in ThreadedSocketInitiator
due to uninitialized variable.

Fixed some incorrect parsting of HTTP messages. Never manifested itself
as any problem, but fixed none the less.

Various copilation fixes for SunPRO compiler.

1.12.2
------
Fixed bug in SocketConnector in Windows where failed connections were not
being detected. Fixes bad behavior in SocketInitiator where it will attempt
to connect once, but never try to reconnect.

HttpAcceptPort setting added. When set, QuickFIX will accept HTTP requests
to the given port.  Pointing a browser to this port will bring up a control
panel that allows you to view/update certain session states.

Fixed bugs in Python api generation.

Fixed Equals method for Field in .NET.  Added Equals and GetHashCode
implementations for SessionID.

Log will display ip address instead of hostname of incoming connections
in log.  Fixes problem where hostname is not always available.

Many performance optimizations.  Performance is considerably better.

Fixed bugs when checking for required fields.

1.12.1
------
Fixed bugs with non-blocking sockets where select statement would go into an
infinite loop due to a bad file descriptor which was not properly removed.

Fixed bug in SocketInitiator where initator would crash if the socket
was pending a connection when disconnecting.

MemoryStore in .NET api uses proper access specifier so compiler does not
complain that it is abstract.

Added SendRedundantResendRequests for certifications that require you to
send a resend request even if it appears redundant.

BusinessMessageReject includes field in text if applicable.

Compiles under gcc 4.1

Fixed UnsatisfiedLinkError when creating FileLogFactory in java.

Fixed various bugs with ResetOnLogon functionality.

Fixed bug where MySQLLog was writing bad strings to table.

Fixed some error messages in MySQL store.

Added support for reconnect in MySQL 5.

Display file name when FileStore or File Log cannot open a file.

Rejects are delivered to fromAdmin even if sequence number is too high.

Initiator stores and instance of the global log.

1.12.0
------
SocketAcceptor and ThreadedSocketAcceptor can listen for connections on
multiple ports.  SocketAcceptPort no longer needs to be in the DEFAULT
section and can be assigned to sessions.  Sessions can share accepting
ports like before.

SocketAcceptor/Initiator now implemented using non-blocking sockets.  There
is no longer a danger of dead-locking when using these objects.

Support for ODBC log and message store.  QuickFIX can now be used with any 
database with an ODBC driver on windows.  Direct MSSQL implementation is
no longer supported.

Global log exists for logging that does not pertain to an existing session.
Things like incoming connections where the session is not yet identified
go in here.  The message store factory has a new create() method for creating
a global log without a session id.

MessageStore interface now supports refresh which will load in settings
from the persisted store.  RefreshOnLogon configuration setting will
refresh the store whenever the session logs on.  Useful for creating
backup systems.

Added funtionally complete Ruby API.

Python API now supports repeating groups and start() method.

Message::replaceGroup can be used to replace a specific instance of a 
repeating group.

Message::isEmpty can be used to determine if there are any fields in a
message.  Message::clear can clear all fields from a message.

New configuration parameter LogoutTimeout allows you to adjust amount of
time before session forces a disconnect when there is no logout response.

CheckCompID configuration parameter can be set to N to disable validation
of message comp ids.  This is for systems that send incorrect compids by
design.

DataDictionary can now be parsed from a stream.  This allows you to
store the DataDictionary however you like as long as you can produce
a stream in the QuickFIX xml format.

Database IOExceptions now contain reasons for the IO failure which is logged
if possible.

clear() method on database log implementation take the session qualifier into
account if applicable.

MySQL and PostgreSQL implementations properly escape strings so any message
can be recorded no matter what it contains.

Double fields now have a constructor allowing you to pass in the padding
length of the decimal value.

ScreenLog can read setting from configuration file.  No longer required to
hardcode settings into constructor.

The last received time is now only updated if a message passes validation.

Fixed bug where connections weren't being properly decremented inside
connection pool.  Caused a resource leak by not releasing connections.

Fixed bug with session time when end time is less than the start time on 
the next day.

Fixed bug with session time which spans different time zones.

Fixed a bug so logouts will show logout reason.

Fixed bugs pertaining to generating SQL to clear logs.

Support for repeating groups in headers and trailers. DataDictionary validation 
will also process repeating groups within the message header and trailer.

.NET Field objects now have ToString, Equals, and GetHashCode implementations.
Added GetHashCode implementation to SessionID.

Reject message will always be processed, even when the session isn't logged on.

Fixed support for nested repeating groups in Java API.

OrigSendingTime now always matches SendingTime when sending a SequenceReset.

Dictionary has a setDay method symetrical to getDay.

Fixed 64 bit compatibility errors in JNI layer.

Added default constructor for SessionID in Java and .NET APIs.

Fixed name of message_log table in mysql creation scripts.

Fixed race condition when stopping/starting initiator/acceptors.

ResetOnLogon will reset state before sending/receiving logon messages.

.NET logs, message stores, initiators and acceptors are now disposable so 
resources can be immediately recovered.

Fixed incorrect Socket Error log message when properly stopping a threaded
connection.

1.11.1
------
Added padding support for double fields.  Allows you to supply the
minimum number of decimal places in a double.  When set to two, 9 will
become 9.00, but 9.121 will remain the same.

Fixed bug in MySQLLog where it tries to log to old incoming_log table
instead of the newer messages_log table.

FileLog clear() method did not work.  This has been fixed.

clear() method for sql logs were clearing old incoming and outgoing
tables instead of the newer messages table.

When the clear() method on a log is called, only the logs
pertaining to that session will be deleted.  Previously it was
deleting logs from all sessions.

Fixed problem when building from the IDE which would lock the .NET
libraries causing the builds for some .NET projects to fail.

Added Dictionary, MySQL and PostgreSQL source files to vs6 jni project.

In .NET, settings can now be pulled from the SESSION section, and not
just the DEFAULT section.

Fixed port issues in example cvonfiguration files.

1.11.0
------
Updated code so it will compile under gcc 4.0 and Visual Studio .NET 2005.
For visual studio, all solution files are merged into a single file.  So
the quickfix C++, .NET, JNI, test applications and example applications
are all built in a single step.

Added MessageStore and Log support for PostgreSQL and MS SQL Server.

ConnectionPools are available for MySQL and PostgreSQL. Configuration settings
MySQLStoreUseConnectionPool, MySQLLogUseConnectionPool, 
PostgreSQLStoreUseConnectionPool, and PostgreSQLLogUseConnectionPool have been
added.  When connection pools are enabled, any sessions which share the same
connection parameters (database, user, password, host and port) will share
a connection.  This is particularly useful for PostgreSQL which has pretty
low limitations on the number of connections it allows.

JNI Wrapper has been made compatible with 64 bit systems.

Session::logout can be passed a string which contains the reason for the
logout.  The reason will be placed into the text field of the Logout message.

FileLog no longer has separate files for incoming and outgoing messages.  All
messages are placed into one messages file so the original order of the
transactions can be reconstructed accurately.

SessionSettings can be set programatically from .NET and Java.  You no longer
have to use the hack where you create a stream in the format of a configuration
file and parse it into a settings file.  Direct access to getters and setters
are exposed.

Removing a group will update the leading count field.

Fixed various bugs with resetting sequence numbers using the ResetSeqNumFlag=Y,
including issues with ResetOnDisconnect and ResetOnLogoff. Also if in a state where
we are not logged on and the messages are going to be reset, no messages will be
succesfully sent (there is no point).

Log class has a clear() method which can be used to clear out the logs
programatically.

Various fixes to handling of resend requests.

Session qualifier can be accessed from SessionID in .NET

getFieldTag method on DataDictionary will use a tags name to return its number.

Milliseconds can be specified by user in UtcTimeStamp and UtcTimeOnly fields.

Deprecated Message::getString method has been removed, you must now use toString.

Reject reasons are logged by the session even if they cannot be sent to the
counterparty.

Sequence reset will be processed even if the messages sequence number is too high.

Second thread and buffer queue removed from ThreadedSocketConnection.  Each connection
now only has one thread which interacts with the socket directly.

When a session is reset(), a logout message will be sent to the counterparty.

OrigSendingTime will contain milliseconds when applicable.

Repeating groups can now be removed from messages/groups.

Negative numbers will now be parsed correctly when received in double fields.
Before these would get converted into 0.

If a null value is set into a character field, the field will be set as empty
instead of putting a null character into the field.

MySQLLog will use the correct log settings instead of getting its settings
from the MySQLStore.

Fixed bug where getWeekDay would sometimes return a negative number.

Fixed various issues with FIX data dictionary files.

Added many methods missing from the .NET and Java wrappers of the Session class.

Event object can be passed a value to indicate how long to wait for the event
instead of being hardcoded to 100 milliseconds.

Fixed out of range error when pulling UtcTimeOnly fields out of groups.

.NET Message wrapper can parse a message with validation turned off.
setString method also exposed.  fromString method exposed to SessionID.

fromString method exposed to SessionID in java API.

DataDictionary will throw a .NET ConfigError exception instead of letting
the uncaught unmanaged exception propogate, causing a crash.

Time objects are no longer implemented using tm structure.

1.10.2
------
Reset functionality will work if the user appends ResetSeqNumFlag=Y into the
logon message from the toAdmin callback.  Allows for manual reset support.

1.10.1
------
Fixed bugs regarding sequence reset functionality.  QuickFIX was not correctly
respoding with a logon message when receiving a sequence reset.

1.10.0
------
ResetSeqNumFlag is always set when expected sender and target message sequence 
numbers are 1.  QuickFIX will also reset it's sequence numbers when it
received a ResetSeqNumFlag set to 'Y'.

ValidateUserDefinedFields configuration parameter available.  Defaults to Y
which provides functionality of older releases.  When set to N, user defined
fields will not be validated on incoming messages.

Initiators and Acceptors can be reliably stopped and restarted as many times
as you like.  Previously they could only be started and stopped once.

Presence of required fields will be validated inside of required repeating
groups.  Required fields will also be validated in the header and trailer.

getSessions on acceptor and initiator will return a collection of managed
sessions.

Correctly handle scenario where a SocketConnection receives a first message
that is not a logon.  Previously it would cause the session to be registered
without ever unregistering and thus not allowing any new connections.

Hearbeat monitor is reset when receiving a message with incorrect MsgSeqNum.

Much more thorough logging inside of Session class.

QuickFIX will add the text from a RejectLogon exception into the Text field
of the Logout message.

BusinessMessageReject, instead of Reject, will be send with a conditionally
required field is not found.

Double fields will no longer encode values less than 0.0001 in scientific
notation.

Initiator will no longer initiate socket connections outside of the session
time.  Previously it would connect and immediately close connection during
every retry interval.

Receipt of a message without an empty MsgType field is now handled gracefully.

Fixed bug where FileStore would not correctly persist numbers if set to a
lower sequence number that contained less characters than the current
sequence number.

An exception thrown from Session::generateReject will no longer result in
a system crash.

SessionID strings can now be correctly parsed if the SenderCompID contains a
dash.

Very large resend request processing will not longer result in a stack overflow.

If no length is found in the parser buffer, it will now be cleared out 
instead of reused.

SessionSettings adds extra sanity checks for configuration files, such as 
ensuring initiator or acceptor are present and spelled correctly.

Removed dependence of socket code on FIONREAD/NREAD.  The value of the recv
call is now used to determine dropped connections. All socket code has been
pulled out of the parser class.

Logout message will be processed even if no Logon was received.

C++ MessageCracker contains non-const onMessage methods for use with toAdmin 
and toApp callbacks.

Added block, poll, and isLoggedOn to initiator/acceptor for java and .NET APIs.

isAdmin, isApp, and GetEnumerator available on Message class in .NET.
GetEnumerator also available on Header and Trailer.

force flag can be passed into initiator and acceptor stop methods in
java and .NET

Java will only be compiled under unix when using the -with-java configure
directive.

CheckSum will not become negative field is set with negative character.

RuntimeErrors regarding port numbers no longer display large numbers as negative.

Directories created by quickfix use more 0777 instead of 0700.

Bug when copying SessionIDs with SessionQualifiers has been fixed.

SessionSettings can be set at runtime using setter calls from java.

Apple standards used when installing java libraries under MAC OS/X.

1.9.4
-----
Fixed compilation and linking errors in .NET library.

ThreadedSocketInitiator will reconnect when roaming into a sessions start time.

Instead of the shell/bat scripts allocated extra memory for the JVM to build
the java API, the memory is allocated in the ant script.

Added mutex locker to Session::unregisterSession

Added strptime implementation from PowerDog for Visual Studio. MySQL code will
build under windows now.

1.9.3
-----
.NET crashes do to random NullPointerExceptions has been fixed.  The
.NET library seems to be completely stable now even under heavy load.

When supplying a DataDictionary to Message::setString, the fields in
repeating groups will now be placed in the correct order.

Session will no longer send additional logout messages when one is pending.

SocketAcceptor will no longer allow two connections to log on to the same
session.

When receiving a resend request for a larger than expected sequence number,
QF will treat this like an INFINITE request.  This alleviates problems from
receiving requests for extremely large numbers which cause a lot of lookups.

When receiving a SequenceReset and GapFill flag set to N, the message will
be processed even if the MsgSeqNum field is completely absent.

Included message stores will now load up start times with the correct day
of the year so week long sessions can safely be taken down and brought back
up.

Message and Parser can now handle messages with null characters.

Session::sendToTarget is now able to route orders using a session qualifier.

Message will be invalid in setString if it has trailing characters extra
trailing characters that do not belong to a field.

Messages with repeating groups can now have a properly implemented
copy constructor.  It is safe to copy all messages.

Added wrappers in .NET for some missing methods in DataDictionary and 
Session classes.

process_sleep has proper support for millisecond precision under windows.

Some messages in FIX44.xml were identified with the wrong MsgType string.

Added missing DKReason enumerations to FIX40.xml, FIX41.xml, and FIX42.xml

Fixed problem where FieldMap::calculateString did not properly reset the
output string under VC6.  This caused problems with resend requests.

JNI library will check input parameters for nulls and throw a 
NullPointerException if the method cannot handle a null value.

Python library will be installed to the site module path.

get method for retrieving a single message has been removed from MessageStore.
Only the get methods for retreiving a range needs to be implemented now.

Added missing UserRequest and UserResponse messages for FIX.4.4

Session differentiates between dropping a connection and disconnecting
normally in the event logs.

1.9.2
-----
Fixed incorrect versioning of libraries under unix systems

1.9.1
-----
Multi-character Currencies will no longer be rejected

Fixed problems with MySQLStore loading in the wrong fields on startup.

MySQLStore queries will retry once if connection to the daemon got dropped.

Fixed link errors when building with some versions of Visual Studio.

Fixed compilation errors when using STLPort

Applied patches for SUNPro support

Message::toXML() will place field values in a CDATA section in the text 
element so it can handle special XML characters. Placing XML strings that
contain CDATA sections into a xmldata field will still cause
problems but I'm not sure much can be done about that.

More updates to FIX40 and FIX41 data dictionaries.

1.9.0
-----
Session time logic pulled out into new SessionTime class.  Now supports 
weeklong sessions!  CME conterparties, start your engines!  Use the
StartDay and EndDay configuration settings.

Massive performance improvements.  Receiving and Sending message rates are
dramatically improved.

SessionQualifier added which allows you to uniquely identify a session with
otherwise identical characteristics. You can now have multiple sessions
which share the same BeginString, SenderCompID, and TargetCompID. Use the
SessionQualifier configuration setting. *NOTE* this necessitated a change in 
the MySQL schema.  Regenerate your databases.

Fixed some compilation problems which manifested themselves under VB.NET

Administrative processing will be done after receiving a message if necessary.
This prevents dropping of heartbeats when a session is pegged with
traffic, causing the session to terminate.

Some improvement in compilation times.  I'd like to see more work done to
bring them down.

Made several updates and corrections to the data dictionary.

Made compatible with SubPRO compiler. We do not own this compiler so users
who do will need to keep us up to date on compatability issues.

Fixed some potential memory leaks in the python API.

If a message store cannot be created under java, a proper java exception will
be thrown.

SessionSettings will throw ConfigError as java exception.

JavaLogFactory throw ConfigError if log cannot be created.

Connection classes correctly propogate RecvFailed exception.

getFieldType exposed in java DataDictionary, although the enumerations are not
yet exposed.  You need to test against their integer values.

1.8.0
-----
Completed python API. Now QuickFIX can be used to FIX enable python scripts. 
This is currently only tested on linux.  It will probably work on solaris, and 
FreeBSD. To enable the python interface, run configure with 
--with-python=<dir containing Python.h>. Most of the python API is generated
with SWIG (www.swig.org), thanks to them for updating their software to 
accomodate our requirements. If you wish to regenerate the API off of the 
SWIG interface definition file, you must get the latest SWIG from cvs.

VB.NET API works again.

Logout message with message indicated expected and received MsgSeqNum is sent
if a too low sequence number is received.

Initiator and Acceptor poll() commands now work under Windows.

MySQL log and store will use proper escape sequences if any double quotes
appear in the message.  Previously, these resulted in I/O errors.

UtcDate becomes UtcDateOnly as per FIX.4.4

Executor example application implemented in VB.NET and python. Documentation now
includes VB.NET and python code snippets.

Fixed a couple bugs with the MySQL message store. Some of the sequence numbers
were being stored/retrieved in reverse. (thanks to Pasqale d'Aloise)

Correct useful error is logged if a message is received with a sequence number
too low without a PossDup flag.  The previous error "Field Not Found" was 
incorrect.

The default behavior in the MessageCracker for admin messages is to ignore the
messages.  Application messages will continue to throw UnsupportedMessageType.

Unit tests are always built without optimizations to speed up compilation.

MySQL scripts, log, and message store explicitly set the user to root by
default to reflect requirements of new versions of MySQL.

JNI workspace now points to the project in the correct directory, so the JNI
library will build normally without having to modify the workspace.

The first message received within the sessions time frame should always be
processed. There were some circumstances where it would not correctly identify
itself as being in the session time until the second message.

Fixed some minor issues with the libxml based parse to make it more generally
useful.

process_sleep can sleep for sub-second timespans again.

Added constructor which takes in SessionSettings to .NET FileLogFactory

1.7.1
-----
License moved over to quickfixengine.org. Otherwise it is identical.

logon() and logoff() methods provided for the Session class, allowing you to 
programatically.  Session times still work normally, but anytime during the 
session time you can logoff and then re-logon.

When stopping an initiator or acceptor, all sessions will go through a proper 
logoff sequence instead of just disconnecting.  A session will be killed if it 
does not receive a logoff response within 5 seconds.

Sequence numbers will be incremented correctly when rejected a resent message.
This fixes an infinite resend request problem.

Reject messages will no longer reverse routing fields if they
were sent as blanks, fixing an inifinite resend request problem.

A Session's MessageStore can now be accessed with getStore() method. Both 
getLog() and getStore() are available in Java and .NET APIs.

Improved logging for disconnect scenarios.

Message class now as isAdmin and isApp member functions.

Message exposes iterators under Java which return fields as 
StringFields. Now you can iterate through all fields to dynamically
discover what is available in a message.

removeField added to Java Message.

More Session methods are exposed in Java and .NET.

Methods to retrieve information about what is in a DataDictionary now exposed
through Java interface.

In Java, constructor that takes in a DataDictionary but turns off validation
is exposed.

getGroup under Java will throw a proper exception instead of aborting.

In the data dictionary file, omments can be added between values under 
enumerations without QuickFIX complaining about the format.

Windows version whould now build with millisecond support.

In FIX 4.0, Time type is treated like a UtcTimeStamp instead of a String.

Example applications are part of the main build under *nix.

stop on the initiator and acceptor will now work with the block() call.

SecurityIDSource changed from CHAR to STRING in FIX44.xml

Fixed warning when building .NET library.

1.7.0
-----
FIX 4.4 support added to .NET! The .NET API had to be segmented into two
assemblies: quickfix_net and quickfix_net_messages.  Why?  Well, the Managed
C++ compiler has a bug that causes it to choke on any class with more than 17
nested classes.  FIX 4.4 being the monster that it is, has several messages
with more than 17 repeating groups (yikes!), so the generated code choked.
This caused me some pain but eventually I came up with the less than ideal
but workable solution of generating the message code as C#, which does not
suffer from this problem.  So part of the .NET API is implemented in Managed
C++ and part of it in C#.

Java package changed from org.quickfix to just quickfix.  I know this is a
horrible thing to do to you but the fact is we just don't have the domain
name.  In the meantime I have registered quickfixengine.org (nothing is there yet)

Session mutex is locked during a resend request.  This will prevent new messages
from being sent in the middle of a resend request, which could cause all sorts
of havoc.

Support added for Mac OS X and FreeBSD. Mac OS X doesn't currently support
sending milliseconds in UtcTimeStamps.  Some of the documentation for these
two systems isn't complete, so you should follow the linux documentation.

Session more gracefully handles sending of messages during the logon process.

Session will disconnect instead of sending a reject message on a bad logon.
In the future we may want to provide and option to send a logout with an
error message, although this is not generally recommended.

reverseRoute added to message which will fill in inversed routing information
based on another message, allowing you to conveniently send a response.  The
Session class uses this for reject messages in order to ensure optional routing
tags are included in rejects.

Acceptance test runner ported to ruby 1.8.

For windows, debug libraries are placed into a separate debug directory instead
of being named things like quickfix_debug.lib.  The reason is that .NET projects
don't seem to support the notion of different versions of a build having different
file names, just different directories.  So in order to standardize I had to
change everything to follow this format.

DataDictionary class has been wrapped for Java and .NET.  This allows you to
pass a DD into a message constructor along with a string.  This will allow you 
to parse messages with repeating groups.

Fixed problems with Session states not automatically resetting to prepare for
the start of a new session.  Sessions should now reset their state at the 
correct times.

Added toString() call to SessionID

SessionID's can now be streamed in from a string. Useful if you want to stream out
a list of sessions to a file and recreate the objects from that file.

Values in the settings file are read by a more inclusive regexp so many more
special characters can be used.

UtcTimeStamps now support milliseconds.  SendingTimes for FIX versions
4.2 and higher will be sent with millisecond resolution.  A new session level
setting MillisecondsInTimestamp is provided.  The default value is Y.

Messages will be correctly parsed if it receives a partial BodyLength field.  
The parser will make sure the complete field has been received before parsing
the rest of the message.

The blockingStart call has been renamed to simply block, and a new poll call
has been added to Initiator and Acceptor.  So options for running quickfix are
through the start(), block(), and poll(), commands.

getYearDay added to UtcTimeStamp and UtcTimeDate which returns the current day
of the year. (e.g. January 31 = 31, Febuary 1 = 32 )

Floating point fields will be accepted with multiple leading 0's.

.NET now has wrappers for the low-level C++ accessors for Message and Group.

Added support for isSetField to java.

Corrected some threading issues in windows by switching from _beginthread to 
beginthreadex and from GetCurrentThread to GetCurrentThreadId

1.6.0
-----
FIX 4.4 support for C++ and Java APIs, with .NET on the way.  You can
technically use 4.4 with .NET now, but the generated message classes
are not yet available.

Messages with repeating groups will no longer be silenty ignored when 
no data dictionary is available.  QuickFIX will accept the message and 
send a proper reject message at validation.  Reject message will be
supplied for unspecified repeating tags, and count mismatches for
repeating groups.

ResendRequests are now done to INFINITY to reduce race condition
scenarios.

Out of sequence ResendRequest don't alter sequence numbers which
would cause race conditions during simultaneous ResendRequests.

Each C++ message is placed in its own file. This separation repairs
issues with Visual Studio running out of heap space.  This does mean,
however, that you will need to include the header for each individual
you intend on using instead of just including Messages.h

Fields of type MultipleValueString that have enumerations will check
each individual value instead of checking the string as a whole. For
instance if you are sent a MVS containing "A C 5", the validator will
verify that A C and 5 are all valid enumerations.

More descriptive error messages when reading invalid DataDictionary
files.  QuickFIX will no longer crash when givin a badly formatted
XML document, instead a ConfigError is thrown.

Repeating groups within Component are now read correctly from the
DataDictionary file.

DataDictionary will enforce that field names are unique.  This
prevents accidentally assigning two different field names to the
same tag number.

Fixed a bug where messages sent while logged off were not stored in
the MessageStore, causing them to never be resent.

By popular demand, the .NET API now exposes the isSetField call. This
allows .NET users to check for the presence of a field in a message.

Fixed bug where re-used Field classes would not recalculate their
length and checksum when their values changes, causing messages to
be sent out with incorrect lenths or checksums.

Fixed bug that cause the sendToTarget( Message, String, String )
signature would always fail from the Java API.

Fixed incomplete copy operator for DataDictionary.

ScreenLog now displays proper timestamps.

libxml2 can be linked into windows build as an alternative to MSXML.

Added accessor to Session class for the DataDictionary.

Banzai should load correctly with the supplied configuration file.

socket_t will be defined as int if not defined by the system. This
allows QF to be compiled on older systems such as Solaris 2.6

1.5.0
-----
Support for DATA fields. This will allow to safely send encrypted and
compressed fields.  Out of necessity, FIX parser uses the length field
instead of just looking for 10=SOH. This means behavior will be slightly
different when receiving messages with an incorrect length.

Acceptor and Initiator start() method is a non-blocking call. onRun
is no longer called in your application.  Instead you must call stop on
your initiator or acceptor when you want it to shut down.

Fixed several problems with parsing nested repeating groups and groups
with components.

Added UseDataDictionary field which defaults to Y. You must explicitly
set this field to N if you DONT want to use a DataDictionary.

New include structure for C++. Includes are now in the form of
quickfix/[file].h instead of the old quickfix/include/[file].h

Several optimizations added to increase the speed of creating, parsing,
and sending messages.  Overall performance of the engine should be
considerably better.  Messages with repeating groups should show dramatic 
performance increase.

All libraries are now build as shared libraries. This also doubles the speed
of the build under gcc because object files only need to be compiled once
instead of twice as before.

Header file dependencies have been reduced to speed up build. This may means
headers that were previously pulled in automatically via other header files,
may no longer do so.  You will now need to explicitly include these files where
needed.

Fixed some resource leaks when shutting down threads.

Added java acceptance tests. All FIX test scripts can now be run with
the runat_java and runat_java.bat commands in the test directory. FIX 4.3
tests now run with runat_threaded

Queued logon messages (logons messages received with sequence number to
high), are skipped when processing queue.

Build will pull CFLAGS, CXXFLAGS, and LDFLAGS in from the environment.
Default compiler flags are now -O2 -g. This may cause problems with some
older versions of gcc. Set CXXFLAGS to -O or blank if you have problems
compiling

Added new 'void toString( std::string& )' and 'void toXML( std::string& )' 
method calls. These are more efficient than 'string toString()' and
'string toXML' calls.  The new versions should be used if these methods
are called in a loop for better performance.

FileLog forcefully flushes writes so the state of the storage file is
always up to date.

1.4.1
-----
Fixed compilation errors when building under gcc 3.x (matching throw
specifiers, JNI patch).  Also got rid of warnings caused by generated
source files not ending with newlines.

getValue call in Java and .NET message class will throw and IncorrectDataFormat
exception instead of just crashing.  In C++, method also throws 
IncorrectDataFormat instead of FieldConvertError.

QuickFIX C++ call stack is available by running configure with the
--enable-callstack option, or defining USING_CALLSTACK in windows_config.h

Engine will no longer crash when specifying an invalid hostname

Added ConfigError throw specifier to Initiator/Acceptor start method. 

Removed ^M characters from install-sh which caused compile problems on
some systems.

Fixed code generation so groups withing components within groups are
show up in message classes.

Added missing SEQNUM type to DataDictionary.

Increased heap size for Visual Studio so heap allocation errors are
less likely when compiling.

In Java, renamed Session class to SessionSettings to match the C++ API

Fixed bug where session times would not ever reset when the start time
is greater than the end time.

Reentrant system calls are used when they are available. Fixed
unsynchronized resource bug on multi-processor machines.

Initiator and Acceptor use correct result after spawning thread,
instead of assigning the boolean result as the threadid.

Fixed deadlock in ThreadedSocketAcceptor and ThreadedSocketInitiator
when shutting down.

UtcDate now calls the correct constructor so it is initialized
properly.

Java MessageCracker now supports FIX 4.3 messages.

1.4.0
-----
Support for FIX 4.3

New less redundant DataDictionary format, with support for component blocks

reset method on Session now available in JAVA and .NET API's

setNextSenderMsgSeqNum and setNextTargetMsgSeqNum available on session in all API's

Changes made to messages in toAdmin and toApp in JAVA are correctly applied when sending

new throw specifiers on fromAdmin and fromApp message. Prevents
crashes from occuring when no data dictionary is used.

isSetField method added to JAVA API. Methods in version specific
messages also have methods to check if fields are set.

sendToTarget throws SessionNotFound exception instead of just crashing
under .NET

Fixed memory leaks in JNI interface

Fixed race condition between sending application and admin messages

Processing of Queue in ThreadedSocketConnection modified so it can
better handle large sustained throughput

.NET namespace changed from Fix to QuickFix. Resolves conflict with
unmanaged FIX namespace allowing library to be used from VB.NET

Messages with repeating groups no longer take in the number of
repeating groups in the constructor.  This value was always
overwritten when adding groups anyway.

The start method in Initiator and Acceptor can throw an exception if a
serious error occurs.

SocketAcceptor and ThreadedSocketAcceptor will no longer allow you to 
silently takeover a used port.  An exception will be thrown instead.

New constructor for SessionID takes strings.

New setting ValidateFieldsHaveValue can be set to N to prevent
rejecting messages with empty fields.

MySQL MessageStore will properly reset sequence numbers

Java field classes have final integers which identify the tag number
of the field.

Java and .NET will no longer crash when a incorrectly formatted field
is read from a session without a data dictionary.

1.3.2
-----
More portable file copies during build process on unix

1.3.1
-----
Fixed memory leak in repeating groups caused by FieldMap not calling
clear() in destructor.

Corrected some minor errors building sample applications on some systems.

1.3.0
-----
Support for java on linux and solaris! Note some compilers/linux distributions
dont seem to do as well with this as others.

Added support for repeating groups in .NET and java APIs.

Event and message logging now available through the Log interface. This is
separate from the MessageStore which is now more acurately refered to as
a state mechanism.

MySQLFileStore added.  Now QuickFIX can maintain state in a production quality
open source database right out of the box.

--with-stlport configure option added for building with STLport.  This
fixes stability problems that users have been experiencing on
multi-processor machines with 2.95.x compilers.

Message decoding has been optimized. Decoding FIX messages is now 3
times faster than before.

Message class can now output FIX messages as XML.

Fixed copy operator for FieldMaps that contain repeating groups.

Fixed resource leaks in .NET API.  Message class should now be garbage 
collected correctly. Also implemented IDisposable interface for
Message. Be sure you know what you are doing before using this!

DataDictionary parser works much better.  In particular it is able to 
generate the FIX40.xml and FIX41.xml files much more accurately.

Test Requests are now sent properly during times of high activity.

Test Request time span shortened for a timed out connection.

MessageStore sets and gets strings instead of messages. This allows
the session to properly parse stored messages using its data
dictionary. The old way was causing problems with resends with 
repeating groups.

All MessageStore functions can now throw an IOException. If a session traps
an IOException it will consider it a serious problem and disconnect.

The get method in MessageStore that asks for a range is now a void method
instead of a boolean. If there is a problem retrieving a message, throw an
IOException.  If you are asked for a message you do not have, just send back
whatever is available within the range.

Faster load times for sessions that share a data dictionary. Each 
DataDictionary file is now only parsed once on startup.

In JAVA booleans are properly represented as booleans instead of Strings

Currency types are properly represented as Strings

Rejecting a resent message will no longer increment the expected
sequence number.

Can now properly accept a message with repeating group where the
counter is set to zero.

Continuous builds now being run on windows-vc6, windows-vc7, and 
linux-pgcc-2-95-2, and solaris-gcc-2-95-3-stlport

Message::getString() deprecated in favor of Message::toString()

1.2.1
-----
config.h no longer included from Utility.h.  This was causing problems
when people wanted to build quickfix application without autotools.

More robust detection of dropped/bad sockets. One of our users ran
into a problem with this during certification with the CME. He has
confirmed that it works correctly now.

Closing acceptors now works in all situations.

Mutex locking in session is a little smarter, making it easier to
syncrhonize applications.

code is now auto formatted with astyle. This makes it easier for
people to contribute code without having to worry as much about
conforming to coding standards.

1.2.0
-----
First release of .NET API for QuickFIX. The API is mostly a direct
port of the JAVA API, future versions well attempt to refine this API
to use more .NET specific constructs. QuickFIX applications can now be
written in C# or VB.NET or any other CLR language.

Documentation covers all API's, C++, Java, and .NET

New example application executor. Executor example is implemented in
C++, Java and C# for side by side comparison.

Fixed bug where the session time range was not calculated correctly
when minutes or seconds were involved. (.i.e., is that start time was
set to 12:30:00, the 30 would cause problems, wheras 12:00:00 would be fine).

Resend requests with EndSeqNo set to 0 (>=FIX 4.2) or 999999 (<=FIX
4.1) are now supported.

Possible duplicate messages with a sequence number that is too low
will no longer be forwarded to the application callback.

FIX Specification parser modified so it will now capture some fields
that it was missing. The FIX42.xml file in particular is more complete.

Made Java API more consistant with C++ API.

1.1.1
-----
Fixed memory leak caused by copying repeating groups.

Added acceptance tests for FIX 4.0 and 4.1

When new fields are added to the header or trailer portion of the XML
data dictionary, QuickFIX will now handle them appropriately.

Header fields, not just body fields, can now be added to messages
passing through toApp and toAdmin callbacks

New setting CheckLatency and MaxLatency are available for session 
configuration. CheckLatency defaults to Y and determines if a session
will check if a message looks too old to process. MaxLatency defaults
to 120 and is the maximum number of seconds a message can be out of
date and still be considered good.

New setting ValidateFieldsOutOfOrder is available for session
configuration. Sets whether or not header and body fields can be out
of order. Useful for connecting to systems that don't properly sort their 
fields.

New setting LogonTimeout is availbale for session configuration. 
Number of seconds QuickFIX will wait to receive a logon response. 
Defaults to 10.

Another fix put in to allow string based enumeration to be properly validated.

RefMsgType field no longer added to reject messages in versions
earlier than 4.2

SequenceReset messages are now appropriately send with OrigSendingTime field.

RejectLogon, DoNotSend and UnsupportedMessageType exceptions added to
JAVA interface.

New settings ResetOnLogout and ResetOnDisconnect will reset sequence
numbers when a session is respectively normally or abnormally terminated.

<string> is included from Exceptions.h, which makes QF compilable with STLPort.

1.1.0
-----
Added support for messages with repeating groups.

Added ThreadedSocketInitiator and ThreadedSocketAcceptor. Each session
has its own thread for listening on a socket and one for processing messages.

The signature for toApp and toAdmin have changed from 
   ( const Message&, const SessionID& )
to ( Message&, const SessionID& ). 
This allows applications to add fields to messages before they are sent out. 
Particularly useful for administrative messages that need fields that arn't
added by default.

Filestore is much more memory efficient. Only file offsets are stored in memory
and messages are retreived on in as needed basis. This keeps memory use way
down and also is a little faster for normal operations.

On Linux and Solaris upgraded from libxml to libxml2. It is recomended by 
the libxml guys that all new applications use libxml2. configure will verify
that libxml is installed on a system and automatically add the necessary
command line parameters.

Possible duplicate messages are now passed to the fromAdmin and
fromApp application callbacks. Applications must now check for this
field and determine how possible duplicate messages should be handled.

Values.h correctly generated enumerations for fields of type INT.

Validation works with STRING enumerations, not just CHAR and INT.

Sockets are now properly closed if a connection fails. This fixes a
leak in socket resources that appeared after a large number of
reconnect attempts.

RefTagID, RefMsgType are no longer added to reject message in versions
of FIX 4.1 and earlier. BusinessMessageReject no longer used in FIX
versions 4.1 and earlier.

Improved DataDictionary generation. More enumerations are listed.
 
1.0.4
-----
Fixed bug in FileStore where .session file was overwritten on reload.

SocketInitiator now supports multiple alternate host and ports which allows
QuickFIX to take advantage of systems with failover servers.

Custom build step under windows is now compatible with Visual Studio 7.

Changed fields from template instantiated classes to standard classes in
order to stop Visual Studio 6 from crashing while in auto-complete mode.

Changed char pointer comparison operators for StringField to friend functions
so left hand side comparisons can be done such as "value" == senderCompID.

Began implementation of repeating groups.
	
1.0.3
-----
Added unit testing framework to ordermatch

Fixed bug in ordermatch where executing a partailly filled order resulted in
the order being left open with a negative ammount.

Added commands to standard input for ordermatch to list available symbols and
for displaying a book.

Began implementation of C API.

Added target field to order table in banzai.

Banzai can now properly handle receiving executions from multiple targets

1.0.2
-----
Fixed an incorrect number 84600 in FieldTypes.h with the
constant UTC_DAY which is the correct 86400

1.0.1
-----
Several classes deriving from FIX::Application had different throw specifiers 
than the base class.  This caused compilation errors with some compilers.  
This has been corrected.

FAQ has been updated.
