FA C++ supports custom symbols instead of SOH on per session basis. For this purpose, the TagsDelimiter parameter is used.
The default delimiter is SOH. |
The TagsDelimiter parameter is configured through SessionExtraParameters and through the engine.properties file. If the parameter is set through a configuration file, either symbols ("S", "|", "^", etc.) or Hex code (0x24, 0x7C, 0x5E, etc.) are applicable.
If a forbidden symbol is chosen for a delimiter, the following error is raised with the message: "The forbidden tags delimiter is specified".
In order to use the TagsDelimiter parameter for an acceptor, you should set a value for the default session in the config file: Session.Default.TagsDelimiter.
The session always uses the tags delimiter from the default session for the very first messages while a connection is established (sending a logon, sending a confirm logon, and receiving an answer with a logon or a logout). You can call the Session::isInEstablishingConnectionMode method to get the current mode and the Session::getCurrentTagsDelimiter method to get the currently used delimiter. If the tags delimiter is not specified for the default session as well, the new session uses the value specified in the engine.properties file. If the tags delimiter is not specified in the engine.properties file, the new session uses the 0x01 symbol (SOH). |
The tagsDelimiter is added as an argument in the following methods:
|
|
TagsDelimiter = 0x01 Session.ESVR/GTF.TagsDelimiter = 0xA5 |
8=FIX.4.4|9=1897|35=AE|49=ICE|34=2793|52=20201109-09:02:17.592044|56=423|57=41|571=185624|487=0|856=0|828=K|150=F|17=5833492|39=2|570=N|55=5863332|48=GAB FQF0021.H0021|22=8|461=FXXXXX|207=NDEX|9064=0|916=20210101|917=20210331|32=6|31=38.35|9018=18|9022=2159|75=20201109|60=20201109-08:58:00.000000|9413=2|762=800|9028=0|8013=LRGS|552=1|54=1|37=5833490|11=5833490|453=12|448=ccmtray-fx7|447=D|452=11|448=Castleton Commodities Merchant Europe Sarl|447=D|452=13|448=8211|447=D|452=56|448=Marex Spectron Europe Limited - Broker|447=D|452=1|448=22983|447=D|452=61|448=spectron2-tr|447=D|452=12|448=8211|447=D|452=35|448=805|447=D|452=4|448=00774062EDX|447=D|452=51|448=Societe Generale International Limited (FIM)|447=D|452=60|448=FIM|447=D|452=63|448=H|447=D|452=54|376=1010000117c99b3ea18ccd4903914f42bedb7397c6|77=O|9123=64924188|555=3|600=5377544|602=GAB FMF0021!|603=8|608=FXXXXX|616=NDEX|624=1|637=38.35|687=6|654=5833493|9019=6|9023=744|9020=20210101|9021=20210131|539=6|524=805|525=D|538=4|524=00774062EDX|525=D|538=51|524=Societe Generale International Limited (FIM)|525=D|538=60|524=FIM|525=D|538=63|524=H|525=D|538=54|524=8211|525=D|538=35|9376=101000011768dcd4be70b94988adc8413e3f963722|600=5377545|602=GAB FMG0021!|603=8|608=FXXXXX|616=NDEX|624=1|637=38.35|687=6|654=5833494|9019=6|9023=672|9020=20210201|9021=20210228|539=6|524=805|525=D|538=4|524=00774062EDX|525=D|538=51|524=Societe Generale International Limited (FIM)|525=D|538=60|524=FIM|525=D|538=63|524=H|525=D|538=54|524=8211|525=D|538=35|9376=101000011735caabcd06734509a1aaa5703b56ab2d|600=5377546|602=GAB FMH0021!|603=8|608=FXXXXX|616=NDEX|624=1|637=38.35|687=6|654=5833495|9019=6|9023=743|9020=20210301|9021=20210331|539=6|524=805|525=D|538=4|524=00774062EDX|525=D|538=51|524=Societe Generale International Limited (FIM)|525=D|538=60|524=FIM|525=D|538=63|524=H|525=D|538=54|524=8211|525=D|538=35|9376=1010000117dc686f7ea41a43348d6a051c1c32889e|10=034| |
When the custom tags delimiter is defined for the session, it is applied to all incoming and outgoing transport and application messages.
The exceptions are:
When the Engine receives the outgoing message from the application to send it, the Engine uses the value of the TagsDelimiter parameter to concatenate the fields in the FIX message.
The exceptions are:
When the Engine receives the incoming message from the counterparty, the Engine uses the value of the TagsDelimiter parameter to parse the fields in the received FIX message.
The exceptions are:
When the message is being routed from session A to session B with different tags delimiters, then:
When the session starts with an existing set of logs, the current TagsDelimeter is consistent with TagsDelimeter used in the logs. In case of inconsistency:
The FIX Engine writes the value of the TagsDelimiter parameter in the storage depending on the symbol code range.