Page tree
Skip to end of metadata
Go to start of metadata

Overview

FIX sessions can be preconfigured via FIX Antenna properties file - engine.properties. Parameters defined in engine.properties will be used during the session creation process. 

To configure session parameter just add the following line into the engine.properties file:

Session.<SessionName>.<Parameter> = <value>

<SessionName> - SessionCompID and TargetCompID separated by '/' symbol or "Default"

<Parameter>  - Configurable session parameter

<Value>  - desired session parameter value

Configure Defaults for All Sessions

In order to configure default parameter value for all sessions use Default as SessionName. See example below for details.

engine.properties
Session.Default.UseBlockingSockets = true
Session.Default.DisableTCPBuffer = true
Session.Default.StorageType = persistentMM
Session.Default.Validation.IsEnabled = false

Configure Specific Session

In order to configure parameters for some specific session use its SenderCompID/TargetCompID pair as SessionName. See example below for details. 

engine.properties
Session.CLIENT1/EXECUTOR.UseBlockingSockets = true
Session.CLIENT1/EXECUTOR.DisableTCPBuffer = true
Session.CLIENT1/EXECUTOR.StorageType = persistentMM
Session.CLIENT1/EXECUTOR.Validation.IsEnabled = false

Prioritizing Rules

The engine uses properties for being created session in the following order (If the property is not defined on the current step then value from the next step is used):

  1. Configured in the C++ code as Engine::SessionExtraParameters value before the session creation
  2. Session specific settings defined as properties with Session.SenderCompID/TargetCompID pair in the engine.properties
  3. Default sessions settings defined as Session.Default properties in the engine.properties
  4. Hardcoded FIX Antenna Engine defaults.

List of Available Parameters

Session Parameters

Property

Description

Valid valuesDefaults

SenderSubID

SenderSubID (tag 50) - assigned value used to identify specific message originator (desk, trader, etc.). Ignored if NULL value specified.



TargetSubID

TargetSubID (tag 57) - assigned value used to identify specific individual or unit intended to receive message. 'ADMIN' reserved for administrative messages not intended for a specific user. Ignored ifNULLvalue is specified.



SenderLocationID

SenderLocationID (tag 142) - assigned value used to identify specific message originator's location (i.e. geographic location and/or desk, trader). Ignored if NULL value is specified.



TargetLocationID

TargetLocationID (tag 143) - assigned value used to identify specific message destination's location (i.e. geographic location and/or desk, trader). Ignored if NULL value specified.



Username

User name.

  • For initiator: Value of this field willtransferredtoacceptorin the Username (Tag 553) field of the Logon(A) message;

  • For acceptor: Value of this field will be compared tovalueof the Username (Tag 553) field of the incoming Logon(A) message. If values are not equal, Logon will be rejected.



Password

User's password.

  • For initiator: Value of this field willtransferredtoacceptorin the Password (Tag 554) field of the Logon(A) message;

  • For acceptor: Value of this field will be compared tovalueof the Password (Tag 554) field of the incoming Logon(A) message. If values are not equal, Logon will be rejected.



UsernameTag

Specifies a tag used to store an username.



PasswordTag

Specifies a tag used to store a password.



CustomSessionType

Specifies whether a session should encrypt password each time.

GENERIC - generic session

LME_SELECT- encrypt password tag each time

TOTAL_SSN_TYPES - Represents a number of sessions types

CME_SECURE_LOGON - use CME secure logon scheme

GENERIC

CMESecureKeysFile

Parameter is available since FIX Antenna C++ 2.23.0


Specifies a path to CME keys files used for CME secure logon

FixKey

Specifies a FIX key for LME sessions.



ForcedReconnect

Forced Reconnect mode - session will try to reconnect when:

  1. In WaitForConfirmLogon state when session received not a confirming logon

  2. In WaitForConfirmLogon state when logon frame is expired

  3. In Reconnect state when the session was closed.


false
EnableMessageRejectingWhen true, session rejects application messages when session unable to sent them during a specified period or was disconnected.
false
IgnoreSeqNumTooLowAtLogonWhen true, session ignores 'SeqNum too low' at incoming Logon message and continue with received SeqNum.
false

IntradayLogoutToleranceMode

Intraday logout tolerance mode. An option to reset or not to reset sequence numbers after Logout.


false

HandleSeqNumAtLogon

Handle sequence gaps using NextExpectedMsgSeqNum field in theLogon.


false
ForceSeqNumReset

Force SeqNum reset mode.
An option to use 141tag in Logon message to reset sequence number.

FSNR_NA - take the value from the properties file.
FSNR_ON - Use tag 141 at first Logon to reset sequence number.
FSNR_ALWAYS - Reset sequence number at every Logon.
FSNR_OFF - Do not use tag 141 at Logon to reset sequence number.
FSNR_NA 
EncryptMethod

Encryption method.


NONE
PKCS
DES
PKCS_DES
PGP_DES
PGP_DES_MD5
PEM_DES_MD5 NA

NONE

SuppressDoubleResendRequest

Suppresses session to send Resend request message on every incoming message with sequence greater than expected.


false

AllowMessageWithoutPossDupFlag

This parameter is an option whereby the repeated messages are received without PossDupFlag (43) field. It's used for incoming messages only.

If set to "true" and a message is received with a sequence number less than expected without PossDupFlag (43), the message will be processed.
If set to "false", the connection will be closed.
The default value is "false".

This parameter is optional.



false

SendLastMsgSeqNumProcessed

Allows automatic adding the LastMsgSeqNumProcessed(369) tag to outgoing messages.



false

ResendRequestBlockSize

Defines a number of messages requested using Resend Request messages.

If message sequence gap is larger than SessionExtraParameters::resendRequestBlockSize_Session will split resend requests by blocks of SessionExtraParameters::resendRequestBlockSize_ size.


-1

CpuAffinity

Specifies affinity mask for dedicated threads of the session. It makes sense only for aggressive modes.

Mask should be presented in the decimal system.0

RecvCpuAffinity

Specifies affinity mask for dedicated receiving thread of session. It makes sense only for aggressive receive mode.

Mask should be presented in the decimal system.0

SendCpuAffinity

Specifies affinity mask for dedicated sending thread of session. It makes sense only for aggressive send mode.

Mask should be presented in the decimal system.0

LogonMessageSessionQualifierTag

Defines the tag of the field to be used by FIX Engine when dispatching incoming connection.
SessionQualifier is passed in this field. SenderCompID(49), TargetCompID(56) and this field are used for search of appropriated acceptor among existing registered acceptors. The field is optional if application doesn't intend to accept incoming connection.
See also SessionId and SessionQualifier Notes 



SendingTimestampUnit

Parameter is available since FIX Antenna C++ 2.20.0.

Defines the precision of the timestamp to be specified in 52 tag (SendingTime) and 122 tag (OrigSendingTime) in outgoing message.
  • second
  • millisecond
  • microsecond
  • nanosecond

OutOfSequenceMessagesStrategy

Parameter is available since FIX Antenna 2.23.0


This parameter sets a strategy for processing out-of-sequence messages for a specific session.

RequestAlways

RequestOnce

IgnoreGap

Queue

RequestAlways

OutOfSequenceMessagesStrategy.QueueSize

Parameter is available since FIX Antenna 2.23.0


The size of temporary queue for processing out-of-sequence messages (measured in a count of messages). The parameter is used if parameter OutOfSequenceMessagesStrategy=Queue.
2000

Validation Parameters

Property

Description

Valid valuesDefaults

ValidateCheckSum

If true, session skip CRC validation for incoming messages.



true

GenerateCheckSum

If false, session will not calculate CRC for outgoing messages



true

Validation.IsEnabled

Option to enable message validation. Pass true to enable; false to disable.


false

Validation.ProhibitTagsWithoutValue

When false, raw message may contain tags without values - they will be ignored. Otherwise std::exception was fired.



Validation.VerifyTagsValues

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.


false

Validation.ProhibitUnknownTags

This parameter controls unknown tag handling.

The possible values are "true" and "false". If set to "true" then all unknown fields will be stored to the message. If set to "false", engine will reject messages with unknown fields.


false

Validation.VerifyReperatingGroupBounds

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.


false

Validation.CheckRequiredGroupFields

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 the 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.


true

Validation.ProhibitDuplicatedTags

When false, raw message may contain duplicated field definitions. Otherwise reject will be fired.

Works only as Session.Default.Validation.ProhibitDuplicatedTags or Session.CLIENT1/EXECUTOR.Validation.ProhibitDuplicatedTags


true

Validation.IgnoreUnknownFields

Ignores undefined fields during message parsing.


false

Storage and FIX Logging Parameters

Property

Description

Valid valuesDefaults

HiddenLogonCredentials

Masks password in in/out log files.


false

MessagesStorageSize

This parameter specifies in-memory messages storage size.


20000

LogIncomingMessages

If true, session will store incoming FIX messages.


true

StorageType

Message storage type. 

persistent
transient
persistentMM
splitPersistent
null
persistentMM

Connection Parameters

Property

Description

Valid valuesDefaults
KeepConnectionStateWhen true, primary to backup (and back) connection switching continue using existing message storage.
true
UseAsyncConnectWhen true, session initiator will use async TCP connect.
false
DisableTCPBufferWhen true TCP buffer (Nagle algorithm) will be disabled for session.
false

SocketRecvBufSize

Socket incoming buffer size.


-1

SocketSendBufSize

Socket outgoing buffer size.


-1
MaxMessagesAmountInBunch

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.0

EnableAutoSwitchToBackupConnection

When true, automatic switch mode is enabled.


false

CyclicSwitchBackupConnection

When true, connection will be switched from primary to backup and back until connection will be established.


false

SourceIPaddress

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.



SocketOpPriority

The priority of the socket send/receive operations.

NA

EVEN

AGGRESSIVE_SEND

AGGRESSIVE_RECEIVE

AGGRESSIVE_SEND_AND_RECEIVE

DIRECT_SEND

DIRECT_SEND mode is available since FIX Antenna 2.23.0

EVEN

Transport

Low-level transport of the session.

SOCKETS - Kernel sockets
MYRICOM_DBL - Myricom TA

SOCKETS

AggressiveReceiveDelay

Defines a polling interval in microseconds for reading data from the socket.

Works only with aggressive sessions i.e. Engine::AGGRESSIVE_RECEIVE_SOCKET_OP_PRIORITY or
Engine::AGGRESSIVE_SEND_AND_RECEIVE_SOCKET_OP_PRIORITY modes. 

Setting lower value reduces the latency but causes high CPU utilization. 

The default value is 500 microseconds.

There will not be a delay after an attempt to receive a message if the socket buffer still is not empty.

500

ReconnectMaxTries

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.


3

ReconnectInterval

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.


1000

ConnectAddress

Specifies IP of the NIC interface used to connect to the remote site.



ConnectPort

Specifies TCP port used to connect to the remote site.



UseBlockingSockets

If true, session will use blocking I/O.
This mode is usefull for OpenOnload and enabled if aggressive mode is ON. Engine::SessionExtraParameters::aggressiveReceiveDelay_ is used as timeout parameter.
See Also socketOpPriority, AggressiveReceiveDelay


false
The list of supported sessions parameters can be found in the C++ documentaion or in the header from the FIXAntenna C++ package: ./headers/B2BITS_FAProperties.h

Create pre-configured sessions from a properties file.

FIX Antenna 2.25.1. introduces a mechanism allowing to pass a session configuration through a file.

The scenario below is describing the case when the application gets all configured sessions from properties file and iterates over sessions list and creates them.

With this scenario all initiator sessions connects immediately to the counterparty.

FIX Antenna C++ code example

application.cpp
/* FixAntenna initialization here */
//....
Engine::Application MyAppAcceptor;
Engine::Application MyAppIntiator;
//....
std::vector<Session*> sessionsVector;
FAProperties::ConfiguredSessionsMap sessions = FixEngine::singleton()->getProperties()->getConfiguredSessions();
for(FAProperties::ConfiguredSessionsMap::const_iterator it = sessions.begin(); it != sessions.end(): ++it)
{
    Session *pSsn;
    if(it->second.sessionRole_ == Engine::INITIATOR_SESSION_ROLE)
        pSsn = FixEngine::singleton()->createSession( &MyAppIntiator, it->first, NA, &it->second );
    else
        pSsn = FixEngine::singleton()->createSession( &MyAppAcceptor, it->first, NA, &it->second );
    pSsn->connect();
    sessionsVector.push_back(pSsn);
}
//....
for(std::vector<Session*>.const_iterator it = sessionsVector.begin(); it != sessionsVector.end(); ++it)
{
    it->release();
}
/* FixAntenna de-initialization here */

FIX Antenna .NET code example

application.cs
/* FixAntenna initialization here */
// ....
List<Session> activeSessions;
Dictionary<SessionId, SessionExtraParameters> sessions = FixEngine.Instance.getConfiguredSessions(SessionRole.NA);
foreach (KeyValuePair<SessionId, SessionExtraParameters> session in sessions)
{
    Session ses = FixEngine.Instance.CreateSession(session.Key, FixVersion.NA, session.Value);
    ses.Connect();
	activeSessions.add(ses);
}
//....
foreach (Session session in activeSessions)
{
	sessions.Dispose();
}

/* FixAntenna de-initialization here */

Creating initiator and acceptor

engine.properties
######### CLIENT1/SRV1 session #########
Session.CLIENT1/SRV1.ParserVersion = FIX44
Session.CLIENT1/SRV1.Role = Initiator
Session.CLIENT1/SRV1.Host = 127.0.0.1
Session.CLIENT1/SRV1.Port = 9090
Session.CLIENT1/SRV1.HBI = 30
#Other required session properties if any


######### ESVR/CTG session #########
Session.ESVR/CTG.ParserVersion = FIX44
Session.ESVR/CTG.Role = Acceptor
#Other required session properties if any

Pass Custom Logon Message to initiator from properties file.

engine.properties
######### CLIENT1/SRV1 session #########
Session.CLIENT1/SRV1.ParserVersion = FIX44
Session.CLIENT1/SRV1.Role = Initiator
Session.CLIENT1/SRV1.Host = 127.0.0.1
Session.CLIENT1/SRV1.Port = 9090
Session.CLIENT1/SRV1.HBI = 30
Session.CLIENT1/SRV1.CustomLogonMessageFileName = Logon.msg

An example of Logon message (35=A): Logon.msg

Create SSL sessions with properties file

FIX Antenna 2.26.0. has update SSL support extending the variety of formats accepted and password protected certificates/keys support.

FIX Antenna support certificates in PEM, PFX and DER formats along with private keys in PEM and DER formats.

Password protected certificates/keys can be used as well. The password is specified within plain text in engine.properties.

The cases below demonstrate how to configure Initiator/acceptor sessions in order to make them SSL enabled.

SSL related properties are demonstrated only assuming that session is generally configured already.

Creating initiator and acceptor:

engine.properties
######### Engine wide properties #########
# Used for all acceptor sessions and as default values for Initiator sessions. if ListenSSLPort is specified and optional otherwise.
# Mandatory. Set protocols accepted by the engine.
SSLProtocols = TLSv1_2
# Optional. Engine default values used if omitted.
SSLCiphersList = AES+aRSA:AES+aECDH:AES+aECDSA:@STRENGTH
# mandatory. Certificate file to use.
SSLCertificate = mycert.pem
# Optional. Applicable if only certificates is password protected.
SSLCertificatePassword = mycertPassword
# Optionality is correlated with SSLCertificate.
# It means if no SSLCertificate  specified then this property becomes seamless. It becomes optional if private key is already contained inside SSLCertificate file.
# This is possible for PEM and PFX formats but not for DER!
SSLPrivateKey = mycertKey.pem
# Optional if private key is not password protected. Please pay attention to the fact the this password is used for private key stored within certificate file as well.
# So it has meaning even if SSLPrivateKey is empty in this case.
SSLPrivateKeyPassword = mycertKeyPassword
# Optional if no peer certificate validation is required. This is a path to the file containing CA certificates (all in one file on after another, PEM format only!).
# This certificates are used to build accepted certificates list sent to peer as well.
SSLCACertificate = CACerts.pem
# Optional. false by default. Setting this property to true requires SSL engine to validate counter-party's certificate against CAs provided. 
# If validation has failed or no certificate was provided by counter-party connection is terminated immediately.
# Set this to true in order to accept only connection verified with certificate.
SSLValidatePeerCertificate = true

######### CLIENT1/SRV1 Initiator session #########
# Enable SSL support for the session
Session.CLIENT1/SRV1.SSL = true
# Optional. Overrides engine wide SSLProtocols property for the session
Session.CLIENT1/SRV1.SSLProtocols = TLSv1_2
# Optional. Overrides engine wide SSLCiphersList property for the session
Session.CLIENT1/SRV1.SSLCiphersList = AES+aRSA:AES+aECDH:AES+aECDSA:@STRENGTH
# Optional for initiators. Certificate file to use if certificate based authentication is requested by peer.
Session.CLIENT1/SRV1.SSLCertificate = mycert.pem
# Optional. Applicable if only certificates is password protected.
Session.CLIENT1/SRV1.SSLCertificatePassword = mycertPassword
# Optionality is correlated with SSLCertificate.
# It means if no SSLCertificate  specified then this property becomes seamless. It becomes optional if private key is already contained inside SSLCertificate file.
# This is possible for PEM and PFX formats but not for DER!
Session.CLIENT1/SRV1.SSLPrivateKey = mycertKey.pem
# Optional if private key is not password protected. Please pay attention to the fact the this password is used for private key stored within certificate file as well.
# So it has meaning even if SSLPrivateKey is empty in this case.
Session.CLIENT1/SRV1.SSLPrivateKeyPassword = mycertKeyPassword
# Optional if no peer certificate validation is required. This is a path to the file containing CA certificates (all in one file on after another, PEM format only!).
Session.CLIENT1/SRV1.SSLCACertificate = CACerts.pem
# Optional. false by default. Setting this property to true requires SSL engine to validate counter-party's certificate against CAs provided. If validation has failed connection is terminated immediately.
# Set this to true in order to validate acceptors certificate.
Session.CLIENT1/SRV1.ValidatePeerCertificate = true


######### ESVR/CTG Acceptor session #########
# Restricts the session to accept connections from SSL listener only.
Session.ESVR/CTG.SSL = true
# All remaining properties are engine wide for the acceptors and can't be specified on per-session basis.
# So they are configured with engine wide properties.



  • No labels