[Quickfix-developers] Changed code to suppress RefMsgType, RefTagID and SessionRejectReason tags in
Brought to you by:
orenmnero
From: Bernard S. <bsp...@gx...> - 2002-05-10 15:28:54
|
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 |