mFAST
mFAST copied to clipboard
Constant operator in sequence length is not used
We discovered another problem with Xetra T7 5.0 RDI. The template has a sequence with a constant operator for length, which is not read by mFast. Instead it jumps to decoding the next segment.
<group name="BaseTradingRulesCash" presence="optional"> <sequence name="AuctionTypeRules"> <length name="NoAuctionTypeRules" id="2548"> <constant value="1"/> </length> <uInt32 name="AuctionType" id="1803"> <constant value="0"/> </uInt32> <uInt32 name="ClosedBookIndicator" id="28874"> <copy/> </uInt32> <uInt32 name="MarketImbalanceIndicator" id="28875"> <copy/> </uInt32> </sequence> </group>
Test Message:
const unsigned char message [] = {0x7F, 0x87, 0xFA, 0x81, 0x58, 0x45, 0x54, 0xD2, 0x00, 0xF4, 0x09, 0x4C, 0x5B, 0x93, 0x09, 0x4C, 0x5B, 0x94, 0x80, 0x44, 0x45, 0x30, 0x30, 0x30, 0x31, 0x38, 0x37, 0x35, 0x37, 0x32, 0xB9, 0x80, 0x81, 0x80, 0xF0, 0x82, 0xDC, 0xA6, 0x80, 0x80, 0x80, 0x3D, 0x04, 0xBF, 0xFE, 0x81, 0x9C, 0x80, 0x3D, 0x04, 0xBF, 0xFC, 0x03, 0x5C, 0x6B, 0x13, 0xFF, 0xFF, 0x81, 0x82, 0xEC, 0xB8, 0x80, 0x80, 0x81, 0xFC, 0x81, 0x9E, 0x80, 0x81, 0xFC, 0x03, 0x5C, 0x6B, 0x13, 0xFF, 0x80, 0x81, 0x81, 0x80, 0x81, 0x80, 0xE0, 0x81, 0x81, 0x81, 0x80, 0x85, 0xDC, 0x82, 0x86, 0x03, 0xC3, 0x4E, 0x91, 0x80, 0x32, 0x33, 0x39, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x35, 0xB0, 0x01, 0x19, 0x8A, 0x81, 0x32, 0x33, 0x39, 0x2E, 0x30, 0x2E, 0x30, 0x2E, 0x36, 0xB0, 0x01, 0x19, 0x8C, 0xFC, 0x81, 0x82, 0x80, 0x80, 0x80, 0x82, 0x31, 0x31, 0xB0, 0xF4, 0x83, 0x31, 0x32, 0xB0, 0xF4, 0xA8, 0x82, 0x81, 0x83, 0x39, 0xB0, 0xFE, 0x83, 0x30, 0xB0, 0xFE, 0xDC, 0x81, 0x86, 0x80, 0x05, 0x3F, 0x91, 0x82, 0x33, 0xB0, 0x8A, 0x84, 0x34, 0xB0, 0x8B, 0x8C, 0x81, 0x80, 0x82, 0x31, 0xB0, 0xFE, 0x83, 0x32, 0xB0, 0xFE, 0x5A, 0xE8, 0xFB, 0x19, 0xE8, 0x84, 0xC0, 0x80, 0x31, 0x44, 0x38, 0x37, 0x35, 0x37, 0x32, 0x39, 0xD8, 0xC2, 0xC0, 0x89, 0x44, 0x45, 0x30, 0x30, 0x30, 0x31, 0x38, 0x37, 0x35, 0x37, 0x32, 0xB9, 0xB4, 0xC0, 0x8C, 0x54, 0x55, 0x58, 0x31, 0xB0, 0xB8, 0x85, 0x80, 0x81, 0x54, 0x55, 0x58, 0x31, 0xB0, 0x80, 0xC0, 0xA5, 0x83, 0xF8, 0x53, 0x63, 0x72, 0x75, 0x62, 0x62, 0x65, 0xE4, 0x80, 0x81, 0x81, 0xD8, 0x42, 0x55, 0x42, 0x4F, 0xCE, 0x80, 0x80, 0x88, 0xE0, 0x80, 0xB0, 0xC0, 0x81, 0xE0, 0x86, 0x58, 0x45, 0x54, 0xD2, 0xE0, 0x8A, 0xCE, 0xE0, 0x88, 0x45, 0x54, 0x43, 0xB1, 0xE0, 0x89, 0x4D, 0x61, 0x72, 0x6B, 0x65, 0x74, 0x20, 0x47, 0x72, 0x6F, 0x75, 0x70, 0x20, 0x45, 0x54, 0x43, 0xB1, 0xE0, 0x88, 0x58, 0x45, 0x54, 0x52, 0x41, 0x4C, 0xCC, 0xE0, 0x89, 0x58, 0x45, 0x54, 0x52, 0xC1, 0x82, 0xE0, 0x81, 0x09, 0x42, 0x78, 0xA3, 0xFE, 0x81, 0xFE, 0x81, 0x0F, 0xE0, 0x81, 0x83, 0x83, 0xE0, 0xE4, 0xE4, 0x80, 0xC0, 0x82, 0x40, 0x84, 0xFA, 0x87, 0x87, 0x35, 0x30, 0x30, 0x31, 0x30, 0x30, 0xB2, 0x80, 0xE0, 0x83, 0xDC, 0xA4, 0x80, 0x80, 0x81, 0x88, 0xFE, 0x81, 0x98, 0x81, 0x88, 0x81, 0x8C, 0x98, 0x81, 0x8C, 0xFC, 0x03, 0x5C, 0x6B, 0x13, 0xFF, 0x82, 0x8E, 0x80, 0x81, 0xFC, 0x81, 0x80, 0x9E, 0x80, 0x81, 0xFC, 0x03, 0x5C, 0x6B, 0x13, 0xFF, 0x80, 0x81, 0x81, 0x80, 0x80, 0x80, 0xF8, 0x81, 0x82, 0x80, 0x80 };
full template files can be obtained here ( T7 Market + Reference Data Interfaces - XML FAST Templates - FIXML schema files (simulation version) (Download, ZIP, 65.94 kB) -> rdd/RDDFastTemplates-1.1.xml): http://www.xetra.com/xetra-en/technology/t7/system-documentation-e/T7-System-documentation/2845474?frag=2835924
used template files are dated 10.02.2017
direct link : http://www.xetra.com/blob/2856128/249822e5d36bc56b9a33f451fe496b9c/data/T7-Market--Reference-Data-Interfaces-XML-FAST-Templates-FIXML-schema-files.zip
To proof this, we changed the sequence into a group, since the constant value will never appear in the stream. With that workaround mfast decodes the message properly.