Re: [Quickfix-developers] Changed code to suppress RefMsgType, RefTagID and SessionRejectReason tag
Brought to you by:
orenmnero
From: <OM...@th...> - 2002-05-10 22:29:44
|
Bernard, One other thing I would suggest is to change the check from: if(beginString != FIX::BeginString_FIX41) to: if(beginString >= FIX::BeginString_FIX42) That way earlier versions like 4.0 will also be sent without those fields. In order to do this you will also need to add a new operator overload for > = to the StringField class. Alternatively you can just get the field out as a string ( using getValue() ) and do the comparison against that. Thanks for the patch. --oren |---------+-----------------------------------------------> | | "Bernard Spanger" | | | <bsp...@gx...> | | | Sent by: | | | qui...@li...ur| | | ceforge.net | | | | | | | | | 05/10/2002 10:28 AM | | | | |---------+-----------------------------------------------> >----------------------------------------------------------------------------------------------| | | | To: <qui...@li...> | | cc: | | Subject: [Quickfix-developers] Changed code to suppress RefMsgType, RefTagID and | | SessionRejectReason tags in FIX 4.1 Reject Message | >----------------------------------------------------------------------------------------------| If anyone is using QuickFIX for a 4.1 session, following are the changes I made to Session.cpp to suppress the RefMsgType, RefTagID and SessionRejectReason tags in the Reject Message. Before this change, a reject message caused each side to continue to exchange infinite reject messages. This seems to take care of the problem. - Bernard ---------------------------------------------------------------------------- ---- void Session::generateReject( const Message& message, int err, int field ) { Message reject; reject.getHeader().setField(MsgType("3")); fill( reject.getHeader() ); FIX::BeginString beginString; // Changed by Bernard on 5/10/02. message.getHeader().getField(beginString); MsgSeqNum msgSeqNum; MsgType msgType; message.getHeader().getField(msgType); message.getHeader().getField(msgSeqNum); if (beginString != FIX::BeginString_FIX41) { // Changed by Bernard on 5/10/02. reject.setField(RefMsgType(msgType)); reject.setField(SessionRejectReason(err)); } reject.setField(RefSeqNum(msgSeqNum)); if( msgType != "A" && msgType != "4") m_pStore->incrNextTargetMsgSeqNum(); switch( err ) { case 0: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField(Text("Invalid tag number")); break; case 1: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField(Text("Required tag missing")); break; case 2: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField(Text("Tag not defined for this message type")); break; case 4: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField(Text("Tag specified without a value")); break; case 5: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField (Text("Value is incorrect (out of range) for this tag")); break; case 6: if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefTagID(field)); reject.setField(Text("Incorrect data format for value")); break; case 9: reject.setField(Text("CompID problem")); break; case 10: reject.setField(Text("SendingTime accuracy problem")); break; case 11: reject.setField(Text("Invalid MsgType")); break; }; sendRaw(reject); } void Session::generateReject( const Message& message, const std::string& str ) { Message reject; reject.getHeader().setField(MsgType("3")); fill( reject.getHeader() ); FIX::BeginString beginString; // Changed by Bernard on 5/10/02. message.getHeader().getField(beginString); MsgType msgType; MsgSeqNum msgSeqNum; message.getHeader().getField(msgType); message.getHeader().getField(msgSeqNum); if (beginString != FIX::BeginString_FIX41) // Changed by Bernard on 5/10/02. reject.setField(RefMsgType(msgType)); reject.setField(RefSeqNum(msgSeqNum)); if( msgType != "A" && msgType != "4") m_pStore->incrNextTargetMsgSeqNum(); reject.setField(Text(str)); sendRaw(reject); } ------------------------------------------ Bernard Spanger bsp...@gx... G. X. Clarke & Co. 10 Exchange Place Jersey City, NJ 07302 201-200-3607 _______________________________________________________________ Have big pipes? SourceForge.net is looking for download mirrors. We supply the hardware. You get the recognition. Email Us: ban...@so... _______________________________________________ Quickfix-developers mailing list Qui...@li... https://lists.sourceforge.net/lists/listinfo/quickfix-developers |