[Quickfix-developers] some changes in C++ version
Brought to you by:
orenmnero
|
From: Alexey Z. <ale...@in...> - 2005-06-08 17:02:00
|
Hi,
I've just updated QF version from CVS and found out additional changes I
had in my code.
I think some of these fixes are still important.
1. src\C++\FieldConvertors.h
If one puts a char field with value '\0' - QF will truncate the message
during sending (send(..c_str()....).
static std::string convert( char value )
{
- return std::string( 1, value );
+ std::string ret;
+ if(value)
+ {
+ ret.assign(1, value);
+ }
+ return ret;
}
2. src\C++\FieldMap.h
I had a compilation error and I added FieldMap:: in several places in
this file.
I think the problem was in different order of #include's, anyway:
- typedef Fields::const_iterator iterator;
+ typedef FieldMap::Fields::const_iterator iterator;
....
3. src\C++\Session.cpp
a) QF incremented seqnum even if result of the send() function wasn't
succeed.
@@ -461,7 +461,7 @@
catch ( DoNotSend& ) { return false; }
}
- if ( !num )
+ if (result && !num )
{
MsgSeqNum msgSeqNum;
header.getField( msgSeqNum );
b) QF not always adds milliseconds when it's necessary:
@@ -527,7 +527,12 @@
Header& header = message.getHeader();
header.getField( sendingTime );
header.getField( msgSeqNum );
- header.setField( OrigSendingTime( sendingTime ) );
+
+/***/
+ bool millisecondsInTimeStamp = m_millisecondsInTimeStamp &&
(m_sessionID.getBeginString() >= BeginString_FIX42);
+ header.setField(FIELD::OrigSendingTime,
UtcTimeStampConvertor::convert(sendingTime, millisecondsInTimeStamp));
+// header.setField( OrigSendingTime( sendingTime ) );
+
header.setField( PossDupFlag( true ) );
insertSendingTime( header );
@@ -611,7 +620,11 @@
NewSeqNo newSeqNo( endSeqNo );
sequenceReset.getHeader().setField( MsgType( "4" ) );
sequenceReset.getHeader().setField( PossDupFlag( true ) );
- sequenceReset.getHeader().setField( OrigSendingTime() );
+/***/
+ UtcTimeStamp now;
+ bool millisecondsInTimeStamp = m_millisecondsInTimeStamp &&
(m_sessionID.getBeginString() >= BeginString_FIX42);
+ sequenceReset.getHeader().setField(FIELD::OrigSendingTime,
UtcTimeStampConvertor::convert(now, millisecondsInTimeStamp));
+// sequenceReset.getHeader().setField( OrigSendingTime() );
sequenceReset.setField( newSeqNo );
--
Regards,
Alexey Zubko
Infinium Capital Corporation
(416) 360-7000 ext. 305
|