in FixAntenna/NetCore/FixEngine/Session/AcceptorFixSession.cs [163:242]
public override void Reject(string reason)
{
if (Log.IsDebugEnabled)
{
Log.Debug("Session " + Parameters.SessionId + " rejecting...");
}
lock (SessionLock)
{
if (SessionState.IsNotDisconnected(SessionState))
{
throw new InvalidOperationException("Cannot connect while:" + SessionState);
}
SessionState = SessionState.WaitingForLogon;
try
{
InitSessionInternal();
if (Log.IsDebugEnabled)
{
Log.Debug("Starting MessagePumper thread. Outgoing seq number:" + RuntimeState.OutSeqNum);
}
Pumper.Start();
if (Log.IsDebugEnabled)
{
Log.Debug("Pumper started");
}
SetAttribute(ExtendedFixSessionAttribute.RejectSession, true);
try
{
//TBD! reuse buffer
var buff = new MsgBuf(Parameters.IncomingLoginMessage.AsByteArray());
MessageHandlers.OnMessage(buff);
}
catch (Exception e)
{
if (Log.IsDebugEnabled)
{
Log.Warn("Invalid login message received:" + Parameters.IncomingLoginMessage.ToString(),
e);
}
else
{
Log.Warn("Invalid login message received:" + Parameters.IncomingLoginMessage.ToString() +
". Reason: " + e.Message);
}
}
//close incoming message storage manually - reader thread not started
IncomingStorage.Dispose();
var sessionState = SessionState;
if (sessionState != SessionState.WaitingForLogoff
&& sessionState != SessionState.WaitingForForcedLogoff
&& sessionState != SessionState.WaitingForForcedDisconnect
&& sessionState != SessionState.Disconnected
&& sessionState != SessionState.DisconnectedAbnormally
&& sessionState != SessionState.Dead)
{
Disconnect(DisconnectReason.Reject, reason);
}
}
catch (IOException e)
{
if (Log.IsDebugEnabled)
{
Log.Warn("Init session failed. Cause: " + e.Message, e);
}
else
{
Log.Warn("Init session failed. Cause: " + e.Message);
}
}
finally
{
RemoveAttribute(ExtendedFixSessionAttribute.RejectSession);
}
}
}