forked from quickfix/quickfix
-
Notifications
You must be signed in to change notification settings - Fork 0
/
NEWS
1463 lines (975 loc) · 53.3 KB
/
NEWS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
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