The Lab

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 352 Next »

This page sets out the key aspects of establishing and managing sessions between a Whisperer Enterprise Client and a Gateway.


Logon

A FIX session is only fully established when the following stages are complete:

  • Socket connection established by the client to Whisperer Enterprise.
  • Authentication: Implemented via the exchange of FIX Logon messages.
  • Synchronization: Identification of lost/untransmitted messages and retransmission as necessary by either or both sides,
  • Verification: Exchange of TestRequest and Heartbeat messages to explicitly confirm correct session establishment.


Authentication & Authorization

When the Client requires a new session with a Venue, it must first establish a TCP socket connection with the  Whisperer Logon Service on a single, standard IP address and port - no matter the User, Session type, or Venue. Once connected, it must then send a Logon message specifying the desired session.

The Logon Service is responsible for the following functions:

  • Authentication - validation of the provided Username and associated Password.
  • Authorisation - verification that the User is permissioned for the specified SessionType and Venuename.


Should either of these checks fail,  the Logon Service will terminate the connection without a Logout message.

In this event, the Customer should contact MF Contact in order to confirm the validity of the specified credentials.


Otherwise the Logon Service will hand off the connection to the target Gateway. From this point on, the Client is communicating directly with the Gateway itself,  neither the LogonService, nor any other processes are involved.

Message Persistence

All Whisperer Enterprise messages are exchanged over TCP, with connectivity maintained directly between the Client and Gateway - so message delivery and ordering are both guaranteed, whilst the socket connection is operating correctly.

A message is deemed to have been sent, and received, successfully when:

  • The send completes successfully, and
  • The TCP session remains up for a period subsequent to the send.


Previously Sent Messages

The MF Gateway guarantees persistence of sent outbound messages for possible resend for a minimum period of three heartbeat intervals, allowing for detection of dead connections as per Session Monitoring, below.

Unsent Messages

Any unsent messages will be persisted indefinitely until either:

  • End of Trading Week reset, or
  • Client Logon with ResetSeqNumFlag = FALSE or unset, and subsequent User Session Synchronisation.
  • Client Logon with ResetSeqNumFlag = TRUE. This flag may be used at Client discretion, but is recommended for UAT or PROD Pricing sessions only.


The table below specifies what messages are to be persisted and resent when necessary, as opposed to being gap-filled.

It will be noted that that all  messages that represent stateful events are persisted and resent by the MF Gateway - but only these. It is the responsibility of the Client application to determine the appropriate response.

For sequence gaps identified on the outbound Client Session, it is the responsibility of the Client application to determine which Optional  message types are indeed to be persisted for possible resend. This is typically most important for Maker clients accepting or rejecting orders against Taker Venues, but other scenarios may need to be considered.


Resent messages are always characterised by: 

  • Msg.messageHeader.msgSeqNum populated with the original sequence number
  • Msg.messageHeader.sendingTime populated with the resend time
  • Msg.TradingFlags.PossDupFlag = TRUE
  • Msg.OrigSendingTime populated with Msg.messageHeader.sendingTime of original message


Any message that the Client does resend may be forwarded to the Venue, so it is essential be aware of the impact that this may have.

Oops, it seems that you need to place a table or a macro generating a table within the Table Filter macro.

The table is being loaded. Please wait for a bit ...

MessageSent ByReceived ByPersisted
LogonClient (Both)GatewayNo
LogonResponseGatewayClient (Both)No
LogoutClient (Both)GatewayNo
LogoutResponseGatewayClient (Both)No
SequenceResetGapFillClient (Both)GatewayNo
GatewayClient (Both)No
HeartbeatClient (Both)GatewayNo
GatewayClient (Both)No
TestRequestClient (Both)GatewayNo
GatewayClient (Both)No
SecurityStatusGatewayClient (TAKER)No
UserRequestClient (Both)GatewayNo
UserNotificationGatewayClient (Both)No
ErrorReportGatewayClient (Both)Yes
BusinessMessageRejectGatewayClient (Both)Yes
MarketDataRequestClient (TAKER)GatewayNo
MarketDataRequestRejectGatewayClient (Both)No
MarketDataIncrementalRefreshGatewayClient (Both)No
QuoteRequestClient (TAKER)GatewayOptional
GatewayClient (MAKER)Yes
QuoteClient (MAKER)GatewayNo
GatewayClient (TAKER)No
MassQuoteClient (MAKER)GatewayNo
GatewayClient (TAKER)No
QuoteCancelClient (MAKER)GatewayNo
GatewayClient (TAKER)No
QuoteResponseClient (MAKER)GatewayOptional
GatewayClient (TAKER)Yes
Client (TAKER)GatewayOptional
GatewayClient (MAKER)Yes
NewOrderMultilegClient (TAKER)GatewayOptional
GatewayClient (MAKER)Yes
OrderCancelReplaceRequestClient (TAKER)GatewayOptional
OrderCancelRequestClient (TAKER)GatewayOptional
OrderCancelRejectGatewayClient (TAKER)Yes
OrderTimeoutGatewayClient (Both)Yes
ExecutionReportClient (MAKER)GatewayYes
GatewayClient (TAKER)Yes
ExecutionAckClient (TAKER)GatewayOptional
GatewayClient (MAKER)Yes


User Session Synchronisation

Whisperer Enterprise utilises the 'new' model of session synchronisation introduced in FIX 4.4. This ensures that each side can expect any sequence number gaps to be filled automatically, eliminating the need for ResendRequest messages - and the problems that historically accompany these.


The MFAPI Client initiates a new session with a Logon message - populating NextExpectedMsgSeqNum which contains the next msgSeqNum value that the Client expects to receive from the Whisperer Gateway. 

The Whisperer Gateway validates the sequence number value as expected by the MFAPI Client as follows:

  • If the Client msgSeqNum is lower than the Gateway's expected value, or the Client is expecting a sequence number higher than the Gateway's next-to-be-assigned msgSeqNum, then this is an unrecoverable error and the Gateway will abort the session with a Logout message (using it's next sequence number).

    The Customer should contact MF Contact to agree the correct resolution actions.
  • Otherwise, the Gateway will issue a LogonResponse message - populating NextExpectedMsgSeqNum which contains the next msgSeqNum value that it expects to receive from the Client.


  • If the Client is expecting a sequence number lower than the Gateway's next-to-be-assigned msgSeqNum (as used in the preceding Logon response), then the message gap is resolved by the Gateway with SequenceResetGapFill messages and/or the resending of persisted messages as necessary. The preceding LogonResponse will be gap-filled over. A concluding TestRequest will be issued by the Gateway to confirm the end of the replay.

    Should a Client specify a next-expected inbound sequence number too low (e.g. expecting '1' on re-logon just prior to weekly trading session close), then the Gateway will service most of the range to correct with a SequenceResetGapFill. For the more recent messages that are still persisted, these will be processed as normal.

    The Gateway will not resend a week's worth of persisted messages. Refer to 63805411 above for more detail


  • When the MFAPI Client receives the Gateway's LogonResponse message, the Client must behave in a similar manner, based on the returned NextExpectedMsgSeqNum value. Any message gap must be resolved by the Client with SequenceResetGapFill messages and/or the resending of persisted messages as necessary. The preceding Logon must be gap-filled over. The Gateway will issue a concluding TestRequest to confirm the end of the replay.


  • Irrespective of whether repays are required in either direction or not, the Gateway will always issue a further TestRequest to verify overall completion of the session synchronisation. Thus the Client may be expected to respond to one, two or three TestRequest messages in total to successfully Logon.


User Session Synchronziation



The Gateway TestRequest messages and Client Heartbeat (response) messages are required as verification that no sequence number gaps remain in either direction.

The Client should only proceed with new messages when these have been processed correctly.

Any new (i.e. not SequenceResetGapFill or resent) messages sent by the MFAPI Client prior to the required Heartbeat responses will result in ErrorReport notifications.



Erroneous Scenarios

Second Logon to Existing Session

Any attempt by the Client to send a Logon message on an existing session that it established previously will result in the session being aborted.

Second Session for User/SessionType/Venue

Should the Client attempt to establish a second  (additional) session using the same credentials as of a currently-active Client session, then it will be rejected. The original session will be unaffected.



  4.0 Schema_2ndLogon

Session Monitoring

Active sessions are monitored at the application level by each party via Heartbeat and TestRequest messages. Indications of problems must result in the monitoring party aborting the session.


MaxTx

For inbound Heartbeat and TestRequest messages sent by the Client , the Gateway will allow a fixed maximum allowed message transmission time (MaxTx), currently set to one second, before treating the message as 'missed'. This is used to allow for some degree of hysteresis WRT message delivery latencies.

The Client may specify it's own MaxTx value and logic when monitoring inbound messages sent by the Gateway.

In both cases only the local clock is used as reference.


Heartbeats

Once the Client has successfully established a session with the Whisperer Gateway (i.e. on dispatch of the first Heartbeat message in response to the end of synchronisation TestRequest), subsequent Heartbeat messages are sent by each party as follows:

  • The HeartBtInt value is specified by the Client in their Logon message and subsequently used by both sides of the Client Session, i.e. the Gateway will always use the interval specified by the Client.
  • The heartbeat interval timer should be reset after every message is transmitted (not just heartbeats).
  • On expiry of the heartbeat interval timer, a Heartbeat message must be sent.


A heartbeat is deemed to have been missed if it is not received within HeartBtInt + MaxTx seconds and must result in the monitoring party issuing a TestRequest.




4.0 Schema_Heartbeat_3


Test Request

TestRequest messages may be issued by either party and under normal circumstances result in a Heartbeat being sent in response, echoing the specified TestRequestID.


TestRequest messages may be used to obtain an approximate indication of message round-trip times between the MFAPI Client and the Whisperer Gateway.

If no Heartbeat response is received within HeartBtInt + MaxTx seconds of the issuance of the TestRequest, then the party must abort the session with a Logout message.


4.0 Schema_TestRequest



Logout

The recipient of a Logout message must echo it with a LogoutResponse (using it's next sequence number).

  • It is the responsibility of the Logout initiator to terminate the socket connection on receipt of the LogoutResponse.
  • If no LogoutResponse is received within HeartBtInt + MaxTx seconds of the issuance of the Logout, then the session and associated TCP socket connection must be dropped.


All messages received by the Whisperer Gateway (from either the Client or the Venue) between the exchange of Logout and LogoutResponse messages will result in ErrorReport messages being sent to the Client.

  • No labels