public bool Verify(Message msg, bool checkTooHigh, bool checkTooLow)
{
int msgSeqNum = 0;
string msgType = "";
try
{
msgType = msg.Header.GetField(Fields.Tags.MsgType);
string senderCompID = msg.Header.GetField(Fields.Tags.SenderCompID);
string targetCompID = msg.Header.GetField(Fields.Tags.TargetCompID);
if (!IsCorrectCompID(senderCompID, targetCompID))
{
GenerateReject(msg, FixValues.SessionRejectReason.COMPID_PROBLEM);
GenerateLogout();
return(false);
}
if (checkTooHigh || checkTooLow)
{
msgSeqNum = msg.Header.GetInt(Fields.Tags.MsgSeqNum);
}
if (checkTooHigh && IsTargetTooHigh(msgSeqNum))
{
DoTargetTooHigh(msg, msgSeqNum);
return(false);
}
else if (checkTooLow && IsTargetTooLow(msgSeqNum))
{
DoTargetTooLow(msg, msgSeqNum);
return(false);
}
if ((checkTooHigh || checkTooLow) && state_.ResendRequested())
{
ResendRange range = state_.GetResendRange();
if (msgSeqNum >= range.EndSeqNo)
{
this.Log.OnEvent("ResendRequest for messages FROM: " + range.BeginSeqNo + " TO: " + range.EndSeqNo + " has been satisfied.");
state_.SetResendRange(0, 0);
}
}
if (CheckLatency && !IsGoodTime(msg))
{
this.Log.OnEvent("Sending time accuracy problem");
GenerateReject(msg, FixValues.SessionRejectReason.SENDING_TIME_ACCURACY_PROBLEM);
GenerateLogout();
return(false);
}
}
catch (System.Exception e)
{
this.Log.OnEvent("Verify failed: " + e.Message);
Disconnect("Verify failed: " + e.Message);
return(false);
}
state_.LastReceivedTimeTickCount = System.Environment.TickCount;
state_.TestRequestCounter = 0;
if (Message.IsAdminMsgType(msgType))
{
this.Application.FromAdmin(msg, this.SessionID);
}
else
{
this.Application.FromApp(msg, this.SessionID);
}
return(true);
}