[Quickfix-developers] Re: some changes in C++ version
Brought to you by:
orenmnero
|
From: Alexey Z. <ale...@in...> - 2005-06-09 13:06:06
|
Hi,
The point 3a ( if (result && !num ) ) is not right, please ignore.
It was applied during integration with CME (GLOBEX) and solved one of
problems,
but in real production it caused to losing messages.
Sorry.
Regards, Alexey.
Alexey Zubko wrote:
> 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 );
>
>
|