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

 Click here to expand...
Control Characters
DECOCTHEXBINSymbolHTML NumberHTML NameDescription
10010100000001SOH
Start of Heading
Printable Characters
DECOCTHEXBINSymbolHTML NumberHTML NameDescription
360442400100100$$
Dollar
941365E01011110^^
Caret - circumflex
1231737B01111011{{
Opening brace
1241747C01111100||
Vertical bar
1251757D01111101}}
Closing brace
1261767E01111110~~
Equivalency sign - tilde
Extended Codes
DECOCTHEXBINSymbolHTML NumberHTML NameDescription
1282008010000000€€Euro sign
1292018110000001



1302028210000010‚‚Single low-9 quotation mark
1312038310000011ƒƒƒLatin small letter f with hook
1322048410000100„„Double low-9 quotation mark
1332058510000101……Horizontal ellipsis
1342068610000110††Dagger
1352078710000111‡‡Double dagger
1362108810001000ˆˆˆModifier letter circumflex accent
1372118910001001‰‰Per mille sign
1382128A10001010ŠŠŠLatin capital letter S with caron
1392138B10001011‹‹Single left-pointing angle quotation
1402148C10001100ŒŒŒLatin capital ligature OE
1412158D10001101



1422168E10001110ŽŽ
Latin capital letter Z with caron
1432178F10001111



1442209010010000



1452219110010001‘‘Left single quotation mark
1462229210010010’’Right single quotation mark
1472239310010011““Left double quotation mark
1482249410010100””Right double quotation mark
1492259510010101••Bullet
1502269610010110––En dash
1512279710010111——Em dash
1522309810011000˜˜˜Small tilde
1532319910011001™™Trademark sign
1542329A10011010šššLatin small letter S with caron
1552339B10011011››Single right-pointing angle quotation mark
1562349C10011100œœœLatin small ligature oe
1572359D10011101



1582369E10011110žž
Latin small letter z with caron
1592379F10011111ŸŸŸLatin capital letter Y with diaeresis
160240A010100000
  Non-breaking space
161241A110100001¡¡¡Inverted exclamation mark
162242A210100010¢¢¢Cent sign
163243A310100011£££Pound sign
164244A410100100¤¤¤Currency sign
165245A510100101¥¥¥Yen sign
166246A610100110¦¦¦Pipe, Broken vertical bar
167247A710100111§§§Section sign
168250A810101000¨¨¨Spacing diaeresis - umlaut
169251A910101001©©©Copyright sign
170252AA10101010ªªªFeminine ordinal indicator
171253AB10101011«««Left double angle quotes
172254AC10101100¬¬¬Not sign
173255AD10101101­­­Soft hyphen
174256AE10101110®®®Registered trademark sign
175257AF10101111¯¯¯Spacing macron - overline
176260B010110000°°°Degree sign
177261B110110001±±±Plus-or-minus sign
178262B210110010²²²Superscript two - squared
179263B310110011³³³Superscript three - cubed
180264B410110100´´´Acute accent - spacing acute
181265B510110101µµµMicro sign
182266B610110110¶¶Pilcrow sign - paragraph sign
183267B710110111···Middle dot - Georgian comma
184270B810111000¸¸¸Spacing cedilla
185271B910111001¹¹¹Superscript one
186272BA10111010ºººMasculine ordinal indicator
187273BB10111011»»»Right double angle quotes
188274BC10111100¼¼¼Fraction one quarter
189275BD10111101½½½Fraction one half
190276BE10111110¾¾¾Fraction three quarters
191277BF10111111¿¿¿Inverted question mark
192300C011000000ÀÀÀLatin capital letter A with grave
193301C111000001ÁÁÁLatin capital letter A with acute
194302C211000010ÂÂÂLatin capital letter A with circumflex
195303C311000011ÃÃÃLatin capital letter A with a tilde
196304C411000100ÄÄÄLatin capital letter A with diaeresis
197305C511000101ÅÅÅLatin capital letter A with ring above
198306C611000110ÆÆÆLatin capital letter AE
199307C711000111ÇÇÇLatin capital letter C with cedilla
200310C811001000ÈÈÈLatin capital letter E with a grave
201311C911001001ÉÉÉLatin capital letter E with acute
202312CA11001010ÊÊÊLatin capital letter E with circumflex
203313CB11001011ËËËLatin capital letter E with diaeresis
204314CC11001100ÌÌÌLatin capital letter I with grave
205315CD11001101ÍÍÍLatin capital letter I with acute
206316CE11001110ÎÎÎLatin capital letter I with circumflex
207317CF11001111ÏÏÏLatin capital letter I with diaeresis
208320D011010000ÐÐÐLatin capital letter ETH
209321D111010001ÑÑÑLatin capital letter N with a tilde
210322D211010010ÒÒÒLatin capital letter O with grave
211323D311010011ÓÓÓLatin capital letter O with acute
212324D411010100ÔÔÔLatin capital letter O with circumflex
213325D511010101ÕÕÕLatin capital letter O with a tilde
214326D611010110ÖÖÖLatin capital letter O with diaeresis
215327D711010111×××Multiplication sign
216330D811011000ØØØLatin capital letter O with slash
217331D911011001ÙÙÙLatin capital letter U with grave
218332DA11011010ÚÚÚLatin capital letter U with acute
219333DB11011011ÛÛÛLatin capital letter U with circumflex
220334DC11011100ÜÜÜLatin capital letter U with diaeresis
221335DD11011101ÝÝÝLatin capital letter Y with acute
222336DE11011110ÞÞÞLatin capital letter THORN
223337DF11011111ßßßLatin small letter sharp s - ess-zed
224340E011100000àààLatin small letter a with grave
225341E111100001áááLatin small letter a with acute
226342E211100010âââLatin small letter a with circumflex
227343E311100011ãããLatin small letter a with tilde
228344E411100100äääLatin small letter a with diaeresis
229345E511100101åååLatin small letter a with ring above
230346E611100110æææLatin small letter ae
231347E711100111çççLatin small letter c with cedilla
232350E811101000èèèLatin small letter e with grave
233351E911101001éééLatin small letter e with acute
234352EA11101010êêêLatin small letter e with circumflex
235353EB11101011ëëëLatin small letter e with diaeresis
236354EC11101100ìììLatin small letter i with grave
237355ED11101101íííLatin small letter i with acute
238356EE11101110îîîLatin small letter i with circumflex
239357EF11101111ïïïLatin small letter i with diaeresis
240360F011110000ðððLatin small letter eth
241361F111110001ñññLatin small letter n with tilde
242362F211110010òòòLatin small letter o with grave
243363F311110011óóóLatin small letter o with acute
244364F411110100ôôôLatin small letter o with circumflex
245365F511110101õõõLatin small letter o with tilde
246366F611110110öööLatin small letter o with diaeresis
247367F711110111÷÷÷Division sign
248370F811111000øøøLatin small letter o with slash
249371F911111001ùùùLatin small letter u with grave
250372FA11111010úúúLatin small letter u with acute
251373FB11111011ûûûLatin small letter u with circumflex
252374FC11111100üüüLatin small letter u with diaeresis
253375FD11111101ýýýLatin small letter y with acute
254376FE11111110þþþLatin small letter thorn
255377FF11111111ÿÿÿLatin small letter y with diaeresis

Forbidden Parameter Values

 Click here to expand...
Control Characters
DECOCTHEXBINSymbolHTML NumberHTML NameDescription
00000000000000NUL�
Null char
20020200000010STX
Start of Text
30030300000011ETX
End of Text
40040400000100EOT
End of Transmission
50050500000101ENQ
Inquiry
60060600000110ACK
Acknowledgment
70070700000111BEL
Bell
80100800001000BS
BackSpace
90110900001001HT	
Horizontal Tab
100120A00001010LF

Line Feed
110130B00001011VT
Vertical Tab
120140C00001100FF
Form Feed
130150D00001101CR
Carriage Return
140160E00001110SO
Shift Out / X-On
150170F00001111SI
Shift In / X-Off
160201000010000DLE
Data Line Escape
170211100010001DC1
Device Control 1 (oft. XON)
180221200010010DC2
Device Control 2
190231300010011DC3
Device Control 3 (oft. XOFF)
200241400010100DC4
Device Control 4
210251500010101NAK
Negative Acknowledgement
220261600010110SYN
Synchronous Idle
230271700010111ETB
End of Transmit Block
240301800011000CAN
Cancel
250311900011001EM
End of Medium
260321A00011010SUB
Substitute
270331B00011011ESC
Escape
280341C00011100FS
File Separator
290351D00011101GS
Group Separator
300361E00011110RS
Record Separator
310371F00011111US
Unit Separator
Printable Characters
DECOCTHEXBINSymbolHTML NumberHTML NameDescription
320402000100000
 
Space
330412100100001!!
Exclamation mark
340422200100010"""Double quotes (or speech marks)
350432300100011##
Number
370452500100101%%
Percent sign
380462600100110&&&Ampersand
390472700100111''
Single quote
400502800101000((
Open parenthesis (or open bracket)
410512900101001))
Close parenthesis (or close bracket)
420522A00101010**
Asterisk
430532B00101011++
Plus
440542C00101100,,
Comma
450552D00101101--
Hyphen
460562E00101110..
Period, dot or full stop
470572F00101111//
Slash or divide
48060300011000000
Zero
49061310011000111
One
50062320011001022
Two
51063330011001133
Three
52064340011010044
Four
53065350011010155
Five
54066360011011066
Six
55067370011011177
Seven
56070380011100088
Eight
57071390011100199
Nine
580723A00111010::
Colon
590733B00111011;&#59;
Semicolon
600743C00111100<&#60;&lt;Less than (or open angled bracket)
610753D00111101=&#61;
Equals
620763E00111110>&#62;&gt;Greater than (or close angled bracket)
630773F00111111?&#63;
Question mark
641004001000000@&#64;
At symbol
651014101000001A&#65;
Uppercase A
661024201000010B&#66;
Uppercase B
671034301000011C&#67;
Uppercase C
681044401000100D&#68;
Uppercase D
691054501000101E&#69;
Uppercase E
701064601000110F&#70;
Uppercase F
711074701000111G&#71;
Uppercase G
721104801001000H&#72;
Uppercase H
731114901001001I&#73;
Uppercase I
741124A01001010J&#74;
Uppercase J
751134B01001011K&#75;
Uppercase K
761144C01001100L&#76;
Uppercase L
771154D01001101M&#77;
Uppercase M
781164E01001110N&#78;
Uppercase N
791174F01001111O&#79;
Uppercase O
801205001010000P&#80;
Uppercase P
811215101010001Q&#81;
Uppercase Q
821225201010010R&#82;
Uppercase R
831235301010011S&#83;
Uppercase S
841245401010100T&#84;
Uppercase T
851255501010101U&#85;
Uppercase U
861265601010110V&#86;
Uppercase V
871275701010111W&#87;
Uppercase W
881305801011000X&#88;
Uppercase X
891315901011001Y&#89;
Uppercase Y
901325A01011010Z&#90;
Uppercase Z
911335B01011011[&#91;
Opening bracket
921345C01011100\&#92;
Backslash
931355D01011101]&#93;
Closing bracket
951375F01011111_&#95;
Underscore
961406001100000`&#96;
Grave accent
971416101100001a&#97;
Lowercase a
981426201100010b&#98;
Lowercase b
991436301100011c&#99;
Lowercase c
1001446401100100d&#100;
Lowercase d
1011456501100101e&#101;
Lowercase e
1021466601100110f&#102;
Lowercase f
1031476701100111g&#103;
Lowercase g
1041506801101000h&#104;
Lowercase h
1051516901101001i&#105;
Lowercase i
1061526A01101010j&#106;
Lowercase j
1071536B01101011k&#107;
Lowercase k
1081546C01101100l&#108;
Lowercase l
1091556D01101101m&#109;
Lowercase m
1101566E01101110n&#110;
Lowercase n
1111576F01101111o&#111;
Lowercase o
1121607001110000p&#112;
Lowercase p
1131617101110001q&#113;
Lowercase q
1141627201110010r&#114;
Lowercase r
1151637301110011s&#115;
Lowercase s
1161647401110100t&#116;
Lowercase t
1171657501110101u&#117;
Lowercase u
1181667601110110v&#118;
Lowercase v
1191677701110111w&#119;
Lowercase w
1201707801111000x&#120;
Lowercase x
1211717901111001y&#121;
Lowercase y
1221727A01111010z&#122;
Lowercase z
1271777F01111111
&#127;
Delete

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.

The exceptions are:

  • the first outgoing Logon message in the Initiator session
  • the first incoming Logon message in the Acceptor session
  • the first outgoing Logon (or Logout) message in the Acceptor session
  • the first incoming Logon (or Logout) message in the Initiator session

Custom delimiter in outgoing message

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:

  • the first outgoing Logon message in the Initiator session
  • the first outgoing Logon (or Logout) message in the Acceptor session

Custom delimiter in incoming message

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:

  • the first incoming Logon message in the Acceptor session
  • the first incoming Logon (or Logout) message in the Initiator session

Custom delimiter at session routing

When the message is being routed from session A to session B with different tags delimiters, then:

  • The tags delimiter for session A is used when the FIXEdge receives the message from the session A
  • The tags delimiter for session B is used when the FIXEdge sends the message to the session B

Custom delimiter at session restart

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 session is not created
  • An error is raised with the message: "The new tags delimiter <value> is inconsistent with the existing log files. You can either change the tags delimiter back to the <value> to keep the sequence numbers or restart the session with new log files to use new tags delimiter and reset the sequence numbers."

Keeping delimiter in the storage

The FIX Engine writes the value of the TagsDelimiter parameter in the storage depending on the symbol code range.

  • The printable symbols are specified as a printable symbol. Examples: ^, $, |.
  • The Control characters and Extended codes are specified as a Hex code only. Examples: 0x01, 0x80, 0xCA.