protected void NextLogon(Message logon) { Fields.ResetSeqNumFlag resetSeqNumFlag = new Fields.ResetSeqNumFlag(false); if (logon.IsSetField(resetSeqNumFlag)) { logon.GetField(resetSeqNumFlag); } state_.ReceivedReset = resetSeqNumFlag.Obj; if (!state_.IsInitiator && this.ResetOnLogon) { state_.Reset(); } if (!Verify(logon, false, true)) { return; } if (!IsGoodTime(logon)) { this.Log.OnEvent("Logon had bad sending time"); Disconnect("bad sending time"); return; } state_.ReceivedLogon = true; this.Log.OnEvent("Received logon"); if (!state_.IsInitiator) { int heartBtInt = logon.GetInt(Fields.Tags.HeartBtInt); state_.HeartBtInt = heartBtInt; GenerateLogon(heartBtInt); this.Log.OnEvent("Responding to logon request"); } state_.SentReset = false; state_.ReceivedReset = false; int msgSeqNum = logon.Header.GetInt(Fields.Tags.MsgSeqNum); if (IsTargetTooHigh(msgSeqNum) && !resetSeqNumFlag.Obj) { DoTargetTooHigh(logon, msgSeqNum); } else { state_.IncrNextTargetMsgSeqNum(); NextQueued(); } }
protected void NextLogon(Message logon) { Fields.ResetSeqNumFlag resetSeqNumFlag = new Fields.ResetSeqNumFlag(false); if (logon.IsSetField(resetSeqNumFlag)) logon.GetField(resetSeqNumFlag); state_.ReceivedReset = resetSeqNumFlag.Obj; if (state_.ReceivedReset) { this.Log.OnEvent("Logon contains ResetSeqNumFlag=Y, reseting sequence numbers to 1"); if (!state_.SentReset) { state_.Reset("Reseting because reset was requested by counterparty."); } } if (!state_.IsInitiator && this.ResetOnLogon) state_.Reset("ResetOnLogon"); if (!Verify(logon, false, true)) return; if (!IsGoodTime(logon)) { this.Log.OnEvent("Logon had bad sending time"); Disconnect("bad sending time"); return; } state_.ReceivedLogon = true; this.Log.OnEvent("Received logon"); if (!state_.IsInitiator) { int heartBtInt = logon.GetInt(Fields.Tags.HeartBtInt); state_.HeartBtInt = heartBtInt; GenerateLogon(logon); this.Log.OnEvent("Responding to logon request"); } state_.SentReset = false; state_.ReceivedReset = false; int msgSeqNum = logon.Header.GetInt(Fields.Tags.MsgSeqNum); if (IsTargetTooHigh(msgSeqNum) && !resetSeqNumFlag.Obj) { DoTargetTooHigh(logon, msgSeqNum); } else { state_.IncrNextTargetMsgSeqNum(); NextQueued(); } if (this.IsLoggedOn) this.Application.OnLogon(this.SessionID); }