Re: [Quickfix-developers] Adding fields to all reject messages
Brought to you by:
orenmnero
From: H. S. <st...@st...> - 2004-02-18 09:21:19
|
Guys, as OnBehalfOfCompID and DeliverToCompID are widely used in large FIX networks to add kind of "routing informations" to FIX messages, we've added the fields to Session.cpp in Session::generateReject(), as these kind of messages do need to be addressed to the sell/buyside fix engine (which is not true e.g. for ResendRequest messages). In that scenario, you have a single FIX connection serving your trading counterparts which are all addressed by fields 115/128. We asked for a good place to add this in a earlier post, but maybe one of you guys is also in need for such a functionality. Therefore you can find the patch below, thats how far we've patched it for now. Maybe we've overseen some issues and Oren gives us a hint where these fields have to be added, too. Comments are welcome :) Regards, Heri --- Session.cpp.old 2003-08-11 00:41:20.000000000 +0200 +++ Session.cpp 2004-02-17 20:34:15.000000000 +0100 @@ -642,17 +642,34 @@ Message reject; reject.getHeader().setField( MsgType( "3" ) ); + OnBehalfOfCompID onBehalfOfCompID; + DeliverToCompID deliverToCompID; fill( reject.getHeader() ); + + if ( message.getHeader().isSetField( onBehalfOfCompID ) ) + { + message.getHeader().getField( onBehalfOfCompID ); + reject.getHeader().setField( DeliverToCompID( onBehalfOfCompID ) ); + } + if ( message.getHeader().isSetField( deliverToCompID ) ) + { + message.getHeader().getField( deliverToCompID); + reject.getHeader().setField( OnBehalfOfCompID( deliverToCompID ) ); + } + + + MsgSeqNum msgSeqNum; MsgType msgType; PossDupFlag possDupFlag( false ); - + message.getHeader().getField( msgType ); message.getHeader().getField( msgSeqNum ); + if ( message.getHeader().isSetField( possDupFlag ) ) message.getHeader().getField( possDupFlag ); - + reject.setField( RefSeqNum( msgSeqNum ) ); if ( beginString >= FIX::BeginString_FIX42 ) { @@ -667,7 +684,9 @@ if ( msgType != MsgType_Logon && msgType != MsgType_SequenceReset && !possDupFlag ) { m_state.incrNextTargetMsgSeqNum(); } + + const std::string* reason = 0; switch ( err ) @@ -741,12 +760,24 @@ MsgType msgType; MsgSeqNum msgSeqNum; PossDupFlag possDupFlag( false ); + OnBehalfOfCompID onBehalfOfCompID; + DeliverToCompID deliverToCompID; message.getHeader().getField( msgType ); message.getHeader().getField( msgSeqNum ); if ( beginString >= FIX::BeginString_FIX42 ) reject.setField( RefMsgType( msgType ) ); reject.setField( RefSeqNum( msgSeqNum ) ); + if ( message.getHeader().isSetField( onBehalfOfCompID ) ) + { + message.getHeader().getField( onBehalfOfCompID ); + reject.getHeader().setField( DeliverToCompID( onBehalfOfCompID ) ); + } + if ( message.getHeader().isSetField( deliverToCompID ) ) + { + message.getHeader().getField( deliverToCompID); + reject.getHeader().setField( OnBehalfOfCompID( deliverToCompID ) ); + } if ( msgType != MsgType_Logon && msgType != MsgType_SequenceReset && !possDupFlag ) |