Coder Social home page Coder Social logo

quickfix / quickfix Goto Github PK

View Code? Open in Web Editor NEW
1.5K 1.5K 746.0 49.34 MB

QuickFIX C++ Fix Engine Library

License: Other

C++ 63.23% C 0.07% Shell 0.02% Ruby 17.19% XSLT 0.01% Python 19.27% Makefile 0.02% Batchfile 0.01% PLSQL 0.01% PLpgSQL 0.01% M4 0.07% CMake 0.07% TSQL 0.01% SWIG 0.04%

quickfix's Introduction

Quickfix

Build Status

BUILDING AND INSTALLING

Full instructions:
    See doc/html/building.html

Quick instructions:
    ./bootstrap
    ./configure
    make
    make check
    sudo make install

For SunOS and AIX have a look at README.SunOS and README.AIX.


It is possible to build many components with a relatively newer version of cmake.

For example on Windows,

mkdir build cd build cmake -DHAVE_SSL=ON -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX:PATH="install-path" -DOPENSSL_ROOT_DIR="path to openssl" .. Then build in Visual Studio or on command prompt.

On Linux (with system openssl),

cmake -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_SSL=ON -DCMAKE_INSTALL_PREFIX:PATH="install-path" .. make -j 4 install

If one has Ninja then (with system openssl),

cmake -G Ninja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DHAVE_SSL=ON -DCMAKE_INSTALL_PREFIX:PATH="install-path" .. ninja install

Alternatively, you can build and install quickfix using vcpkg dependency manager:

git clone https://github.com/Microsoft/vcpkg.git
cd vcpkg
./bootstrap-vcpkg.sh
./vcpkg integrate install
./vcpkg install quickfix

The quickfix port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please create an issue or pull request on the vcpkg repository.

quickfix's People

Contributors

0xnbk avatar agmt avatar arthurlm avatar bklyn avatar daniel-und-pav-at-cargill-dot-com avatar davidcalabrese avatar dingobye avatar gregorycu avatar joaquinbejar avatar joncinque avatar karopawil avatar kcons avatar krzysztofwos avatar ksiamis-connamara avatar leleftheriades avatar mcleodd avatar meg-seedcx avatar mgatny avatar michael-doubez avatar michaelwilner avatar msnelling avatar nehaljwani avatar orenmiller avatar orenmnero avatar pdm-steve avatar pps314159 avatar quickfix avatar tipmethewink avatar w3stling avatar whoan avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

quickfix's Issues

Doubles losing precision

Shouldn't the following two match?

double x = 1.00489;
FIX::DoubleField field(1, x);
std::cout.precision(17);
std::cout << x << std::endl;
std::cout << field.getValue() << std::endl;
1.0048900000000001
1.0048899999999998

Compiling Error

I had this error:

Linking TestUnitTest++...
Running unit tests...
terminate called after throwing an instance of 'char const_'
Makefile:79: recipe for target 'TestUnitTest++' failed
make[2]: *_* [TestUnitTest++] Aborted (core dumped)
make[2]: *** Deleting file 'TestUnitTest++'
make[2]: Leaving directory '/tmp/tmp/QuickFix/quickfix/UnitTest++'
Makefile:495: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/tmp/tmp/QuickFix/quickfix'
Makefile:404: recipe for target 'all' failed
make: *** [all] Error 2

Please, check: http://paste.debian.net/152819/

Python 3 support

It's not very clear from the website or documentation whether Python 3 is supported. Could you provide additional info? Also if it isn't I am willing to assist in adding support and would like details.

Webpage typo

See below. I was going to fix it and PR it, but it seems that the web pages are no longer in the repo.

---------- Forwarded message ----------
From: Fleury, David (CA-CIB) [email protected]
Date: Thu, Jan 16, 2014 at 1:38 AM
Subject: Link issue on web site
To: "[email protected]" [email protected]

Hi,

On this page, http://www.quickfixengine.org/documentation

The link to FIXT 1.1 html, point to http://www.quickfixengine.org/FIX11.html instead of http://www.quickfixengine.org/FIXT11.html

Regards,
David

Include library version in data files.

I have a project that has been compiled with quickfix.so.14 and, later, quickfix.so.15. For a while, I started the project and got stuck in std::terminate due to an unexpected FIX::ConvertError and no useful stack trace. After compiling the library with -f-no-enforce-eh-specs, I was able to pinpoint the source of the exception, which was a convert() called at FileStore.cpp:160

m_cache.setCreationTime( UtcTimeStampConvertor::convert( time, true ) );

Garbage has been read from file and could not be converted. The library could include, on file creation, and test, when reading the file, a version identifier that could correctly address the issue.

build dies when --with-python enabled

I don't seem to be able to build with python support on the latest codebase (which is more success than I had with 1.13.3 which I couldn't get to build at all on Centos 6:

I have the following error below:

Making all in python
make[3]: Entering directory /opt/home/simonwa/quickfix/quickfix/src/python' /bin/sh ../../libtool --tag=CXX --mode=compile g++ -DHAVE_CONFIG_H -I. -I../.. -I. -I.. -I../.. -g -O2 -Wall -ansi -Wpointer-arith -Wwrite-strings -Wno-overloaded-virtual -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/libxml2 -I/usr/include/python2.6 -MT QuickfixPython.lo -MD -MP -MF .deps/QuickfixPython.Tpo -c -o QuickfixPython.lo QuickfixPython.cpp libtool: compile: g++ -DHAVE_CONFIG_H -I. -I../.. -I. -I.. -I../.. -g -O2 -Wall -ansi -Wpointer-arith -Wwrite-strings -Wno-overloaded-virtual -I/usr/include/mysql -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -fno-strict-aliasing -fwrapv -fPIC -DUNIV_LINUX -DUNIV_LINUX -I/usr/include/libxml2 -I/usr/include/python2.6 -MT QuickfixPython.lo -MD -MP -MF .deps/QuickfixPython.Tpo -c QuickfixPython.cpp -fPIC -DPIC -o .libs/QuickfixPython.o QuickfixPython.cpp: In function \u2018PyObject* _wrap_FieldMap_calculateString__SWIG_0(PyObject*, PyObject*)\u2019: QuickfixPython.cpp:17583: error: no matching function for call to \u2018FIX::FieldMap::calculateString(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&, bool&) const\u2019 ../C++/FieldMap.h:206: note: candidates are: std::string& FIX::FieldMap::calculateString(std::string&) const QuickfixPython.cpp: In function \u2018PyObject* _wrap_Dictionary_getLong(PyObject*, PyObject*)\u2019: QuickfixPython.cpp:239426: error: \u2018const class FIX::Dictionary\u2019 has no member named \u2018getLong\u2019 QuickfixPython.cpp: In function \u2018PyObject* _wrap_Dictionary_setLong(PyObject*, PyObject*)\u2019: QuickfixPython.cpp:239742: error: \u2018class FIX::Dictionary\u2019 has no member named \u2018setLong\u2019 QuickfixPython.cpp: In function \u2018PyObject* _wrap_DataDictionary_getGroup(PyObject*, PyObject*)\u2019: QuickfixPython.cpp:255166: warning: unused variable \u2018res\u2019 make[3]: *** [QuickfixPython.lo] Error 1 make[3]: Leaving directory/opt/home/simonwa/quickfix/quickfix/src/python'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory /opt/home/simonwa/quickfix/quickfix/src' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory/opt/home/simonwa/quickfix/quickfix'
make: *** [all] Error 2

Memory leak when user try to connect to fix over and over again.

When user try to connect to fix server a ClientHandlerThread is created and store in a list in ThreadedSocketReactor.

in disconnect(because of exception or disconnect by user) the ClientHandlerThread is stay on list and therefor the GC does not collect this object.

I fixed that issue

in ClientHandlerThread:

      public event EventHandler OnShutdown;

     public void Shutdown(string reason)
    {

        Log("shutdown requested: " + reason);
        isShutdownRequested_ = true;

        //Elad Zoarets: Add to resolve memory leak.
        //              After shotdown inform the ClientHandlerThread holder that this instace 
        //              Can be remove.
        if (OnShutdown != null)
            OnShutdown(this, null);
    }

ThreadedSocketReactor:

var t = new ClientHandlerThread(client, nextClientId_++, sessionDict_, new SocketSettings());
                lock (sync_)
                {
                    t.OnShutdown += OnShutdown;
                    clientThreads_.AddLast(t);
                }


     void OnShutdown(object sender, EventArgs e)
     {
         try
         {
            //Elad Zoarets: Remove instace of ClientHandlerThread from list
            // so G.C will be able to collect.
            var clientHandler = sender as ClientHandlerThread;
            if (clientHandler != null)
                clientThreads_.Remove(clientHandler);
         }
         catch (Exception ex)
         {
            t his.Log("Error accepting connection: " + ex);
         }
    }     

Error while compiling on FreeBSD

Quickfix doesn't compile on FreeBSD-10.1

make
make all-recursive
Making all in UnitTest++
make[2]: "quickfix/UnitTest++/Makefile" line 30: Missing dependency operator
make[2]: "quickfix/UnitTest++/Makefile" line 32: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 35: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 59: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 66: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 67: Missing dependency operator
make[2]: "quickfix/UnitTest++/Makefile" line 68: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 98: Need an operator
make[2]: "quickfix/UnitTest++/Makefile" line 101: Need an operator
make[2]: Fatal errors encountered -- cannot continue

ssize_t typedef conflicts with the same definition from ACE library (x64)

QuickFix: Utility.h:

typedef int ssize_t;

ACE-6.3.0: ACE_wrappers\ace\os_include\sys\os_types.h:

#if  !defined (ACE_HAS_SSIZE_T) 
#  if defined (ACE_WIN64) 
  typedef SSIZE_T ssize_t; 
#  else 
  typedef int ssize_t; 
#  endif /* ACE_WIN64 */ 
#endif  /* ACE_HAS_SSIZE_T */ 

The proposed fix is to move ssize_t definition inside FIX namespace (socklen_t could be moved as well):

namespace FIX
{
    typedef int socklen_t;
    typedef int ssize_t;
}

Undefined behaviour in integer conversion

Negation of -2147483648 fails when compiled with gcc-4.9 -O2 optimization. Also compiled with -fsanitize=undefined for test log below.

==========================================
   QuickFIX 1.14.3: test/test-suite.log
==========================================

# TOTAL: 1
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  1
# XPASS: 0
# ERROR: 0

.. contents:: :depth: 2

FAIL: check.sh
==============

ut: no process found
at: no process found
<ut>
  <output>
C++/FieldConvertors.h:47:25: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
C++/FieldConvertors.h:100:25: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
C++/FieldConvertors.h:190:13: runtime error: negation of -2147483648 cannot be represented in type 'int'; cast to an unsigned type to negate this value to itself
C++/test/FieldConvertorsTestCase.cpp:82: error: Failure in countIntegerSymbols: Expected 11 but was 5
C++/test/FieldConvertorsTestCase.cpp:114: error: Failure in integerConvertTo: Expected -2147483648 but was -00
FAILURE: 2 out of 186 tests failed (2 failures).
Test time: 10.87 seconds.
  </output>
</ut>

Outbound messages persisted to pg messages table, but not messages_log and never sent

I've got an issue I'm having difficulty tackling using quickfix C++. My overall architecture looks like:

(proxy) listening at 8400

  • (Acceptor) listening at 8500
  • (Acceptor) listening at 8501
  • (Acceptor) listening at 8502

The above three acceptors are each set up with RefreshOnLogon with the Postgres message store. I'm running integration tests that pass when I first run. Three initiators are created which connect, log on, authenticate, create orders, receive execution reports, then log off. The proxy sends each new connection to whichever Acceptor instance has the least connections - effectively round-robin-ing the load out to the three Acceptors. Works like a champ.

When re-running (regardless of whether I set ResetOnLogon/Logoff/Disconnect on Acceptor and all Initiators, or if I leave configured to continue with known seqNums and regardless of whether I set RefreshOnLogon), the process fails. All of the same messages end up appearing as outbound messages in the Acceptor's postgres 'messages' table, but the last two execution reports don't appear in the 'messages_log' table. And, correspondingly, those two messages never leave the Acceptor and never arrive at the appropriate Initiators. If I stop and restart the Acceptor processes and run the integration test again, it will always succeed the first time and fail subsequent ones.

Any ideas?

Thanks a bunch,

Matt

build failed & run crash in vs2015

maybe vs2015 changed its __beginthreadex function signature, which causes compile error.
so in my emergent suit case, just change source code into
bool thread_spawn(_beginthreadex_proc_type func, void* var, thread_id& thread )
{

ifdef _MSC_VER

thread_id result = 0;
unsigned int id = 0;
result = _beginthreadex( NULL, 0, func, var, 0, &id );
if ( result == 0 ) return false;
in file Utility.cpp .

ssl to quickfix c++

Hi,

Is it possible to add ssl to quickfix c++ engine ? The SocketUseSSL property has no effect in C++.

I used to use stunnel and now I have my own lightweight ssl proxy. But it would be a handy feature.

Cannot install ruby gem on ubuntu 14.04.1 LTS

vagrant@vagrant-ubuntu-trusty-64:~/work/stock/quickfix/src/ruby$ gem install quickfix_ruby
Building native extensions.  This could take a while...
ERROR:  Error installing quickfix_ruby:
    ERROR: Failed to build gem native extension.

    /home/vagrant/.rvm/rubies/ruby-2.1.5/bin/ruby -r ./siteconf20150618-10741-danz40.rb extconf.rb
creating Makefile

make "DESTDIR=" clean

make "DESTDIR="
compiling HttpConnection.cpp
In file included from Session.h:34:0,
                 from HttpConnection.cpp:29:
DataDictionaryProvider.h:54:72: error: โ€˜ptr::shared_ptrโ€™ has not been declared
   void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
                                                                        ^
DataDictionaryProvider.h:54:82: error: expected โ€˜,โ€™ or โ€˜...โ€™ before โ€˜<โ€™ token
   void addTransportDataDictionary(const BeginString& beginString, ptr::shared_ptr<DataDictionary>);
                                                                                  ^
DataDictionaryProvider.h:55:70: error: โ€˜ptr::shared_ptrโ€™ has not been declared
   void addApplicationDataDictionary(const ApplVerID& applVerID, ptr::shared_ptr<DataDictionary>);
                                                                      ^
DataDictionaryProvider.h:55:80: error: expected โ€˜,โ€™ or โ€˜...โ€™ before โ€˜<โ€™ token
   void addApplicationDataDictionary(const ApplVerID& applVerID, ptr::shared_ptr<DataDictionary>);
                                                                                ^
DataDictionaryProvider.h:63:25: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                         ^
DataDictionaryProvider.h:63:25: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
DataDictionaryProvider.h:63:55: error: template argument 2 is invalid
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                                                       ^
DataDictionaryProvider.h:63:55: error: template argument 4 is invalid
DataDictionaryProvider.h:63:57: error: expected unqualified-id before โ€˜>โ€™ token
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_transportDictionaries;
                                                         ^
DataDictionaryProvider.h:64:25: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                         ^
DataDictionaryProvider.h:64:25: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
DataDictionaryProvider.h:64:55: error: template argument 2 is invalid
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                                                       ^
DataDictionaryProvider.h:64:55: error: template argument 4 is invalid
DataDictionaryProvider.h:64:57: error: expected unqualified-id before โ€˜>โ€™ token
   std::map<std::string, ptr::shared_ptr<DataDictionary> > m_applicationDictionaries;
                                                         ^
DataDictionaryProvider.h: In member function โ€˜void FIX::DataDictionaryProvider::addTransportDataDictionary(const FIX::BeginString&, const string&)โ€™:
DataDictionaryProvider.h:58:45: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
   { addTransportDataDictionary(beginString, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                             ^
DataDictionaryProvider.h:58:75: error: expected primary-expression before โ€˜>โ€™ token
   { addTransportDataDictionary(beginString, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                                                           ^
DataDictionaryProvider.h: In member function โ€˜void FIX::DataDictionaryProvider::addApplicationDataDictionary(const FIX::ApplVerID&, const string&)โ€™:
DataDictionaryProvider.h:60:45: error: โ€˜shared_ptrโ€™ is not a member of โ€˜ptrโ€™
   { addApplicationDataDictionary(applVerID, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                             ^
DataDictionaryProvider.h:60:75: error: expected primary-expression before โ€˜>โ€™ token
   { addApplicationDataDictionary(applVerID, ptr::shared_ptr<DataDictionary>( new DataDictionary(path) )); }
                                                                           ^
make: *** [HttpConnection.o] Error 1

make failed, exit code 2

Gem files will remain installed in /home/vagrant/.rvm/gems/ruby-2.1.5/gems/quickfix_ruby-1.14.3.1 for inspection.
Results logged to /home/vagrant/.rvm/gems/ruby-2.1.5/extensions/x86_64-linux/2.1.0/quickfix_ruby-1.14.3.1/gem_make.out

Thanks for any help

make check failed

make[6]: Nothing to be done for all-am'. make[6]: Leaving directory/home/ubgpu/github/quickfix/test'
make[5]: Leaving directory `/home/ubgpu/github/quickfix/test'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'
ERROR: unknown command line flag 'l'

/bin/bash: line 11: test: +: integer expression expected

Testsuite summary for QuickFIX 1.14.3

/bin/bash: line 28: test: : integer expression expected

TOTAL:

/bin/bash: line 28: test: : integer expression expected

PASS:

/bin/bash: line 28: test: : integer expression expected

SKIP:

/bin/bash: line 28: test: : integer expression expected

XFAIL:

/bin/bash: line 28: test: : integer expression expected

FAIL:

/bin/bash: line 28: test: : integer expression expected

XPASS:

/bin/bash: line 28: test: : integer expression expected

ERROR:

See test/test-suite.log

Please report to [email protected]

make[4]: *** [test-suite.log] Error 1
make[4]: Leaving directory /home/ubgpu/github/quickfix/test' make[3]: *** [check-TESTS] Error 2 make[3]: Leaving directory/home/ubgpu/github/quickfix/test'
make[2]: *** [check-am] Error 2
make[2]: Leaving directory /home/ubgpu/github/quickfix/test' make[1]: *** [check-recursive] Error 1 make[1]: Leaving directory/home/ubgpu/github/quickfix/test'
make: *** [check-recursive] Error 1
ubgpu@ubgpu:~/github/quickfix$

FileStore scalability issues

I've been using the QuickFIX C++ code recently and have encountered a couple of scalability issues with the FileStore implementation:

  1. File offsets are stored as int rather than off_t. When the .body file grows to more than 2GB in size, the persistence fails and no messages are sent on established sessions, not even heartbeats. The application continues to run, and all callbacks for sent as well as received messages are invoked, so there's no clue internally that anything is amiss.
  2. FileStore caches a map of sequence numbers to file-offsets, and this can grow pretty large using up significant amounts of memory. In my application, this caused an OOM condition.

I've modified the behaviour on both fronts with a patch: it both changes the data type used for file offsets to off_t, and introduces a FileStore configuration option to limit the size of the seq. num. cache. If you configure a limit, then FileStore will cache only the last N sequence numbers: this controls the amount of memory used at the cost of limiting replay capabilities, with only the last N messages being replayed on re-establishment of the session. I'll happily submit this patch, if there's interest.

Message that triggers Socket Error is silently dropped

Suppose that I have an initiator connected to an acceptor and I lose network connectivity. If my initiator attempts to send a message before the initiator detects the network problem, the message will just be dropped; there will be no exception thrown or any indication that message was not sent.

I see the same behavior when I attempt to send a message and the session is closed, but at least I can check the session status before attempting to send a message.

How do others currently protect against network problems? Wouldn't throwing an exception from the sendToTarget be the natural solution?

quickfix doesn't correct restore session after waking up

Hello!

I've got an issue, please, look at the logs:

AAA is an LP
BBB is me

...
20141222-14:57:12.863 : 8=FIX.4.4 9=71 35=0 49=AAA 56=BBB 34=1326 52=20141222-14:57:12.905 10=033 
here I closed the notebook

and here opened
20141223-06:54:15.190 : 8=FIX.4.4 9=151 35=A 34=1 49=BBB 52=20141223-06:54:15 56=AAA 98=0 108=20 141=N 554=... 10=245 
20141223-06:54:15.307 : 8=FIX.4.4 9=89 35=A 49=AAA 56=BBB 34=1330 52=20141223-06:54:14.374 98=0 108=20 141=N 10=113 
20141223-06:54:15.308 : 8=FIX.4.4 9=73 35=2 34=2 49=BBB 52=20141223-06:54:15 56=AAA 7=1 16=0 10=060 
20141223-06:54:15.308 : 8=FIX.4.4 9=151 35=3 49=AAA 56=BBB 34=1331 52=20141223-06:54:14.374 45=1 371=34 372=A 373=99 58=Wrong sequence number. Expected 1319 but received 1 10=059 
20141223-06:54:15.308 : 8=FIX.4.4 9=126 35=5 49=AAA 56=BBB 34=1332 52=20141223-06:54:14.374 58=Wrong sequence number. Expected 1319 but received 1 10=192 
20141223-06:54:15.309 : 8=FIX.4.4 9=64 35=5 34=3 49=BBB 52=20141223-06:54:15 56=AAA 10=197 

20141223-06:54:35.200 : 8=FIX.4.4 9=151 35=A 34=5 49=BBB 52=20141223-06:54:35 56=AAA 98=0 108=20 141=N 554=... 10=251 
20141223-06:54:35.314 : 8=FIX.4.4 9=89 35=A 49=AAA 56=BBB 34=1337 52=20141223-06:54:34.385 98=0 108=20 141=N 10=124 
20141223-06:54:35.315 : 8=FIX.4.4 9=73 35=2 34=6 49=BBB 52=20141223-06:54:35 56=AAA 7=3 16=0 10=068 
20141223-06:54:35.316 : 8=FIX.4.4 9=151 35=3 49=AAA 56=BBB 34=1338 52=20141223-06:54:34.385 45=5 371=34 372=A 373=99 58=Wrong sequence number. Expected 1319 but received 5 10=078 
20141223-06:54:35.316 : 8=FIX.4.4 9=126 35=5 49=AAA 56=BBB 34=1339 52=20141223-06:54:34.385 58=Wrong sequence number. Expected 1319 but received 5 10=207 
...

As we can see after the waking up quickfix sends a logon request, and LP accepts it, then quickfix sends a resend request, but LP rejects it because request has the wrong sequence number. LP expects 1319, but quickfix sends 1. Why does it happen? May be I do something wrong?

The comment above FIX::FieldMap::removeGroup( int field ) is incorrect and misleading

the comment seen here

/// Remove all instances of a group.
specifies that all instances of the group will be removed, when in fact as of commit e629acc submitted in 2005, only the most recently added group instance will be removed.

This comment not only conflicts with the functionality, but also the testing of the function, as can be seen in

CHECK( object.hasGroup(1, group) );
where removeGroup(int) is tested to only remove a single instance.

SocketInitiator tries to send a logon without a socket connection

This is not of interest for me (perhaps for someone else) as I use the the ThreadedSocket* classes. Here are logs form the sample TraderClient application (keeps trying to send logon mesages and raises the sequence number):

Logout - FIX.4.2:CLIENT1->EXECUTOR
<20141118-11:01:19.979, FIX.4.2:CLIENT1->EXECUTOR, event>
(Connecting to 127.0.0.1 on port 5002)
<20141118-11:01:19.979, FIX.4.2:CLIENT1->EXECUTOR, outgoing>
(8=FIX.4.2๏ฟฝ9=72๏ฟฝ35=A๏ฟฝ34=137๏ฟฝ49=CLIENT1๏ฟฝ52=20141118-11:01:19.979๏ฟฝ56=EXECUTOR๏ฟฝ98=0๏ฟฝ108=30๏ฟฝ10=206๏ฟฝ)
<20141118-11:01:19.979, FIX.4.2:CLIENT1->EXECUTOR, event>
(Initiated logon request)
<20141118-11:01:19.979, FIX.4.2:CLIENT1->EXECUTOR, event>
(Socket Error: Connection reset by peer.)
<20141118-11:01:19.979, FIX.4.2:CLIENT1->EXECUTOR, event>
(Disconnecting)

Logout - FIX.4.2:CLIENT1->EXECUTOR
<20141118-11:01:21.982, FIX.4.2:CLIENT1->EXECUTOR, event>
(Connecting to 127.0.0.1 on port 5003)
<20141118-11:01:21.982, FIX.4.2:CLIENT1->EXECUTOR, outgoing>
(8=FIX.4.2๏ฟฝ9=72๏ฟฝ35=A๏ฟฝ34=138๏ฟฝ49=CLIENT1๏ฟฝ52=20141118-11:01:21.982๏ฟฝ56=EXECUTOR๏ฟฝ98=0๏ฟฝ108=30๏ฟฝ10=194๏ฟฝ)
<20141118-11:01:21.982, FIX.4.2:CLIENT1->EXECUTOR, event>
(Initiated logon request)
<20141118-11:01:21.982, FIX.4.2:CLIENT1->EXECUTOR, event>
(Socket Error: Connection reset by peer.)
<20141118-11:01:21.982, FIX.4.2:CLIENT1->EXECUTOR, event>
(Disconnecting)

Logout - FIX.4.2:CLIENT1->EXECUTOR
<20141118-11:01:23.984, FIX.4.2:CLIENT1->EXECUTOR, event>
(Connecting to 127.0.0.1 on port 5001)
<20141118-11:01:23.984, FIX.4.2:CLIENT1->EXECUTOR, outgoing>
(8=FIX.4.2๏ฟฝ9=72๏ฟฝ35=A๏ฟฝ34=139๏ฟฝ49=CLIENT1๏ฟฝ52=20141118-11:01:23.984๏ฟฝ56=EXECUTOR๏ฟฝ98=0๏ฟฝ108=30๏ฟฝ10=199๏ฟฝ)
<20141118-11:01:23.985, FIX.4.2:CLIENT1->EXECUTOR, event>
(Initiated logon request)
<20141118-11:01:23.985, FIX.4.2:CLIENT1->EXECUTOR, event>
(Socket Error: Connection reset by peer.)
<20141118-11:01:23.985, FIX.4.2:CLIENT1->EXECUTOR, event>
(Disconnecting)

Strange problems after removing OrderMassCancel{Request,Report} from xml schema

I ran into a strange problem that affects SocketAcceptors (but not initiators) in git HEAD.

If I remove OrderMassCancelRequest from the acceptor's xml schema, the acceptor will complain that a tag is missing when an initiator tries to logon. And the given field number is the acceptor's port number for some strange reason.

Accepted connection from 127.0.0.1 on port 4321
Message 1 Rejected: Required tag missing:4321

If I remove OrderMassCancelReport from the acceptor's xml schema, I just get a segmentation fault when the initiator tries to connect.

I don't know C++, so if anyone has suggestions on debugging, I'd be happy to try some things.

Initiator treating duplicate logon responses as a logon request

The acceptor to which I was connected was having problems and sent a duplicate logon responses. To my surprise, my initiator took the 2nd logon response to be a logon request and responded with a logon response as if it were a acceptor. A logon loop then began with each side sending logons as quickly as possible.

My quickfix configuration is configured with only one session, an initiator, so why would it also act as an acceptor?

Incorrect BeginString with FIXT.1.1 and FIX.5.0 - FIX.5.0SP2

Hi, I'm creating an initiator and acceptor which speak FIX.5.0SP2. I'm getting an "58":"Incorrect BeginString" error on logon, on the acceptor (and on fromAdmin on the initiator). I believe my configs are correct:

initiator:

# default settings for sessions
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=60
UseLocalTime=Y
PersistMessages=Y
FileStorePath=./data
FileLogPath=./log
HttpAcceptPort=9016
SenderCompID=X
BeginString=FIXT.1.1
TransportDataDictionary=./support/FIXT11.xml

[SESSION]
TargetCompID=Y
StartTime=00:00:00
EndTime=23:59:59
HeartBtInt=30
SocketConnectPort=8599
SocketConnectHost=localhost
DefaultApplVerID=FIX.5.0SP2
AppDataDictionary=./support/FIX50SP2.xml

acceptor:

# default settings for sessions
[DEFAULT]
ConnectionType=acceptor
ReconnectInterval=60
UseLocalTime=Y
PersistMessages=Y
PostgreSQLStoreDatabase=quickfix
PostgreSQLStoreUser=x
PostgreSQLStoreHost=localhost
PostgreSQLStorePort=5432
PostgreSQLStoreUseConnectionPool=Y
PostgreSQLLogDatabase=quickfix
PostgreSQLLogUser=x
PostgreSQLLogHost=localhost
PostgreSQLLogPort=5432
PostgreSQLLogUseConnectionPool=Y
FileStorePath=./data
FileLogPath=./log
HttpAcceptPort=9212
SenderCompID=Y
BeginString=FIXT.1.1
TransportDataDictionary=./support/FIXT11.xml

[SESSION]
TargetCompID=X
StartTime=00:00:00
EndTime=23:59:59
HeartBtInt=30
SocketAcceptPort=8599
DefaultApplVerID=FIX.5.0SP2
AppDataDictionary=./support/FIX50SP2.xml

I've tried all sorts of permutations and none seem to work.

Is there an error in the BeginString logic?

GapFillMsgs cause a memory Leak

When a resendrequest is issued every new msg coming in will be put on the message queue in doTargetToHigh. If you then get a GapFill msg in all of those items on the message queue will just stay there and never be cleared out.

Document allocators

There are quite of few allocators from which to choose when configuring quickfix. It would nice if the documentation included some guidance on choosing the most appropriate option.

config.h not installed

A minor issue, but it seems that config.h, which is correctly generated by the build scripts, is not being installed into my system's include directory. I have to manually copy it over.

ordermatch crashes when 2 threads access the session for sending/receiving (Linux)

I modified example application ordermatch to send an ack after a delay in a separate thread.
I made similar thread for filling it.
It runs for a while and then core dumps.
The stack trace shows there is an incoming order being processed while my thread is trying to send an ack for a previous order.
I tried changing to Synchronised app ( though I have only one session), but that didn't help .

I would like to hear from the group Is this acceptable usage ?
Is there a better way to do this?
(This is a repost from http://sourceforge.net/mailarchive/forum.php?forum_name=quickfix-users. pls advise if this is not the right forum)

UnitTest++ build fail

Here is output of all build steps (long!):

seriy@seriy-laptop:~/Documents/p/git/quickfix$ ./bootstrap
+ uname
+ libtoolize --copy
libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, `config'.
libtoolize: copying file `config/ltmain.sh'
libtoolize: putting macros in AC_CONFIG_MACRO_DIR, `m4'.
libtoolize: copying file `m4/libtool.m4'
libtoolize: copying file `m4/ltoptions.m4'
libtoolize: copying file `m4/ltsugar.m4'
libtoolize: copying file `m4/ltversion.m4'
libtoolize: copying file `m4/lt~obsolete.m4'
+ autoreconf -i -Wall,no-obsolete
configure.ac:33: warning: cannot check for file existence when cross compiling
../../lib/autoconf/general.m4:2777: AC_CHECK_FILE is expanded from...
m4/ax_lib_stlport.m4:1: AX_LIB_STLPORT is expanded from...
configure.ac:33: the top level
configure.ac:33: warning: cannot check for file existence when cross compiling
../../lib/autoconf/general.m4:2777: AC_CHECK_FILE is expanded from...
m4/ax_lib_stlport.m4:1: AX_LIB_STLPORT is expanded from...
configure.ac:33: the top level
configure.ac:23: installing 'config/compile'
configure.ac:26: installing 'config/config.guess'
configure.ac:26: installing 'config/config.sub'
configure.ac:19: installing 'config/install-sh'
configure.ac:19: installing 'config/missing'
Makefile.am: installing './COPYING' using GNU General Public License v3 file
Makefile.am:     Consider adding the COPYING file to the version control system
Makefile.am:     for your code, to avoid questions about which license your project uses
examples/executor/C++/Makefile.am: installing 'config/depcomp'
examples/ordermatch/test/Makefile.am:2: warning: 'CXXFLAGS' is a user variable, you should not override it;
examples/ordermatch/test/Makefile.am:2: use 'AM_CXXFLAGS' instead
examples/ordermatch/test/Makefile.am:14: warning: 'LDFLAGS' is a user variable, you should not override it;
examples/ordermatch/test/Makefile.am:14: use 'AM_LDFLAGS' instead
/usr/share/automake-1.14/am/ltlibrary.am: warning: 'libquickfix.la': linking libtool libraries using a non-POSIX
/usr/share/automake-1.14/am/ltlibrary.am: archiver requires 'AM_PROG_AR' in 'configure.ac'
src/C++/Makefile.am:5:   while processing Libtool library 'libquickfix.la'
/usr/share/automake-1.14/am/ltlibrary.am: warning: 'libquickfixcpptest.la': linking libtool libraries using a non-POSIX
/usr/share/automake-1.14/am/ltlibrary.am: archiver requires 'AM_PROG_AR' in 'configure.ac'
src/C++/test/Makefile.am:4:   while processing Libtool library 'libquickfixcpptest.la'
src/C++/test/Makefile.am:2: warning: 'CXXFLAGS' is a user variable, you should not override it;
src/C++/test/Makefile.am:2: use 'AM_CXXFLAGS' instead
src/Makefile.am:24: warning: 'LDFLAGS' is a user variable, you should not override it;
src/Makefile.am:24: use 'AM_LDFLAGS' instead
/usr/share/automake-1.14/am/ltlibrary.am: warning: '_quickfix.la': linking libtool libraries using a non-POSIX
/usr/share/automake-1.14/am/ltlibrary.am: archiver requires 'AM_PROG_AR' in 'configure.ac'
src/python/Makefile.am:2:   while processing Libtool library '_quickfix.la'
parallel-tests: installing 'config/test-driver'
+ rm -rf autom4te.cache config.h.in~
+ set +ex
Now run configure with any arguments necessary
seriy@seriy-laptop:~/Documents/p/git/quickfix$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether make supports nested variables... yes
checking for g++... g++
checking whether the C++ compiler works... yes
checking for C++ compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C++ compiler... yes
checking whether g++ accepts -g... yes
checking for style of include used by make... GNU
checking dependency style of g++... gcc3
checking for gcc... gcc
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking how to run the C preprocessor... gcc -E
checking build system type... x86_64-unknown-linux-gnu
checking host system type... x86_64-unknown-linux-gnu
checking how to print strings... printf
checking for a sed that does not truncate output... /bin/sed
checking for grep that handles long lines and -e... /bin/grep
checking for egrep... /bin/grep -E
checking for fgrep... /bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking whether the shell understands some XSI constructs... yes
checking whether the shell understands "+="... yes
checking how to convert x86_64-unknown-linux-gnu file names to x86_64-unknown-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-unknown-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for mt... mt
checking if mt is a manifest tool... no
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... no
checking how to run the C++ preprocessor... g++ -E
checking for ld used by g++... /usr/bin/ld -m elf_x86_64
checking if the linker (/usr/bin/ld -m elf_x86_64) is GNU ld... yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking for g++ option to produce PIC... -fPIC -DPIC
checking if g++ PIC flag -fPIC -DPIC works... yes
checking if g++ static flag -static works... yes
checking if g++ supports -c -o file.o... yes
checking if g++ supports -c -o file.o... (cached) yes
checking whether the g++ linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking dynamic linker characteristics... (cached) GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking for flex... flex
checking lex output file root... lex.yy
checking lex library... -lfl
checking whether yytext is a pointer... yes
-e:1:in `<main>': Use RbConfig instead of obsolete and deprecated Config.
-e:1:in `<main>': Use RbConfig instead of obsolete and deprecated Config.
checking for shutdown in -lc... yes
checking for inet_addr in -lc... yes
checking for nanosleep in -lc... yes
checking for ftime in -lcompat... no
checking which threading environment to use... -lpthread
checking for pthread_create in -lpthread... yes
checking stdio.h usability... yes
checking stdio.h presence... yes
checking for stdio.h... yes
checking for STREAMS ioctl... no
checking for socklen_t... yes
checking for ftime... yes
checking for set_terminate in the global namespace... no
checking for set_terminate in the std namespace... yes
checking for typeinfo in the global namespace... checking for std::tr1::shared_ptr... yes
checking for std::shared_ptr... yes
no
checking for typeinfo in the std namespace... yes
checking for gethostbyname_r with input result... yes
checking for cplus_demangle in -liberty... no
checking if select modifies timeval parameter... yes
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating quickfix.pc
config.status: creating Makefile
config.status: creating src/Makefile
config.status: creating src/C++/Makefile
config.status: creating src/C++/test/Makefile
config.status: creating src/python/Makefile
config.status: creating src/ruby/Makefile
config.status: creating bin/Makefile
config.status: creating bin/cfg/Makefile
config.status: creating spec/Makefile
config.status: creating test/Makefile
config.status: creating test/atrun/Makefile
config.status: creating test/cfg/Makefile
config.status: creating test/definitions/Makefile
config.status: creating test/definitions/server/Makefile
config.status: creating test/definitions/server/future/Makefile
config.status: creating examples/Makefile
config.status: creating examples/executor/Makefile
config.status: creating examples/executor/C++/Makefile
config.status: creating examples/ordermatch/Makefile
config.status: creating examples/ordermatch/test/Makefile
config.status: creating examples/tradeclient/Makefile
config.status: creating examples/tradeclientgui/Makefile
config.status: creating examples/tradeclientgui/banzai/Makefile
config.status: creating examples/tradeclientgui/banzai/test/Makefile
config.status: creating examples/tradeclientgui/banzai/src/Makefile
config.status: creating examples/tradeclientgui/banzai/src/quickfix/Makefile
config.status: creating examples/tradeclientgui/banzai/src/quickfix/banzai/Makefile
config.status: creating examples/tradeclientgui/banzai/src/quickfix/banzai/ui/Makefile
config.status: creating doc/Makefile
config.status: creating doc/html/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
seriy@seriy-laptop:~/Documents/p/git/quickfix$ make
make  all-recursive
make[1]: Entering directory '/home/seriy/Documents/p/git/quickfix'
Making all in UnitTest++
make[2]: Entering directory '/home/seriy/Documents/p/git/quickfix/UnitTest++'
make[2]: Nothing to be done for 'all'.
make[2]: Leaving directory '/home/seriy/Documents/p/git/quickfix/UnitTest++'
Making all in src
make[2]: Entering directory '/home/seriy/Documents/p/git/quickfix/src'
Making all in C++
make[3]: Entering directory '/home/seriy/Documents/p/git/quickfix/src/C++'
make  all-recursive
make[4]: Entering directory '/home/seriy/Documents/p/git/quickfix/src/C++'
Making all in test
make[5]: Entering directory '/home/seriy/Documents/p/git/quickfix/src/C++/test'
/bin/bash ../../../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I../../.. -I.. -I../../../UnitTest++/src    -g -O2 -Wall -ansi -Wpointer-arith -Wwrite-strings -Wno-overloaded-virtual    -I/usr/include/mysql -DBIG_JOINS=1  -fno-strict-aliasing    -g -DNDEBUG      -std=c++0x -O0 -g -MT SessionTestCase.lo -MD -MP -MF .deps/SessionTestCase.Tpo -c -o SessionTestCase.lo SessionTestCase.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I../../.. -I.. -I../../../UnitTest++/src -g -O2 -Wall -ansi -Wpointer-arith -Wwrite-strings -Wno-overloaded-virtual -I/usr/include/mysql -DBIG_JOINS=1 -fno-strict-aliasing -g -DNDEBUG -std=c++0x -O0 -g -MT SessionTestCase.lo -MD -MP -MF .deps/SessionTestCase.Tpo -c SessionTestCase.cpp  -fPIC -DPIC -o .libs/SessionTestCase.o
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextLogon::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextLogonHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:427:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogon)
 ^
SessionTestCase.cpp:427:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextLogonHelper':
 TEST_FIXTURE(acceptorFixture, nextLogon)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:427:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogon)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextLogonNoEncryptMethod::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextLogonNoEncryptMethodHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:467:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogonNoEncryptMethod)
 ^
SessionTestCase.cpp:467:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextLogonNoEncryptMethodHelper':
 TEST_FIXTURE(acceptorFixture, nextLogonNoEncryptMethod)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:467:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogonNoEncryptMethod)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextLogonResetSeqNumFlag::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextLogonResetSeqNumFlagHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:494:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogonResetSeqNumFlag)
 ^
SessionTestCase.cpp:494:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextLogonResetSeqNumFlagHelper':
 TEST_FIXTURE(acceptorFixture, nextLogonResetSeqNumFlag)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:494:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogonResetSeqNumFlag)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestinitiatorFixtureinitiatorResetLogonWithResetSeqNumInResponse::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::initiatorFixtureinitiatorResetLogonWithResetSeqNumInResponseHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:514:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithResetSeqNumInResponse)
 ^
SessionTestCase.cpp:514:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::initiatorFixtureinitiatorResetLogonWithResetSeqNumInResponseHelper':
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithResetSeqNumInResponse)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:514:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithResetSeqNumInResponse)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestinitiatorFixtureinitiatorResetLogonWithoutResetSeqNumInResponse::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::initiatorFixtureinitiatorResetLogonWithoutResetSeqNumInResponseHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:534:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithoutResetSeqNumInResponse)
 ^
SessionTestCase.cpp:534:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::initiatorFixtureinitiatorResetLogonWithoutResetSeqNumInResponseHelper':
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithoutResetSeqNumInResponse)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:534:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, initiatorResetLogonWithoutResetSeqNumInResponse)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenotifyResendRequest::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenotifyResendRequestHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:553:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, notifyResendRequest)
 ^
SessionTestCase.cpp:553:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenotifyResendRequestHelper':
 TEST_FIXTURE(acceptorFixture, notifyResendRequest)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:553:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, notifyResendRequest)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixtureincrMsgSeqNum::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixtureincrMsgSeqNumHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:559:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, incrMsgSeqNum)
 ^
SessionTestCase.cpp:559:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixtureincrMsgSeqNumHelper':
 TEST_FIXTURE(acceptorFixture, incrMsgSeqNum)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:559:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, incrMsgSeqNum)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturecallDisconnect::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturecallDisconnectHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:577:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, callDisconnect)
 ^
SessionTestCase.cpp:577:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturecallDisconnectHelper':
 TEST_FIXTURE(acceptorFixture, callDisconnect)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:577:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, callDisconnect)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestsessionFixturedoesSessionExist::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::sessionFixturedoesSessionExistHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:615:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, doesSessionExist)
 ^
SessionTestCase.cpp:615:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::sessionFixturedoesSessionExistHelper':
 TEST_FIXTURE(sessionFixture, doesSessionExist)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:615:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, doesSessionExist)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestsessionFixturelookupSession::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::sessionFixturelookupSessionHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:686:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, lookupSession)
 ^
SessionTestCase.cpp:686:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::sessionFixturelookupSessionHelper':
 TEST_FIXTURE(sessionFixture, lookupSession)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:686:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, lookupSession)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestsessionFixtureregisterSession::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::sessionFixtureregisterSessionHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:741:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, registerSession)
 ^
SessionTestCase.cpp:741:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::sessionFixtureregisterSessionHelper':
 TEST_FIXTURE(sessionFixture, registerSession)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:741:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(sessionFixture, registerSession)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextTestRequest::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextTestRequestHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:772:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextTestRequest)
 ^
SessionTestCase.cpp:772:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextTestRequestHelper':
 TEST_FIXTURE(acceptorFixture, nextTestRequest)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:772:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextTestRequest)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixtureoutOfOrder::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixtureoutOfOrderHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:785:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, outOfOrder)
 ^
SessionTestCase.cpp:785:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixtureoutOfOrderHelper':
 TEST_FIXTURE(acceptorFixture, outOfOrder)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:785:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, outOfOrder)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextLogout::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextLogoutHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:805:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogout)
 ^
SessionTestCase.cpp:805:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextLogoutHelper':
 TEST_FIXTURE(acceptorFixture, nextLogout)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:805:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextLogout)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestinitiatorFixturelogoutInitiator::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::initiatorFixturelogoutInitiatorHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:817:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, logoutInitiator)
 ^
SessionTestCase.cpp:817:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::initiatorFixturelogoutInitiatorHelper':
 TEST_FIXTURE(initiatorFixture, logoutInitiator)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:817:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorFixture, logoutInitiator)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturebadOrigSendingTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturebadOrigSendingTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:830:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badOrigSendingTime)
 ^
SessionTestCase.cpp:830:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturebadOrigSendingTimeHelper':
 TEST_FIXTURE(acceptorFixture, badOrigSendingTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:830:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badOrigSendingTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenoOrigSendingTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenoOrigSendingTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:858:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, noOrigSendingTime)
 ^
SessionTestCase.cpp:858:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenoOrigSendingTimeHelper':
 TEST_FIXTURE(acceptorFixture, noOrigSendingTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:858:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, noOrigSendingTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturebadCompID::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturebadCompIDHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:883:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badCompID)
 ^
SessionTestCase.cpp:883:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturebadCompIDHelper':
 TEST_FIXTURE(acceptorFixture, badCompID)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:883:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badCompID)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextReject::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextRejectHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:898:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextReject)
 ^
SessionTestCase.cpp:898:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextRejectHelper':
 TEST_FIXTURE(acceptorFixture, nextReject)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:898:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextReject)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturebadMsgType::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturebadMsgTypeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:920:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badMsgType)
 ^
SessionTestCase.cpp:920:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturebadMsgTypeHelper':
 TEST_FIXTURE(acceptorFixture, badMsgType)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:920:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badMsgType)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextSequenceReset::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextSequenceResetHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:939:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextSequenceReset)
 ^
SessionTestCase.cpp:939:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextSequenceResetHelper':
 TEST_FIXTURE(acceptorFixture, nextSequenceReset)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:939:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextSequenceReset)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextGapFill::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextGapFillHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:970:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextGapFill)
 ^
SessionTestCase.cpp:970:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextGapFillHelper':
 TEST_FIXTURE(acceptorFixture, nextGapFill)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:970:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextGapFill)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextResendRequest::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextResendRequestHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1014:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequest)
 ^
SessionTestCase.cpp:1014:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextResendRequestHelper':
 TEST_FIXTURE(acceptorFixture, nextResendRequest)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1014:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequest)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextResendRequestRepeatingGroup::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextResendRequestRepeatingGroupHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1052:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequestRepeatingGroup)
 ^
SessionTestCase.cpp:1052:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextResendRequestRepeatingGroupHelper':
 TEST_FIXTURE(acceptorFixture, nextResendRequestRepeatingGroup)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1052:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequestRepeatingGroup)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorT11FixturenextResendRequestT1142RepeatingGroup::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorT11FixturenextResendRequestT1142RepeatingGroupHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1071:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1142RepeatingGroup)
 ^
SessionTestCase.cpp:1071:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorT11FixturenextResendRequestT1142RepeatingGroupHelper':
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1142RepeatingGroup)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1071:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1142RepeatingGroup)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorT11FixturenextResendRequestT1150RepeatingGroup::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorT11FixturenextResendRequestT1150RepeatingGroupHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1090:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1150RepeatingGroup)
 ^
SessionTestCase.cpp:1090:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorT11FixturenextResendRequestT1150RepeatingGroupHelper':
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1150RepeatingGroup)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1090:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorT11Fixture, nextResendRequestT1150RepeatingGroup)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturenextResendRequestNoMessagePersist::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturenextResendRequestNoMessagePersistHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1109:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequestNoMessagePersist)
 ^
SessionTestCase.cpp:1109:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturenextResendRequestNoMessagePersistHelper':
 TEST_FIXTURE(acceptorFixture, nextResendRequestNoMessagePersist)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1109:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, nextResendRequestNoMessagePersist)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturebadBeginString::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturebadBeginStringHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1148:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badBeginString)
 ^
SessionTestCase.cpp:1148:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturebadBeginStringHelper':
 TEST_FIXTURE(acceptorFixture, badBeginString)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1148:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, badBeginString)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixtureunsupportedMsgType::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixtureunsupportedMsgTypeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1166:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, unsupportedMsgType)
 ^
SessionTestCase.cpp:1166:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixtureunsupportedMsgTypeHelper':
 TEST_FIXTURE(acceptorFixture, unsupportedMsgType)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1166:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, unsupportedMsgType)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixturedoNotRespondToLogonWhenDisabled::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixturedoNotRespondToLogonWhenDisabledHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1176:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, doNotRespondToLogonWhenDisabled)
 ^
SessionTestCase.cpp:1176:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixturedoNotRespondToLogonWhenDisabledHelper':
 TEST_FIXTURE(acceptorFixture, doNotRespondToLogonWhenDisabled)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1176:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, doNotRespondToLogonWhenDisabled)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestresetOnEndTimeFixtureresetOnEndTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::resetOnEndTimeFixtureresetOnEndTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1205:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(resetOnEndTimeFixture, resetOnEndTime)
 ^
SessionTestCase.cpp:1205:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::resetOnEndTimeFixtureresetOnEndTimeHelper':
 TEST_FIXTURE(resetOnEndTimeFixture, resetOnEndTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1205:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(resetOnEndTimeFixture, resetOnEndTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestdisconnectBeforeStartTimeFixturedisconnectedBeforeStartTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::disconnectBeforeStartTimeFixturedisconnectedBeforeStartTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1238:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(disconnectBeforeStartTimeFixture, disconnectedBeforeStartTime)
 ^
SessionTestCase.cpp:1238:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::disconnectBeforeStartTimeFixturedisconnectedBeforeStartTimeHelper':
 TEST_FIXTURE(disconnectBeforeStartTimeFixture, disconnectedBeforeStartTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1238:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(disconnectBeforeStartTimeFixture, disconnectedBeforeStartTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestresetOnNewSessionFixtureresetOnNewSession::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::resetOnNewSessionFixtureresetOnNewSessionHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1261:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(resetOnNewSessionFixture, resetOnNewSession)
 ^
SessionTestCase.cpp:1261:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::resetOnNewSessionFixtureresetOnNewSessionHelper':
 TEST_FIXTURE(resetOnNewSessionFixture, resetOnNewSession)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1261:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(resetOnNewSessionFixture, resetOnNewSession)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestlogonAtLogonStartTimeFixturelogonAtLogonStartTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::logonAtLogonStartTimeFixturelogonAtLogonStartTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1294:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(logonAtLogonStartTimeFixture, logonAtLogonStartTime)
 ^
SessionTestCase.cpp:1294:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::logonAtLogonStartTimeFixturelogonAtLogonStartTimeHelper':
 TEST_FIXTURE(logonAtLogonStartTimeFixture, logonAtLogonStartTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1294:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(logonAtLogonStartTimeFixture, logonAtLogonStartTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestacceptorFixtureprocessQueuedMessages::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::acceptorFixtureprocessQueuedMessagesHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1315:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, processQueuedMessages)
 ^
SessionTestCase.cpp:1315:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::acceptorFixtureprocessQueuedMessagesHelper':
 TEST_FIXTURE(acceptorFixture, processQueuedMessages)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1315:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(acceptorFixture, processQueuedMessages)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
In file included from ../../../UnitTest++/src/UnitTest++.h:12:0,
                 from SessionTestCase.cpp:27:
SessionTestCase.cpp: In member function 'virtual void SuiteSessionTests::TestinitiatorCreatedBeforeStartTimeFixtureinitiatorLogonAtStartTime::RunImpl() const':
../../../UnitTest++/src/TestMacros.h:81:26: error: cannot declare variable 'fixtureHelper' to be of abstract type 'SuiteSessionTests::initiatorCreatedBeforeStartTimeFixtureinitiatorLogonAtStartTimeHelper'
    Fixture##Name##Helper fixtureHelper(m_details);        \
                          ^
../../../UnitTest++/src/TestMacros.h:110:36: note: in expansion of macro 'TEST_FIXTURE_EX'
 #define TEST_FIXTURE(Fixture,Name) TEST_FIXTURE_EX(Fixture, Name, UnitTest::Test::GetTestList())
                                    ^
SessionTestCase.cpp:1383:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorCreatedBeforeStartTimeFixture, initiatorLogonAtStartTime)
 ^
SessionTestCase.cpp:1383:14: note:   because the following virtual functions are pure within 'SuiteSessionTests::initiatorCreatedBeforeStartTimeFixtureinitiatorLogonAtStartTimeHelper':
 TEST_FIXTURE(initiatorCreatedBeforeStartTimeFixture, initiatorLogonAtStartTime)
              ^
../../../UnitTest++/src/TestMacros.h:56:11: note: in definition of macro 'TEST_FIXTURE_EX'
     class Fixture##Name##Helper : public Fixture          \
           ^
SessionTestCase.cpp:1383:1: note: in expansion of macro 'TEST_FIXTURE'
 TEST_FIXTURE(initiatorCreatedBeforeStartTimeFixture, initiatorLogonAtStartTime)
 ^
In file included from ../Session.h:32:0,
                 from SessionTestCase.cpp:28:
../Responder.h:39:15: note:     virtual bool FIX::Responder::send(const char*, int)
  virtual bool send( const char * buf, int len ) = 0;
               ^
Makefile:487: recipe for target 'SessionTestCase.lo' failed
make[5]: *** [SessionTestCase.lo] Error 1
make[5]: Leaving directory '/home/seriy/Documents/p/git/quickfix/src/C++/test'
Makefile:694: recipe for target 'all-recursive' failed
make[4]: *** [all-recursive] Error 1
make[4]: Leaving directory '/home/seriy/Documents/p/git/quickfix/src/C++'
Makefile:539: recipe for target 'all' failed
make[3]: *** [all] Error 2
make[3]: Leaving directory '/home/seriy/Documents/p/git/quickfix/src/C++'
Makefile:494: recipe for target 'all-recursive' failed
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory '/home/seriy/Documents/p/git/quickfix/src'
Makefile:484: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/home/seriy/Documents/p/git/quickfix'
Makefile:392: recipe for target 'all' failed
make: *** [all] Error 2

ssl to quickfix c++

Hi,

Is it possible to add ssl to quickfix c++ engine ? The SocketUseSSL property has no effect in C++.

I used to use stunnel and now I have my own lightweight ssl proxy. But it would be a handy feature.

DataDictionary::getOrderedFields() not thread safe

Hi, we use quickfix in a multithreaded environment, and we thought we should be able to use a DataDictionary across multiple threads as long as it is const, because quickfix is threadsafe on other locations, but this is not the case. It looks like DataDictionary::getOrderedFields() , although declared const, possibly changes the member m_orderedFieldsArray, which can lead to very ugly crashes in malloc() later... Or workaround will be to use only one dictionary per thread but this is an enormous overhead.

Update README for OSX

The readme could be updated to support the OSX Mavericks environment. It appears that if the requirements are met, that it builds correctly on that platform as well.

PartyId and PartySource sequence

Is it possible to invert the position of these two tags or at least to make them flexible, in order to avoid inconsistences with a Brazilian Clearing House?:

Current form:
PartyId (448)
PartySource (447)

The way they use:
PartySource (447)
PartyId (448)

ThreadedSocketInitiator/Acceptor support for python port

Hi,

First, i should ask why python port not supporting "ThreadedSocket*" ? Am I missing something about technological obstacle?

Performance gain is not prior to me. It is about socket connection problems. When all sessions use one thread, all sessions waiting each other.

Here the case;
Session1 : known and usable ip
Session2 : corrupt ip // something like 192.168.2.222, it is an un-exist internal ip
Session3 : known and usable ip

Session2's connection is not possible, but it will wait tcp connection timeout long time.
With this config we can not connect Session3. Because it will wait Session2's connection.

Thanks.

XMLNonFIX message not parsed correctly

I received an XMLNonFIX message that contains a FIX message wrapped in an XML element as the XMLData and that it not parsed correctly. The XMLData field in the header stops at the first embedded SOH and then the remained of the embedded FIX gets parsed in to the body of the enclosing message.

replace pipes with SOH in the example message below:

8=FIX.4.2|9=514|35=n|34=158|369=130|52=20150220-14:40:24.991|49=CME|50=G|56=QQQQQQN|57=QQQ|212=426|213=<RTRF>8=FIX.4.2|9=390|35=8|34=136|369=131|52=20150220-14:40:24.991|49=CME|50=G|56=GGGGGGN|57=GGG|143=IL|1=TEST|6=0|11=00000000000000000003|14=1|17=64485:M:412850TN0031303|20=0|31=208700|32=1|37=64227619161|38=1|39=2|40=2|41=0|44=208700|48=147403|54=1|55=ES|59=0|60=20150220-14:40:24.970|75=20150220|107=ESH5|150=2|151=0|167=FUT|337=TRADE|375=CME000A|432=20150220|442=1|527=642276191612015022031303|1028=N|1057=N|10=000|</RTRF>|10=111|

String to double conversion precision

Hi,

The method fast_atof() fails to convert numbers that are possible to represent (with less than 15 digits).
Simple test put the value 1.233, in a double field, when the filed is read again the value 1.2329999999999999 will be returned. Reverting to the old method calling strtod() fixes the issue and 1.233 is returned.

Some might prefer the faster conversion that fsat_atof() offers, but if you have to add rounding on all floating point numbers from QuickFix this performance gain is lost. I suggest to remove fast_atof() and use strtod() again.

Regression failover bug in SocketInitiator::getHost()

line 275-276 in SocketInitiator::getHost() got reversed from 1.124 -> 1.13.3

std::string portString = portStream.str();
portStream << SOCKET_CONNECT_PORT << num;

should be restored to:

portStream << SOCKET_CONNECT_PORT << num;
std::string portString = portStream.str();

because of the wrong order, failover does not work any more
Similarly in ThreadedSocketInitiator::getHost()

fd_set size limit

I just had a buffer overflow error detected on the SocketConnection constructor, and I suspect it's due to it using FD_SET.

I've done some searches on Google for the libc offset (0x10aefe) and found that similar errors were also possibly linked with FD_SET.

I don't know why the error is in libc, since FD_SET is a macro that doesn't use any external functions.

But I found out that in Linux (Ubuntu 12.04, to be more exact), the size of fd_set is 128 bytes, and since it is basically a vector of bits, it should be able to store up to the socket descriptor with value 1023.

I again searched on Google, and found out some evidences of this:
http://www.cplusplus.com/forum/unices/87978/
http://sigquit.wordpress.com/2009/12/24/stack-corruption-improper-use-of-fd_set/
http://stackoverflow.com/questions/848717/handling-more-than-1024-file-descriptors-in-c-on-linux

Another evidence that this might be the problem is that we just recently raise the open files limit.

So basically I'll try to do the hack of redefining __FD_SETSIZE (mentioned on the third link), but I think QuickFix should move on to more flexible and recommended APIs for socket polling. I can try to do a pull request if I have time to implement something, would this be of interest?

PS: Here is the backtrace I got for this error:

*** buffer overflow detected ***: XXXX terminated
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7f529058ff47]
/lib/x86_64-linux-gnu/libc.so.6(+0x109e40)[0x7f529058ee40]
/lib/x86_64-linux-gnu/libc.so.6(+0x10aefe)[0x7f529058fefe]
/usr/local/lib/libquickfix.so.15(_ZN3FIX16SocketConnectionC1ERNS_15SocketInitiatorERKNS_9SessionIDEiPNS_13SocketMonitorE+0x171)[0x7f52912e8ce1]
/usr/local/lib/libquickfix.so.15(_ZN3FIX15SocketInitiator9doConnectERKNS_9SessionIDERKNS_10DictionaryE+0x495)[0x7f52912e4c65]
/usr/local/lib/libquickfix.so.15(_ZN3FIX9Initiator7connectEv+0x37c)[0x7f52912ddd8c]
/usr/local/lib/libquickfix.so.15(_ZN3FIX15SocketInitiator9onTimeoutERNS_15SocketConnectorE+0x68)[0x7f52912e27c8]
/usr/local/lib/libquickfix.so.15(_ZN3FIX13SocketMonitor5blockERNS0_8StrategyEbd+0x2b8)[0x7f52912e6ef8]
/usr/local/lib/libquickfix.so.15(_ZN3FIX15SocketConnector5blockERNS0_8StrategyEbd+0x28)[0x7f52912d7e58]
/usr/local/lib/libquickfix.so.15(_ZN3FIX15SocketInitiator7onStartEv+0x45)[0x7f52912e26d5]
/usr/local/lib/libquickfix.so.15(_ZN3FIX9Initiator11startThreadEPv+0xa)[0x7f52912dc91a]
/lib/x86_64-linux-gnu/libpthread.so.0(+0x7e9a)[0x7f529084ce9a]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7f52905793fd]

invalid address alignment

t@7 (l@7) terminated by signal BUS (invalid address alignment)
Current function is FIX::integer_to_string
(short)(p) = (short)(digit_pairs + 2 * number);

is a problem on sparc (and some other architectures as well). Think should be changed to

//p -= 2;
//(short)(p) = (short)(digit_pairs + 2 * number);
*--p = digit_pairs + 2 * number + 1;
*--p = digit_pairs + 2 * number;

Linking error

Trying to build HEAD on 64bit Gentoo Linux, but running into a linking error:

Creating libUnitTest++.a library...
Linking TestUnitTest++...
Running unit tests...
terminate called after throwing an instance of 'char const*'
Makefile:79: recipe for target 'TestUnitTest++' failed
make[2]: *** [TestUnitTest++] Aborted
make[2]: *** Deleting file 'TestUnitTest++'
make[2]: Leaving directory '/var/tmp/portage/dev-libs/quickfix-9999/work/quickfix/UnitTest++'
Makefile:484: recipe for target 'all-recursive' failed
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory '/var/tmp/portage/dev-libs/quickfix-9999/work/quickfix'
Makefile:392: recipe for target 'all' failed
make: *** [all] Error 2

configure option -with-mysql=no does not work

When I give configure the option -with-mysql=no, libquickfix.so is still linked to libmysqlclient.so, although HAVE_MYSQL is correctly not defined in config.h. This is a working patch:

Index: quickfix/m4/ax_lib_mysql.m4

--- quickfix/m4/ax_lib_mysql.m4 (Revision 71)
+++ quickfix/m4/ax_lib_mysql.m4 (Revision 72)
@@ -6,8 +6,6 @@

AC_DEFUN([_MYSQL_CHECK],[
AC_REQUIRE([_MYSQL_CONFIG])

  • MYSQL_CFLAGS=$mysql_config --cflags
  • MYSQL_LIBS=$mysql_config --libs
    AC_SUBST(MYSQL_CFLAGS)
    AC_SUBST(MYSQL_LIBS)
    ])
    @@ -30,6 +28,8 @@
    then
    AC_REQUIRE([_MYSQL_CHECK])
    AC_DEFINE(HAVE_MYSQL, 1, Define if you have sql library (-lmysqlclient))
  •   MYSQL_CFLAGS=`$mysql_config --cflags`
    
  •    MYSQL_LIBS=`$mysql_config --libs`
    
    fi
    AM_CONDITIONAL(HAVE_MYSQL, $has_mysql)
    ])

Including MySQLStore and MySQLLog with the Python Library

I have added MySQLStore, MySQLLog to the swig interface file on my local copy of quickfix 1.14.3.

I have not completed my testing of MySQLLog, however MySQLStore works great.

My question is why are these modules no included by default? If there is a reason, it would be useful to know.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.