How to use a custom symbol instead of SOH
Intro
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:
- StorageMgr::create
- FIXMessage::toString
- FIXMessage::::toRaw
- FIXMessage::prepare
- FIXMsgProcessor::parse
- FIXMsgProcessor::check
- FIXMsgProcessor::checkFields
- GenericPreparedMessage::GenericPreparedMessage (constructor)
Allowed Parameter Values
Forbidden Parameter Values
Config Sample
TagsDelimiter = 0x01 Session.ESVR/GTF.TagsDelimiter = 0xA5
Sample Message
8=FIX.4.4|9=1897|35=AE|49=ICE|34=2793|52=20201109-09:02:17.592044|56=123|57=41|571=185624|487=0|856=0|828=K|150=F|17=5833492|39=2|570=N|55=5863332|48=SECURITY_ID|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=____|552=1|54=1|37=5833490|11=5833490|453=1|448=PARTY_ID|447=D|452=11|448=PARTY_ID|447=D|452=13|448=PARTY_ID|447=D|452=56|448=PARTY_ID|447=D|452=1|448=PARTY_ID|447=D|452=61|448=PARTY_ID|447=D|452=12|448=PARTY_ID|447=D|452=35|448=PARTY_ID|447=D|452=4|448=PARTY_ID|447=D|452=51|448=PARTY_ID|447=D|452=60|448=PARTY_ID|447=D|452=63|448=PARTY_ID|447=D|452=54|376=ComplianceID|77=O|9123=64924188|555=3|600=5377544|602=LegSecurityID|603=8|608=FXXXXX|616=LegSecurityExchange|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=NestedPartyID|525=D|538=51|524=SNestedPartyID|525=D|538=60|524=NestedPartyID|525=D|538=63|524=H|525=D|538=54|524=NestedPartyID|525=D|538=35|9376=LegComplianceID|600=5377545|602=LegSecurityID|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=NestedPartyID|525=D|538=4|524=NestedPartyID|525=D|538=51|524=NestedPartyID|525=D|538=60|524=NestedPartyID|525=D|538=63|524=NestedPartyID|525=D|538=54|524=NestedPartyID|525=D|538=35|9376=LegComplianceID|600=5377546|602=LegSecurityID|603=8|608=FXXXXX|616=LegSecurityExchange|624=1|637=38.35|687=6|654=5833495|9019=6|9023=743|9020=20210301|9021=20210331|539=6|524=NestedPartyID|525=D|538=4|524=NestedPartyID|525=D|538=51|524=NestedPartyID|525=D|538=60|524=NestedPartyID|525=D|538=63|524=H|525=D|538=54|524=NestedPartyID|525=D|538=35|9376=LegComplianceID|10=034|
Specifics of a custom delimiter use
When the custom tags delimiter is defined for the session, it is applied to all incoming and outgoing transport and application messages