in FixAntenna/NetCore/FixEngine/Acceptor/FixConnectionHandler.cs [74:160]
public virtual void OnConnect(ITransport transport)
{
// // TODO the MAX_MESSAGE_SIZE and VALIDATE_CHECK_SUM should be taken from session parameters
// int maxMessageSize = Configuration.getGlobalConfiguration().getPropertyAsInt(Configuration.MAX_MESSAGE_SIZE);
// boolean validateCheckSum = Configuration.getGlobalConfiguration().getPropertyAsBoolean(Configuration.VALIDATE_CHECK_SUM, true);
// final AcceptorFIXTransport fixTransport = new AcceptorFIXTransport(transport, maxMessageSize, validateCheckSum);
var config = (Config)_configuration.Clone();
var fixTransport = _transportFactory.CreateAcceptorTransport(transport, config);
try
{
var logon = new FixMessage();
var readLogonTimeTicks = WaitForLogon(fixTransport, logon);
if (readLogonTimeTicks <= 0)
{
return;
}
if (!FixMessageUtil.IsLogon(logon))
{
if (Log.IsInfoEnabled)
{
Log.Info(
$"Initial message is not a logon: {logon.ToPrintableString()} received on local endpoint: {transport.LocalEndPoint.AsString()} from remote endpoint: {transport.RemoteEndPoint.AsString()}");
}
if (Log.IsDebugEnabled)
{
Log.Debug($"logon variable:{logon.ToPrintableString()}");
}
CloseTransport(fixTransport);
return;
}
var parseResult = _logonMessageParser.ParseLogon(config, logon, transport.RemoteEndPoint.Address.AsString(), transport.LocalEndPoint.Port);
var sessionParameters = parseResult.SessionParameters;
sessionParameters.LogonReadTimeTicks = readLogonTimeTicks;
if (Log.IsInfoEnabled)
{
Log.Info(
$"Logon message received on local endpoint: {transport.LocalEndPoint.AsString()} from: {transport.RemoteEndPoint.AsString()} for sessionID: {sessionParameters.SessionId}");
}
// check if secured connection required
var isSslConfigured = sessionParameters.Configuration.GetPropertyAsBoolean(Config.RequireSsl);
var isConnectionSecure = transport.IsSecured;
if (isSslConfigured && !isConnectionSecure)
{
Log.Error($"Session {sessionParameters.SessionId} configured as secure, but connected on unsecured connection from remote endpoint {transport.RemoteEndPoint.AsString()}.");
CloseTransport(fixTransport);
return;
}
if (Log.IsDebugEnabled)
{
Log.Debug($"Parameters: {sessionParameters}");
Log.Debug($"App version: {sessionParameters.AppVersion}");
}
_sessionAcceptorStrategyHandler.HandleIncomingConnection(sessionParameters, fixTransport);
}
catch (ThreadInterruptedException)
{
// do nothing
Log.Trace("Thread interrupted.");
}
catch (DuplicateSessionException e)
{
if (Log.IsDebugEnabled)
{
Log.Warn("DuplicatedSessionException", e);
}
else
{
Log.Warn(e);
}
CloseTransport(fixTransport);
}
catch (Exception e)
{
Log.Error("Exception:", e);
CloseTransport(fixTransport);
}
}