B2BITS FIX Antenna C++  2.27.0
Configuration

Table of Contents

FIX Antenna reads the configuration parameters by default from the engine.properties file during initialization.

The user can also assign another name for the configuration file, such as the Engine::FixEngine::init(const std::string& aPropertiesFileName = "") call parameter.

For example:

Engine::FixEngine::init("FE.properties");

Common parameters

Below you will find sample of engine.properties file. See Engine::FIXPropertiesNames for detailed description of each parameter.

# The FIX Engine configuration file.
#
# $Revision: 1.193 $

# For UNIX platforms, the filename-separator character is "/".
# For Win32 platforms, the filename-separator character is "\\" or "/".

#######################################################################
# Engine settings
#######################################################################

# The top of the directory tree under which the engine's configuration,
# and log files are kept.
#
# Do NOT add a slash at the end of the directory path.
EngineRoot = .

# Engine's listen port. Must be > 0.
ListenPort = 9105

# Engine's listen SSL ports. Supports multiple values delimited by comma.
# Parameter is optional.
# Must not contain value of ListenPort
#ListenSSLPort = 9106

# Engine's SSL option whatever to validate peer certificate.
# Parameter is optional. Default is false
#SSLValidatePeerCertificate = false

# Engine's SSL certificate file path.
# Parameter is mandatory if ListenSSLPort is not empty.
#SSLCertificate = cert.pem

# Engine's SSL certificate's private key file path.
# Parameter is mandatory if ListenSSLPort is not empty.
#SSLPrivateKey = cert.pem

# Engine's SSL protocols to use.
# Parameter is mandatory. it is a comma separated list of protocols to use. Valid values are SSLv2, SSLv3, TLSv1, TLSv1_1, TLSv1_2.
#SSLProtocols = TLSv1, TLSv1_1, TLSv1_2

# Engine's SSL CA certificate file path.
# Parameter is optional
# SSLCACertificate = certCA.pem

# Whatever client's certificate is mandatory.
# If set to "true" then client connections without certificate will be rejected.
# Parameter is optional. Default is false.
# SSLRequireClientCertificate = true

# Allowed ciphers list configuration.
# Parameter is optional.
# See list of available ciphers and ciphers list format at https://www.openssl.org/docs/man1.0.2/apps/ciphers.html
#SSLCiphersList = AES+aRSA:AES+aECDH:AES+aECDSA:@STRENGTH

# The license file path.
LicenseFile=engine.license

# Engine's local IP address to bind to. It can be used on a multi-homed host
# for a FIX Engine that will only accept connect requests to one of its addresses.
# If this parameter is commented or empty, the engine will accept connections
# to any/all local addresses.
#ListenAddress = 

# Engine's log file name.
#
# If this parameter is commented or empty, the 'engine.log' will be used. 
# LogFileName = FIXAntenna_C++.log

# Engine's local IP address to send messages from. It is used only  for multi-homed hosts
# If this parameter is commented or empty, the engine will send IP datagrams from any/all 
# local addresses.
ConnectAddress = 

# Number of threads that serve FIX sessions.This is independent of the number of sessions.
# The recommended value is 10. The value must be integer and greater than zero.
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
NumberOfWorkers = 10

# This property is the path of the directory in which the logs for all incoming 
# (if LogIncomingMessages is set to "true") and outgoing FIX messages are stored. 
# It is possible to specify a path related to the EngineRoot directory. 
# For example if LogDirectory is set to \"logs\" then the real path is $(EngineRoot)/logs.
# The specified directory must exist.
LogDirectory = logs

# Relative path to the backup folder. This folder will be used for message storage files
# of the backup connections.
BackupDirectory = logs/backup

#######################################################################
# Session settings
#######################################################################

# This property provides an option to log incoming FIX messages (those received) from 
# a counterparty FIX Engine. They will be stored in the directory specified by 
# the LogDirectory parameter in a file with extension "in".
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development should be true. In production should be false.
LogIncomingMessages = true

# This parameter sets the time period after which a session is non-gracefully terminated 
# if a response is not received to a first "Logon" message (message type A). 
# The corresponding Logout message is sent to the counterparty.
# This value is in seconds. 
# The recommended value is 30 seconds for dedicated connections or private networks. 
# Trading connections via the internet will require calibration. 
# If it is set to "0", then the time period is unlimited. 
# The value must be integer and not negative.
LogonTimeFrame = 3

# This parameter sets the time period after which a session is automatically terminated 
# if a response is not received to a "Logout message" (message type 5). 
# This value is in seconds. 
# The recommended value is 10 seconds for dedicated connections or private networks. 
# Trading connections via the internet will require calibration. 
# The value must be integer and greater than 0.
LogoutTimeFrame = 3

# An option not to reset sequence numbers after Logout.
# Logout sender should initiate session recovery by sending Logon message
# with SeqNum = <last outgoing SeqNum> + 1;
# expecting reply Logon with SeqNum = <last incoming SeqNum> + 1.
# If a gap is detected, standard message recovery or gap filling process
# takes place.
IntradayLogoutTolerance = false

# This parameter specifies the delta (increment) to the Heartbeat interval between
# a TestRequest message being sent by FIX Engine and a Response Heartbeat being received. 
# The session attains a "telecommunication failed state" if no Response Heartbeat message 
# is received after the normal Heartbeat interval plus delta. For example if no message 
# (application or session level) is received during the Heartbeat interval then Engine sends 
# a TestRequest message. If the required Response Heartbeat message is not received during 
# Heartbeat interval plus Delta then the session moves to the state "Telecommunication link 
# failed". This parameter is specified in (Heartbeat Interval/100). The recommended value is 
# twenty percent.
ReasonableTransmissionTime = 20

# FIX Engine has inbuilt FIX message routing capability and  fully supports 
# the "Deliver To On Behalf Of" mechanism as specified by the FIX protocol.
# If this parameter is set to "true" then Engine will redirect FIX messages automatically 
# to other FIX sessions it maintains if OnBehalfOfCompID field in the message is defined. 
# If this parameter is set to "false" Engine directs all messages received to the client 
# application.
ThirdPartyRoutingIsEnabled = true

# This parameter defines custom raw FIX parser list delimeted by semicolon.
# Format of the value: [PARSER_NAME@][FIXT_PROTOCOL1:APP_PROTCOL1,[APP_PROTCOL1[, ...]] | [APP_PROTCOL1] ; ...
# Examples of one entry. Entries can be combined with semicolon to define more than one parser:
# FIX44;
# FIXT11:FIX50SP2;
# FIXT11:FIX50SP2,FIX50SP1;
# MyFixParser:FIX50SP2,FIX50SP1.
# AdditionalParsersList

# This parameter provides an option whereby FIX Engine will accept a FIX session for which it 
# has no registered application (an acceptor). If set to "true" Engine establishes a session, 
# all application level messages are rejected (Application Level Reject - type 3). When 
# an application is registered behaviour is as standard. If set to false then Logon messages 
# are ignored.
# Property is obsolete, UnregisteredAcceptor.CreateSession should be used instead.
# CreateUnregisteredAcceptorSession = true 

# This parameter provides an option whereby FIX Engine will accept a FIX session for which
# it has no registered application (an acceptor).
# If set to "true" Engine accepts incoming connection and creates corresponding Session object.
# If there is no Application associated with session, all application level messages are rejected
# with Application Level Reject(3) message. If an application is registered, the behavior is as standard.
# If set to false then Logon messages are ignored and incoming connection is dropped.
UnregisteredAcceptor.CreateSession = true

# This parameter specifies the time interval between attempts to deliver an application level 
# message to a registered client application in the event the application does not confirm 
# receipt and operation upon the message. The value is specified in milliseconds. 
# The value must be integer and greater than 0.
# This parameter is required only if the DelayedProcessing.MaxDeliveryTries
# parameter is specified.
DelayedProcessing.DeliveryTriesInterval = 500

# This parameter specifies the number of attempts that will be made to deliver an application 
# level message to the registered client application. If this value is exceeded then 
# the session will be closed with the logout reason "Application not available". The recommended value is 10.
# The value must be integer and not negative.
# This parameter is optional.
DelayedProcessing.MaxDeliveryTries = 2

# This parameter specifies the number of attempts to restore the session.
# The session is considered as restored if the telecommunication link was
# restored and the exchange of Logon messages was successful.
# If it is set to "-1", then the number of attempts is unlimited. 
# This value is integer. 
Reconnect.MaxTries = 3

# This parameter specifies the time interval between reconnection attempts in order to restore
# a communications link. This value is specified in milliseconds (seconds*10-3). 
# The recommended value is 1000 for dedicated connections and private networks. 
# Internet connections require calibration. The value must be integer and greater than 0.
Reconnect.Interval = 1000

# This parameter sets the time period after which a message rejecting is 
# starting while session isn't exists.
# Parameter isn't required. Value is specified in milliseconds (seconds*10-3), 
# must be integer and > 0.
MessageTimeToLive = 500

# This parameter defines the upper limit to the number of outgoing messages that are resent 
# in the event of a Resend Request. The recommended value is 20000 if no data on mean activity is known.
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# Larg storage increases application working set.
OutgoingMessagesStorageSize = 20000

# Resend Request resend messages by blocks. This parameter defines how many messages 
# procceed in block. 0 - all messages will be resend in one block. By default parameter is 1000.
# The value must be integer and not less than 0.
# ResendMessagesBlockSize = 1000

# Enables passing business messages with seqnum higher than expected (while resend request processing) to the process callback.
# Required for implementing enhanced resend request logic of CME iLink MSGW specification.
# Default value is false. It is recommended to enable this option only if it is required by counterparty 
DeliverAppMessagesOutOfOrder = false

# This parameter is an option whereby the version of FIX protocol used for the outgoing message
# is validated against that of the established session. If set to "true" then the application 
# must use the same version of the protocol as the established session otherwise an error 
# occurs. If set to false then the application level message will be sent to the counterparty. 
# The recommended value is "true".
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development should be true. In production should be false.
CheckVersionOfOutgoingMessages = true

# If this parameter is true than file streams are flushed after each I/O operation. 
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development and in production should be true. 
ExtraSafeMode = true

# An option to send a Logon message with the ResetSeqNumFlag set
# after each 24 hour period of session's activity to establish a new set
# of sequence numbers (starting with 1).
#
# This parameter is optional, the default value is false.
#
# NOTE:  This option does not affect sessions which use version 4.0 
# of the FIX protocol.
ResetSeqNumAfter24hours = false

# An option to write timestamps in the log files. 
# This parameter is optional, the default value is true.
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development should be true. In production should be false.
TimestampsInLogs = true

# This parameter contains name of the XML file with extensions of the FIX protocols.
DictionariesFilesList = fixdic40.xml;fixdic41.xml;fixdic42.xml;fixdic43.xml;fixdic44.xml;fixdic50.xml;fixdic50sp1.xml;fixdic50sp2.xml;fixdict11.xml;additional.xml

# Encryption config file
EncryptionConfigFile=encryption.properties

# This parameter allow to automatically resolve sequence gap problem. 
# When mode is ON session uses 141(ResetSeqNumFlag)
# tag in sending/confirming Logon message to reset SeqNum at the initiator or acceptor.
# Valid values:
# * "0" or "false" - Disable ForceSeqNumReset mode
# * "1" or "true" - Enable SeqNum reset at first time of session initiation
# * "2" - Enable SeqNum reset for every session initiation
ForceSeqNumReset=false

# This parameter allow to automatically reset SeqNum after every logon. 
ForceSeqNumResetOnLogon=false

# This paramter allow to resolve seqNum too low problem at logon.
# When it true - session continue with received seqNum.
#UnregisteredAcceptor.IgnoreSeqNumTooLowAtLogon = false

# When true, unregistered acceptors will reject messages in case they couldn't be sent 
# during interval
#UnregisteredAcceptor.RejectMessageWhileNoConnection = true

# When true, the TCP buffer (Nagle algorithm) will be disabled for the unregistered 
# acceptors. Otherwise, TCP may join and enqueu small packages until timeout 
# ends.
#UnregisteredAcceptor.tcpBufferDisabled = true

# FA able to join packages that wait for sending into the socket, this parameters 
# controls how many messages could be joined. 0 means infinite. Value should be 
# less than 1000000.
#UnregisteredAcceptor.maxMessagesAmountInBunch = 0

# Default storage type of the created unregistered sessions. By default persistent storage 
# type used. Use "transient" value to use transient storage for the sessions.
#UnregisteredAcceptor.SessionStorageType =

# Specifies total amount of the memory (in MB) that active session may use. 0 - means infinite.
# When limit is overbound - the "hardest" sessions will be closed nongracefully.
TotalOutgoingStorageMemoryLimit = 0

# Specified how much same ResendRequests received before Application::onResendRequestLoop is called.
# This option is disabled if value is less than 2.
DuplicateResendRequestLimit = 0

# Setting property "true" will reserve 10Mb of disc space for logging. 
# If log reaches 10Mbs, another 10Mbs will be reserved and so on.
# When property is "true" FixAntenna performance is greatly increased.
EnableIncrementalLogFileCreation = false

# Specifies amount of memory reserved for memory mapped file message storage for out/in file
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# Large value is better. 
Persistents.LogIncrementSize=1000000

# Specifies amount of memory reserved for memory mapped file message storage for idx file
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# Large value is better.
Persistents.IdxIncrementSize=10000

# Specifies maximum size of one slice for sliced message storage.
# Note: Storage slices are created with step, specified with Persistents.LogIncrementSize
# parameter value. If MaxSliceSize value is no multiple of Persistents.LogIncrementSize,
# result file size will be less, than specified.
# If value is less than LogIncrementSize, LogIncrementSize value will be used
# Recommended value: any multiple of Persistents.LogIncrementSize
# Default value is 500000000 - 500Mb
SplitPersistentMsgStorage.MaxSliceSize=500000000

# This property is the path of the directory, where sliced message storage will search
# for log files in case they not found in primary location. It is user responsibility to
# move files from primary location to backup.
# Default value is empty - backup path disabled.
SplitPersistentMsgStorage.BackupDir=

# If this property value is true, all session parameters will be printed 
# to the engine.log file.
Debug.LogSessionExtraParameters = true

# Message storage type for sessions, created without specified StorageType parameter, or
# with StorageType = default_StorageType
# This parameter is optional, default value is "persistentMM"
# Valid values:
# * "persistent" - file storage - slow and safe
# * "persistentMM" - Memory mapped file storage - fast and safe
# * "transient" - memory storage - quick but dangerous
# * "splitPersistent" - Split persistent file storage - fast and safe
# * "null" - Simple storage, that does not store anything - extra-fast
DefaultStorageType=persistentMM

# If this parameter is true, FIX Engine will try to restore index file from log file in case when
# index file is missed or corrupted
# This parameter is optional, default value is "false"
# Note: Please be carefully enabling this property, restoring process uses some
# heuristic algoritms, and some data(not messages) could be missed
MessageStorage.IndexRebuildEnabled=false

# If this option is enabled, FIX Engine will not rebuild index files for message stoarges,
# that does not support embedded Reject Flag Marker
# This parameter is optional, default value is "true"
MessageStorage.RequireRejectFlagSupport=true

# DBL TCP listen address and port.
# Format: <XXX.XXX.XXX.XXX>:<port>.
# This parameter is optional.
# Myricom.Dbl.TcpListenAddresses

# This property tells how will be initialized Myricom DBL TCP API.
# If true it will be used SocketAdaptor to emulate DBL API via generic sockets.
# Default value is false.
# This parameter is optional.
# Myricom.Dbl.UseSocketAdaptor = false

# When it's set to true there is being enabled backward resolve based DNS entry spoofing detection mechanism in DNS related functions.
# Note: If the parameter is enabled, a user should use Fully Qualified Domain Name (FQDN) or IP addresses as configuration/function
# parameters (e.g. 'workstation1.epam.com' instead of 'workstation1'). Otherwise errors about DNS spoofing will be reported.
# This option is disabled by default.
# EnableDnsEntrySpoofingDetection = false

# Defines how to serialize UTCTimestamp or UTCTimeOnly field values:
# 0 - default mode -  if the value of milliseconds is not equal to 0 then it will be serialized.
# 1 - always serialize milliseconds
# 2 - always truncate milliseconds
# By default this parameter is 0
# It is a global option for FixEngine. 
# It works only when a value is passed as Engine::UTCTimestamp or Engine::UTCTimeOnly.
#KeepMillisecondsInUTCTimeFields = 0

#######################################################################
# Validation
#######################################################################

# This parameter controls existence of required tags in application level messages. 
# The possible values are "true" and "false". If set to "true" then all application 
# level messages are validated. If set to "false" then the responsibility for message validity 
# rests with the counterparty. Please note that session level messages are validated in 
# all cases. The recommended setting is "true".
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development should be true. In production should be false.
MessageMustBeValidated = true

# If true any field that is unknown to dictionary will be ignored. 
# Should be false for development, true for production because
# if false FA stores all unknown fields in the FIXMessage in the list
# on the heap. With true it would ignore these fields thus limit
# storage on heap
# IMPORTANT NOTE: this value has priority over all other validation settings. for 
# example. Even If MessageMustBeValidated = true, or ProhibitUnknownTags = true, 
# or VerifyTagsValues= true unknown fields are ignored
# WARNING: Changing this value will impact upon the performance of FIX Engine. 
# In the development should be false and all unknown fields should 
# be listed in the dictionary file. In production should be true.
IgnoreUnknownFields = false

# This parameter controls tag values validation. 
# The possible values are "true" and "false". If set to "true" then all
# messages will be validated. If set to "false" then the responsibility for message validity 
# rests with the counterparty. 
# Default: false
VerifyTagsValues = false

# This parameter controls unknown tag handling.
# The possible values are "true" and "false". If set to "false" then all unknown 
# fields will be stored to the message. If set to "true", engine will reject messages
# with unknown fields. 
# Default: false
ProhibitUnknownTags = false

# This parameter controls repeating group size checking. If true, engine will reject 
# messages with incorrect repeating group size. Otherwise message will be passed to the 
# application layer. In this case the responsibility for message validity 
# rests with the counterparty. 
# Default: false
VerifyReperatingGroupBounds = false

# This parameter controls the validation of required fields in repeating group. 
# The possible values are "true" and "false". If set to "true" then repeating 
# groups will be checked for presence of required fields. 
# If set to "false" then the responsibility for repeating group validity 
# rests with the counterparty. 
# The recommended setting is "true". 
# This parameter is optional. 
# The default value is "true". 
Validation.CheckRequiredGroupFields = true

# When true, raw message may contains leading group tag with 0 value - it will be ignored.
# Otherwise exception was fired.
AllowZeroNumInGroup = false

# When true, raw message may contains tags without values - they will be ignored.
# Otherwise exception was fired.
AllowEmptyFieldValue = false

#######################################################################
# Engine monitoring
#######################################################################

# Enables/disables Engine monitoring
Monitoring.Enable = true

# The engine TCP listen port that is enabled for administrative sessions
# The parameter is not required.
# If port is configured it will be added to set of engine listen ports and administrative sessions will be accepted on this port only
# If not exists or empty common engine listen ports are used to accept administrative sessions
Monitoring.ListenPort =

# Default monitoring properties

# TargetSubID (tag 57) - assigned value used to identify 
# specific individual or unit intended to receive message.
Monitoring.AdminSessionDef.TargetSubID = 

# SenderLocationID (tag 142) - assigned value used to identify 
# specific message originator's location (i.e. geographic 
# location and/or desk, trader).
Monitoring.AdminSessionDef.SenderLocationID = 

# TargetLocationID_ (tag 143) - assigned value used to identify 
# specific message destination's location (i.e. geographic 
# location and/or desk, trader).
Monitoring.AdminSessionDef.TargetLocationID = 

# The expected value of the Username (Tag 553) field in the incoming Logon message. 
# If the real value is not equal to the expected one then the session is disconnected 
# without sending a message and the error condition is generated in the log output. 
Monitoring.AdminSessionDef.Username = 

# The expected value of the Password (Tag 554) field in the incoming Logon message. 
# If the real value is not equal to the expected one then the session is disconnected 
# without sending a message and the error condition is generated in the log output. 
Monitoring.AdminSessionDef.Password = 

# The expected value of the source IP address. If the real value is not equal to the expected one 
# then the session is disconnected without sending a message and the error condition is generated 
# in the log output.
Monitoring.AdminSessionDef.SourceIPaddress = 

# The expected value of the encryption method.  
Monitoring.AdminSessionDef.EncryptMethod = NONE

# Intraday logout tolerance mode.
# An option to reset or not to reset sequence numbers after Logout.
Monitoring.AdminSessionDef.IntradayLogoutToleranceMode = false

# Force SeqNum reset mode.
# An option to use 141 tag in Logon message to reset sequence number.
Monitoring.AdminSessionDef.ForceSeqNumResetMode = false

# When true, session ignore 'SeqNum too low' at incoming Logon message 
# and continue with received SeqNum. 
Monitoring.AdminSessionDef.IgnoreSeqNumTooLowAtLogon = false

# When true TCP buffer (Nagle algorithm) will be disabled for session.
Monitoring.AdminSessionDef.DisableTCPBuffer = false

# Enqueued outgoing messages could merged and sent as a single buffer. This parameter controls 
# how many messages could be merged into the bunch. The 0 means infinite amount. 
Monitoring.AdminSessionDef.MaxMessagesAmountInBunch = 0

# Priority of the socket SendReceive operations. 
#
# Valid values:
#   * EVEN (default) - share worker thread among all session in the Engine
#   * AGGRESSIVE_SEND - use dedicated thread to send outgoing messages
Monitoring.AdminSessionDef.SocketOpPriority = EVEN

# The list of administrative sessions separated by comma (','). 
# Every session name takes the central part of a specified session parameter.
# The parameter is not required
#Monitoring.AdminSessionNames = AdminClient

# User monitoring tool (TargetCompId = AdminClient)
# TargetCompId value of administrative session
# The parameter is required
Monitoring.AdminSession.AdminClient.TargetCompId = AdminClient

# The FIX protocol version of administrative session
# If the protocol version from logon message (MsgType=A) is different, connection is rejected.
# Allowed values: FIX40, FIX41, FIX42, FIX43, FIX44, FIX50, FIXT11
# The parameter is required
Monitoring.AdminSession.AdminClient.Version = FIX42

# TargetSubID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.TargetSubID = 

# SenderLocationID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.SenderLocationID = 

# TargetLocationID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.TargetLocationID =

# The expected Username value of administrative session
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent. 
Monitoring.AdminSession.AdminClient.Username = Admin

# The Expected Password value of administrative session
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.Password = 12345

# The Expected IP address of administrative session connection
# If the real address is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent. Empty value means *.*.*.*
Monitoring.AdminSession.AdminClient.SourceIPaddress = 10.20.30.40

# Expected EncryptMethod value of administrative session
# Allowed values: NONE, PKCS, DES, PKCS_DES, PGP_DES, PGP_DES_MD5, PEM_DES_MD5
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.EncryptMethod = DES

# Intraday logout tolerance mode of administrative session
# Allowed values: ON, OFF
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.IntradayLogoutToleranceMode = true

# Force SeqNum reset mode of administrative session
# Allowed values: ON, OFF
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.ForceSeqNumResetMode = true

# Ignoring of 'SeqNum too low' at incoming Logon message of administrative session
# Allowed values: TRUE, FALSE
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.IgnoreSeqNumTooLowAtLogon = false

# Disabling of the TCP buffer of administrative session
# Allowed values: TRUE, FALSE
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.DisableTCPBuffer = false

# The messages amount to merge into the bunch
# Parameter isn't required. Default value is used if the parameter is absent. The 0 means infinite amount.
Monitoring.AdminSession.AdminClient.MaxMessagesAmountInBunch = 10

# Priority of the socket SendReceive operations of administrative session
# Allowed values: EVEN, AGGRESIVE_SEND
# Parameter isn't required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.SocketOpPriority = EVEN

#######################################################################
# Engine measuring
#######################################################################

# Enables/disables Engine measuring
# true or false
# If this parameter omitted, it is "false" by default.
Measuring.Enable = true

#######################################################################
# Logger settings
#######################################################################

# Default target devices
#
# Valid values:
#   * File - messages will be written to the file. 
#   * Console - messages will be written to the console. 
#   * EventLog (Windows specific) - messages will be written to the Windows Event Log. 
#   * WinDebug (Windows specific) - messages will be written to the OutputDebugString. 
#   * Syslog (Linux/Unix specific) - messages will be written to the system log.
#
# The properties of the device are in the "Log.<name>" section. For instance Log.File contains 
# all properties of the File device.
Log.Device = File

# Enable Trace messages. 
# Valid values:
#   * true - to enable Trace messages
#   * false - to disable Trace messages
Log.TraceIsOn = true
Log.Engine.TraceIsOn = true

# Enable Debug messages. 
# Valid values:
#   * true - to enable Debug messages
#   * false - to disable Debug messages
Log.DebugIsOn = true
Log.Engine.DebugIsOn = true

# Enable Note messages. 
# Valid values:
#   * true - to enable Note messages
#   * false - to disable Note messages
Log.NoteIsOn = true

# Enable Warning messages. 
# Valid values:
#   * true - to enable Warning messages
#   * false - to disable Warning messages
Log.WarnIsOn = true

# Enable Error messages. 
# Valid values:
#   * true - to enable Error messages
#   * false - to disable Error messages
Log.ErrorIsOn = true

# Enable Fatal Error messages. 
# Valid values:
#   * true - to enable Fatal Error messages
#   * false - to disable Fatal Error messages
Log.FatalIsOn = true

# Enables/disables log file cycling
# Valid values:
#   * true - to enable cycling
#   * false - to disable cycling
Log.Cycling = false

# Number of repeating records to be placed to log before cycling is started.
# Log.Cycling.Ignore = 3

# Number of repeating records to be accumulated (hidden) before write the
# "cycle record" to the log.
# Log.Cycling.BlockSize = 10

# Multiplier for the Block Size. If BlockSize number of messages is 
# accumulated and the same message still appears then next BlockSize
# is calculated as the previous one multiplied by Multiplier.
# Log.Cycling.Multiplier = 10

#######################################################################
# Logger settings: File device
#######################################################################

# Timezone of the log message timestamp 
# Valid values:
#   * Local - display time as local
#   * UTC - display time as UTC
Log.File.TimeZone = UTC

# Custom format of log file record.
# Can be defined separately for each log file e.g. Log.Version.File.Format = ...
# Format string can contain any symbols and keywords:
# %%             - put '%' symbol
# %level         - put severity level name: 'ERROR', 'WARN' etc.
# %tablevel      - put extra spaces for vertical alignment of records after %level
# %date{FIX}     - date in 'YYYYMMDD-HH:MM:SS.sss' format
# %date{ISO8601} - date in 'YYYY-MM-DD HH:MM:SS,sss' format
# %date          - date in 'DD MMM YYYY HH:MM:SS,sss' format
# %timezone      - time zone abbreviation or name (setup TZ env variable to take abbreviation in windows) or 'UTC'
# %logger        - log category, component
# %thread        - thread id
# %message       - logged message
#Log.File.Format = %date{ISO8601} %timezone   %level%tablevel   [%logger]  %thread  %message
Log.File.Format = [%level] %tablevel%date{FIX} [%thread] [%logger] - %message

# Root directory for log files. It will be concatenated with
# each file name specified by 'Log.File.Name'
Log.File.RootDir = ./logs

# File name. If more than one category uses files with the same name
# the same file will be used simultaniously.
Log.File.Name = _.log
#Log.Engine.File.Name = _engine.log
#Log.Engine.Debug.File.Name = _engine_debug.log

# If true new unique file name will be created. Log.File.Name value is a pattern.
# If false Log.File.Name will be used as file name.
Log.File.CreateUniqueFileName = true

# If set to true then lock file <Log.File.RootDir/Log.File.Name>.lock will be created. This
# will prevent other instance of the application use the same file.
#
# Valid values:
#   * true - lock log file
#   * false - do not lock log file
Log.File.Locked = false

# Enables/disables log file rotation
# Valid values:
#   * true - to enable rotation
#   * false - to disable rotation
Log.File.Rotate = false

# Size of file in bytes. When log file reaches this size it is renamed 
# (follow standard rotation approach) and the new file is created
# Log.File.Rotate.SizeLimit = 104857600

# Number of files to be involved in rotation. When the number is exceeded 
# the older file is removed
# Log.File.Rotate.FileLimit = 10

# Rotation directory. Directory to store rotated files.
# Log.File.Rotate.Dir = ./logs

# Local time when logs should ba backed up. Shoudl be in format 'hh:mm'
# or 'hh:mm:ss'.
# Optional.
Log.File.Backup.Time =

# If true then file will be recreated on each start.
# If false then new records will be appended to the existent file.
Log.File.Recreate = true

# If set to true then buffer will be flushed after each logging call. 
# If set to false then flush is not called.
#
# Setting to true decreases program performance; setting to false increases 
# a risk of records loss in case of program failure.
Log.File.AutoFlush = true

# String that specifies the name of the source. The source name must be a
# subkey of a logfile entry under the EventLog key in the registry. For
# example, "WinApp" is a valid source name if the registry has the following
# key: HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Event Log\Application\WinApp
Log.EventLog.EventSource = TestService

#######################################################################
# Affinity parameters
#######################################################################

# Defines an affinity mask for all worker pool threads.
# Affinity is specified as bit mask where serial number of the bit is serial number of the core.
# Mask should be presented in the decimal system.
# Default value is 0. It means that the engine will not change thread affinity mask.
# WorkerCpuAffinity = 0

# Defines an affinity mask for dispatcher and other auxiliary threads.
# Affinity is specified as bit mask where serial number of the bit is serial number of the core.
# Mask should be presented in the decimal system.
# Default value is 0. It means that the engine will not change thread affinity mask.
# HelperCpuAffinity = 0

# Specifies affinity mask for dedicated threads of session. It makes sense only for aggressive modes.
# Affinity is specified as bit mask where serial number of the bit is serial number of the core.
# Mask should be presented in the decimal system.
# Default value is 0. It means that the engine will not change thread affinity mask.
# CpuAffinity = 0

# Specifies affinity mask for dedicated receiving thread of session. It makes sense only for aggressive receive mode.
# Affinity is specified as bit mask where serial number of the bit is serial number of the core.
# Mask should be presented in the decimal system.
# Default value is 0. It means that the engine will not change thread affinity mask.
# RecvCpuAffinity = 0

# Specifies affinity mask for dedicated sending thread of session. It makes sense only for aggressive send mode.
# Affinity is specified as bit mask where serial number of the bit is serial number of the core.
# Mask should be presented in the decimal system.
# Default value is 0. It means that the engine will not change thread affinity mask.
# SendCpuAffinity = 0

Threads configuration

Linux

After upgrading to FIX Antenna v2.10.16 Linux users should check engine.properties file. Threads related to data sending/receiving are isolated from each other and from other tasks. Therefore two new optional settings in the engine.properties has been added:

Also each send/receive thread pool can operate in busy loop. Therefore two optional settings has been added to define epoll request timeout.

The meaning of the NumberOfWorkers has been changed. Now it defines number of general purpose workers. General purpose workers maintain heartbeats, reconnects, rejecting and other functionality not related to sending/receiving data.

Example

Following engine.properties settings will make FixEngine to create 5 threads. 3 threads for data processing, 1 thread to send data, 1 thread for general purpose stuffs.

Dispatcher.RecvWorkersCount = 3
Dispatcher.SendWorkersCount = 1
NumberOfWorkers = 1

Windows

On Windows number of threads which serve FIX sessions is defined by NumberOfWorkers parameter. Recommended value is 10. It is suitable for most systems. But if you application handles more than 6 sessions which actively send/receive data and your server has more than 6 CPU Cores, try to increase number of threads. Suitable parameter value should be distinguished during testing.

Monitoring parameters

Monitoring parameters are used to define the properties of administrative session. AdminSessionDef.* parameters are default session properties. AdminSession.*.* parameters are the properties of a specified session. Fix Engine uses the administrative session properties while creating a session.

- Monitoring.enable
- Monitoring.AdminSessionDef.TargetSubID
- Monitoring.AdminSessionDef.SenderLocationID
- Monitoring.AdminSessionDef.TargetLocationID
- Monitoring.AdminSessionDef.Username
- Monitoring.AdminSessionDef.Password
- Monitoring.AdminSessionDef.SourceIPaddress
- Monitoring.AdminSessionDef.EncryptMethod
- Monitoring.AdminSessionDef.IntradayLogoutToleranceMode
- Monitoring.AdminSessionDef.ForceSeqNumResetMode
- Monitoring.AdminSessionDef.IgnoreSeqNumTooLowAtLogon
- Monitoring.AdminSessionDef.DisableTCPBuffer
- Monitoring.AdminSessionDef.MaxMessagesAmountInBunch
- Monitoring.AdminSessionDef.SocketOpPriority
- Monitoring.AdminSessionNames
- Monitoring.AdminSession.(session name).TargetCompId
- Monitoring.AdminSession.(session name).Version
- Monitoring.AdminSession.(session name).TargetSubID
- Monitoring.AdminSession.(session name).SenderLocationID
- Monitoring.AdminSession.(session name).TargetLocationID
- Monitoring.AdminSession.(session name).Username
- Monitoring.AdminSession.(session name).Password
- Monitoring.AdminSession.(session name).SourceIPaddress
- Monitoring.AdminSession.(session name).EncryptMethod
- Monitoring.AdminSession.(session name).IntradayLogoutToleranceMode
- Monitoring.AdminSession.(session name).ForceSeqNumResetMode
- Monitoring.AdminSession.(session name).IgnoreSeqNumTooLowAtLogon
- Monitoring.AdminSession.(session name).DisableTCPBuffer
- Monitoring.AdminSession.(session name).MaxMessagesAmountInBunch
- Monitoring.AdminSession.(session name).SocketOpPriority

The following monitoring parameters can be assigned in the configuration file :

#######################################################################
# Engine monitoring
#######################################################################
# Enables/disables Engine monitoring
Monitoring.Enable = true
# Default monitoring properties
# TargetSubID (tag 57) - assigned value used to identify
# specific individual or unit intended to receive message.
Monitoring.AdminSessionDef.TargetSubID =
# SenderLocationID (tag 142) - assigned value used to identify
# specific message originator's location (i.e. geographic
# location and/or desk, trader).
Monitoring.AdminSessionDef.SenderLocationID =
# TargetLocationID_ (tag 143) - assigned value used to identify
# specific message destination's location (i.e. geographic
# location and/or desk, trader).
Monitoring.AdminSessionDef.TargetLocationID =
# The expected value of the Username (Tag 553) field in the incoming Logon message.
# If the real value is not equal to the expected one then the session is disconnected
# without sending a message and the error condition is generated in the log output.
Monitoring.AdminSessionDef.Username =
# The expected value of the Password (Tag 554) field in the incoming Logon message.
# If the real value is not equal to the expected one then the session is disconnected
# without sending a message and the error condition is generated in the log output.
Monitoring.AdminSessionDef.Password =
# The expected value of the source IP address. If the real value is not equal to the expected one
# then the session is disconnected without sending a message and the error condition is generated
# in the log output.
Monitoring.AdminSessionDef.SourceIPaddress =
# The expected value of the encryption method.
Monitoring.AdminSessionDef.EncryptMethod = NONE
# Intraday logout tolerance mode.
# An option to reset or not to reset sequence numbers after Logout.
Monitoring.AdminSessionDef.IntradayLogoutToleranceMode = false
# Force SeqNum reset mode.
# An option to use 141 tag in Logon message to reset sequence number.
Monitoring.AdminSessionDef.ForceSeqNumResetMode = false
# When true, session ignore 'SeqNum too low' at incoming Logon message
# and continue with received SeqNum.
Monitoring.AdminSessionDef.IgnoreSeqNumTooLowAtLogon = false
# When true TCP buffer (Nagle algorithm) will be disabled for session.
Monitoring.AdminSessionDef.DisableTCPBuffer = false
# Enqueued outgoing messages could merged and sent as a single buffer. This parameter controls
# how many messages could be merged into the bunch. The 0 means infinite amount.
Monitoring.AdminSessionDef.MaxMessagesAmountInBunch = 0
# Priority of the socket SendReceive operations.
#
# Valid values:
# * EVEN (default) - share worker thread among all session in the Engine
# * AGGRESSIVE_SEND - use dedicated thread to send outgoing messages
Monitoring.AdminSessionDef.SocketOpPriority = EVEN
# The list of administrative sessions separated by comma (',').
# Every session name takes the central part of a specified session parameter.
# The parameter is not required
#Monitoring.AdminSessionNames = AdminClient
# User monitoring tool (TargetCompId = AdminClient)
# TargetCompId value of administrative session
# The parameter is required
Monitoring.AdminSession.AdminClient.TargetCompId = AdminClient
# The FIX protocol version of administrative session
# If the protocol version from logon message (MsgType=A) is different, connection is rejected.
# Allowed values: FIX40, FIX41, FIX42, FIX43, FIX44, FIX50, FIXT11
# The parameter is required
Monitoring.AdminSession.AdminClient.Version = FIX42
# TargetSubID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.TargetSubID =
# SenderLocationID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.SenderLocationID =
# TargetLocationID value of administrative session
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.TargetLocationID =
# The expected Username value of administrative session
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.Username = sds_fix_os
# The Expected Password value of administrative session
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.Password = Starts123
# The Expected IP address of administrative session connection
# If the real address is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent. Empty value means *.*.*.*
Monitoring.AdminSession.AdminClient.SourceIPaddress = 194.10.0.54
# Expected EncryptMethod value of administrative session
# Allowed values: NONE, PKCS, DES, PKCS_DES, PGP_DES, PGP_DES_MD5, PEM_DES_MD5
# If the field value from logon message (MsgType=A) is different, connection is rejected.
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.EncryptMethod = DES
# Intraday logout tolerance mode of administrative session
# Allowed values: ON, OFF
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.IntradayLogoutToleranceMode = true
# Force SeqNum reset mode of administrative session
# Allowed values: ON, OFF
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.ForceSeqNumResetMode = true
# Ignoring of 'SeqNum too low' at incoming Logon message of administrative session
# Allowed values: TRUE, FALSE
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.IgnoreSeqNumTooLowAtLogon = false
# Disabling of the TCP buffer of administrative session
# Allowed values: TRUE, FALSE
# The parameter is not required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.DisableTCPBuffer = false
# The messages amount to merge into the bunch
# Parameter isn't required. Default value is used if the parameter is absent. The 0 means infinite amount.
Monitoring.AdminSession.AdminClient.MaxMessagesAmountInBunch = 10
# Priority of the socket SendReceive operations of administrative session
# Allowed values: EVEN, AGGRESIVE_SEND
# Parameter isn't required. Default value is used if the parameter is absent.
Monitoring.AdminSession.AdminClient.SocketOpPriority = EVEN