This topic provides an example of a fully encoded client-to-CME Globex SBE negotiate message for conflated TCP. For more information regarding conflated TCP functionality consult Conflated TCP Market Data Group Processing page.
SBE Schema
The following SBE Schema will be used for the SBE encoding example in the next section.
<?xml version="1.0" encoding="UTF-8" standalone="true"?>
<ns2:messageSchema xsi:schemaLocation="http://www.fixtradingcommunity.org/pg/file/fplpo/read/1196759/simple-binary-encoding-rc2xsd SimpleBinary-RC2.xsd" byteOrder="littleEndian" description="20190620" semanticVersion="FIX5SP2" version="0" id="2" package="mdpsessionmgmt" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.fixprotocol.org/ns/simple/1.0">
<types>
<type description="HMACVersion" semanticType="String" primitiveType="char" length="13" presence="constant" name="HMACVersion">CME-1-SHA-256</type>
<type description="int32" primitiveType="int32" name="Int32"/>
<type description="String length 20" semanticType="String" primitiveType="char" length="20" name="String20Req"/>
<type description="String length 32 " semanticType="String" primitiveType="char" length="32" name="String32Req"/>
<type description="String length 5" semanticType="String" primitiveType="char" length="5" name="String5"/>
<type description="Unsigned Int16 with NULL" primitiveType="uint16" presence="optional" name="uInt16NULL" nullValue="65535"/>
<type description="uInt32" primitiveType="uint32" name="uInt32"/>
<type description="uInt32NULL" primitiveType="uint32" presence="optional" name="uInt32NULL" nullValue="4294967295"/>
<type description="uInt64" primitiveType="uint64" name="uInt64"/>
<types>
<ns2:message description="Negotiate" id="200" semanticType="MsgTypeNeg" name="Negotiate200" blockLength="78">
<field description="Constant value representing CME HMAC version" id="39003" semanticType="String" name="HMACVersion" type="HMACVersion"/>
<field description="Contains the HMAC signature" id="39005" semanticType="String" name="HMACSignature" type="String32Req" offset="0"/>
<field description="Contains the AccessKeyID assigned to this session on this port" id="39004" semanticType="String" name="AccessKeyID" type="String20Req" offset="32"/>
<field description="Session Identifier defined as type long uInt64, recommended to use timestamp as number of microseconds since Unix epoch" id="39001" semanticType="int" name="UUID" type="uInt64" offset="52"/>
<field description="Time of request, recommended to use timestamp as number of nanoseconds since Unix epoch" id="39002" semanticType="UTCTimestamp" name="RequestTimestamp" type="uInt64" offset="60"/>
<field description="Session ID" id="39006" semanticType="String" name="Session" type="String5" offset="68"/>
<field description="Firm ID" id="39007" semanticType="String" name="Firm" type="String5" offset="73"/>
</ns2:message>
</ns2:messageSchema>
Encoding Example
The table below shows the elements of a client-to-CME Globex Negotiate message. The following SBE hexadecimal message will be encoded:
FE CA 01 00 00 00 bf 32 c2 5b ff 5f 15 16 58 00 4e 00 c8 00 02 00 00 00 fa b6 46 9e c9 87 5c d5 5c 3d 59 fb b5 56 b9 d8 89 1c 62 eb 88 7a 3f d1 b0 af 3f 7d 2e 56 38 f7 45 4a 4d 59 54 69 44 68 68 43 47 4e 51 76 6a 71 47 77 56 6e 1e e4 56 95 43 a7 05 00 f8 15 6b 5b ff 5f 15 16 4d 44 34 31 48 4c 49 53 54 32
CME Globex MDP uses little-endian byte ordering. Therefore, in the example below a hexadecimal value of FE CA is inputted as FE CA in most conversion calculators.
HEXADECIMAL | TAG | NAME | TYPE | VALUE | DESCRIPTION |
---|---|---|---|---|---|
Technical Header | |||||
FE CA | - | encodingType | String 2 | CAFE | This example uses a TCP technical header within the packet structure. |
01 00 00 00 | - | MsgSeqNum | String 4 | 01 | |
bf 32 c2 5b ff 5f 15 16 | - | SendingTime | String 8 | 1591283593706091199 | The epoch Sending Time value of 1633099253939247451 converts to June 4, 2020 15:13:13.706 UTC |
Message Header | |||||
58 00 | - | MsgSize | uInt16 | 88 | MsgSize is the first field in the the SBE message header. |
4e 00 | - | BlockLength | uInt16 | 78 | |
c8 00 | - | TemplateID | uInt16 | 200 | |
02 00 | - | SchemaID | uInt16 | 2 | |
00 | - | Version | uInt16 | 0 | |
SBE Encoded FIX Message | |||||
- | 39003 | HMACVersion | HMACVersion | CME-1-SHA-256 | This value is defined as a constant in the SBE schema and should not be sent on the wire. |
00 fa b6 46 9e c9 87 5c d5 5c 3d 59 fb b5 56 b9 d8 89 1c 62 eb 88 7a 3f d1 b0 af 3f 7d 2e 56 38 f7 | 39005 | HMACSignature | String32Req | �ú¶FžÉ‡\Õ\=YûµV¹Ø‰bëˆz?Ñ°¯?}.V8÷ | |
45 4a 4d 59 54 69 44 68 68 43 47 4e 51 76 6a 71 47 77 56 6e | 39004 | AccessKeyID | String20Req | EJMYTiDhhCGNQvjqGwVn | |
1e e4 56 95 43 a7 05 00 | 39001 | UUID | uInt64 | 1591283593700382 | |
f8 15 6b 5b ff 5f 15 16 | 39002 | RequestTimestamp | uInt64 | 1591283593700382200 | The epoch Sending Time value of 1591283593700382200 converts to June 4, 2020 15:13:13.700 UTC |
4d 44 34 31 48 | 39006 | Session | String5 | MD41H | |
4c 49 53 54 32 | 39007 | Firm | String5 | LIST2 |