Re: [Quickfix-developers] Adding fields to all reject messages
Brought to you by:
orenmnero
From: Oren M. <ore...@ya...> - 2004-02-18 11:31:53
|
Heri, This looks about right to me. I have a couple of suggestions to improve it. First I would like to see the duplicated code rolled up into a method. This could be done in Session, however I think a more generally usefull place might be in the message class itself. Imagine a usage something like this: message.invert( reject ); or message.reverse( reject ); or something to that affect. The nice thing about this is that same method can be used in application code as well. The other thing is that I think that this would also be useful for SenderSubID and TargetCompID. So this inversion method could also check for the presence of those and tag them into the new message in the same manner. In fact, I think there are a few more field pairs in the header this may qualify for. We can even make it smarter and have it do the same with SenderCompID and SenderSubID, and also tag it with the same BeginString. That way we we can do things like: fromApp( Message request, SessionID sessionID ) { Message response; response.invert( request ); ... // has everything it needs to route from invert call Session::sendToTarget( response ); } --- "H. Steuer" <st...@st...> wrote: > 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 ) > > > > ------------------------------------------------------- > SF.Net is sponsored by: Speed Start Your Linux Apps > Now. > Build and deploy apps & Web services for Linux with > a free DVD software kit from IBM. Click Now! > http://ads.osdn.com/?ad_id=1356&alloc_id=3438&op=click > _______________________________________________ > Quickfix-developers mailing list > Qui...@li... > https://lists.sourceforge.net/lists/listinfo/quickfix-developers __________________________________ Do you Yahoo!? Yahoo! Mail SpamGuard - Read only the mail you want. http://antispam.yahoo.com/tools |