[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
|