4361 lines
117 KiB
C
4361 lines
117 KiB
C
// auto-generated by Georg Sauthoff's eti2wireshark.py
|
|
|
|
/* packet-eti.c
|
|
* Routines for EOBI dissection
|
|
* Copyright 2021, Georg Sauthoff <mail@gms.tf>
|
|
*
|
|
* Wireshark - Network traffic analyzer
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*/
|
|
|
|
/*
|
|
* The Enhanced Order Book Interface 10.0 (EOBI) is an electronic trading protocol
|
|
* that is used by a few exchanges (Eurex, Xetra, ...).
|
|
*
|
|
* It's a Length-Tag based protocol consisting of mostly fix sized
|
|
* request/response messages.
|
|
*
|
|
* Links:
|
|
* https://en.wikipedia.org/wiki/List_of_electronic_trading_protocols#Europe
|
|
* https://github.com/gsauthof/python-eti#protocol-descriptions
|
|
* https://github.com/gsauthof/python-eti#protocol-introduction
|
|
*
|
|
*/
|
|
|
|
#include <config.h>
|
|
|
|
|
|
#include <epan/packet.h> // Should be first Wireshark include (other than config.h)
|
|
#include "packet-udp.h" // udp_dissect_pdus()
|
|
#include <epan/expert.h> // expert info
|
|
|
|
#include <inttypes.h>
|
|
#include <stdio.h> // snprintf()
|
|
|
|
|
|
/* Prototypes */
|
|
/* (Required to prevent [-Wmissing-prototypes] warnings */
|
|
void proto_reg_handoff_eobi(void);
|
|
void proto_register_eobi(void);
|
|
|
|
static int proto_eobi = -1;
|
|
static expert_field ei_eobi_counter_overflow = EI_INIT;
|
|
static expert_field ei_eobi_invalid_template = EI_INIT;
|
|
static expert_field ei_eobi_invalid_length = EI_INIT;
|
|
static expert_field ei_eobi_missing = EI_INIT;
|
|
static expert_field ei_eobi_overused = EI_INIT;
|
|
|
|
static int hf_eobi[] = { -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1 };
|
|
static int hf_eobi_dscp_exec_summary = -1;
|
|
static int hf_eobi_dscp_improved = -1;
|
|
static int hf_eobi_dscp_widened = -1;
|
|
enum Field_Handle_Index {
|
|
AGGRESSORSIDE_FH_IDX
|
|
, AGGRESSORTIME_FH_IDX
|
|
, ALGORITHMICTRADEINDICATOR_FH_IDX
|
|
, APPLSEQNUM_FH_IDX
|
|
, APPLSEQRESETINDICATOR_FH_IDX
|
|
, BIDORDTYPE_FH_IDX
|
|
, BIDPX_FH_IDX
|
|
, BIDSIZE_FH_IDX
|
|
, BODYLEN_FH_IDX
|
|
, COMPLETIONINDICATOR_FH_IDX
|
|
, CROSSREQUESTTYPE_FH_IDX
|
|
, DSCP_FH_IDX
|
|
, DISPLAYQTY_FH_IDX
|
|
, EXECID_FH_IDX
|
|
, FASTMARKETINDICATOR_FH_IDX
|
|
, HIGHPX_FH_IDX
|
|
, IMBALANCEQTY_FH_IDX
|
|
, IMPLIEDMARKETINDICATOR_FH_IDX
|
|
, INPUTSOURCE_FH_IDX
|
|
, INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX
|
|
, LASTFRAGMENT_FH_IDX
|
|
, LASTMSGSEQNUMPROCESSED_FH_IDX
|
|
, LASTPX_FH_IDX
|
|
, LASTQTY_FH_IDX
|
|
, LASTUPDATETIME_FH_IDX
|
|
, LEGPRICE_FH_IDX
|
|
, LEGRATIOMULTIPLIER_FH_IDX
|
|
, LEGRATIOQTY_FH_IDX
|
|
, LEGSECURITYID_FH_IDX
|
|
, LEGSECURITYTYPE_FH_IDX
|
|
, LEGSIDE_FH_IDX
|
|
, LEGSYMBOL_FH_IDX
|
|
, LOWPX_FH_IDX
|
|
, MDENTRYPX_FH_IDX
|
|
, MDENTRYSIZE_FH_IDX
|
|
, MDENTRYTYPE_FH_IDX
|
|
, MARKETCONDITION_FH_IDX
|
|
, MARKETSEGMENTID_FH_IDX
|
|
, MASSMARKETCONDITION_FH_IDX
|
|
, MASSSOLDOUTINDICATOR_FH_IDX
|
|
, MATCHSUBTYPE_FH_IDX
|
|
, MATCHTYPE_FH_IDX
|
|
, MSGSEQNUM_FH_IDX
|
|
, NOLEGS_FH_IDX
|
|
, NOMDENTRIES_FH_IDX
|
|
, NORELATEDSYM_FH_IDX
|
|
, NUMBEROFBUYORDERS_FH_IDX
|
|
, NUMBEROFSELLORDERS_FH_IDX
|
|
, OFFERORDTYPE_FH_IDX
|
|
, OFFERPX_FH_IDX
|
|
, OFFERSIZE_FH_IDX
|
|
, ORDTYPE_FH_IDX
|
|
, PARTITIONID_FH_IDX
|
|
, POTENTIALSECURITYTRADINGEVENT_FH_IDX
|
|
, PREVDISPLAYQTY_FH_IDX
|
|
, PREVPRICE_FH_IDX
|
|
, PRICE_FH_IDX
|
|
, PRODUCTCOMPLEX_FH_IDX
|
|
, REQUESTTIME_FH_IDX
|
|
, RESTINGCXLQTY_FH_IDX
|
|
, RESTINGHIDDENQTY_FH_IDX
|
|
, SECURITYID_FH_IDX
|
|
, SECURITYMASSSTATUS_FH_IDX
|
|
, SECURITYMASSTRADINGEVENT_FH_IDX
|
|
, SECURITYMASSTRADINGSTATUS_FH_IDX
|
|
, SECURITYSTATUS_FH_IDX
|
|
, SECURITYSUBTYPE_FH_IDX
|
|
, SECURITYTRADINGEVENT_FH_IDX
|
|
, SECURITYTRADINGSTATUS_FH_IDX
|
|
, SIDE_FH_IDX
|
|
, SOLDOUTINDICATOR_FH_IDX
|
|
, TEMPLATEID_FH_IDX
|
|
, TOTNOORDERS_FH_IDX
|
|
, TRADSESSTATUS_FH_IDX
|
|
, TRADECONDITION_FH_IDX
|
|
, TRADINGSESSIONID_FH_IDX
|
|
, TRADINGSESSIONSUBID_FH_IDX
|
|
, TRANSACTTIME_FH_IDX
|
|
, TRDMATCHID_FH_IDX
|
|
, TRDREGTSEXECUTIONTIME_FH_IDX
|
|
, TRDREGTSPREVTIMEPRIORITY_FH_IDX
|
|
, TRDREGTSTIMEIN_FH_IDX
|
|
, TRDREGTSTIMEPRIORITY_FH_IDX
|
|
};
|
|
static const value_string template_id_vals[] = { // TemplateID
|
|
{ 13001, "Heartbeat" },
|
|
{ 13002, "Unknown" },
|
|
{ 13003, "Unknown" },
|
|
{ 13004, "Unknown" },
|
|
{ 13005, "PacketHeader" },
|
|
{ 13006, "Unknown" },
|
|
{ 13007, "Unknown" },
|
|
{ 13008, "Unknown" },
|
|
{ 13009, "Unknown" },
|
|
{ 13010, "Unknown" },
|
|
{ 13011, "Unknown" },
|
|
{ 13012, "Unknown" },
|
|
{ 13013, "Unknown" },
|
|
{ 13014, "Unknown" },
|
|
{ 13015, "Unknown" },
|
|
{ 13016, "Unknown" },
|
|
{ 13017, "Unknown" },
|
|
{ 13018, "Unknown" },
|
|
{ 13019, "Unknown" },
|
|
{ 13020, "Unknown" },
|
|
{ 13021, "Unknown" },
|
|
{ 13022, "Unknown" },
|
|
{ 13023, "Unknown" },
|
|
{ 13024, "Unknown" },
|
|
{ 13025, "Unknown" },
|
|
{ 13026, "Unknown" },
|
|
{ 13027, "Unknown" },
|
|
{ 13028, "Unknown" },
|
|
{ 13029, "Unknown" },
|
|
{ 13030, "Unknown" },
|
|
{ 13031, "Unknown" },
|
|
{ 13032, "Unknown" },
|
|
{ 13033, "Unknown" },
|
|
{ 13034, "Unknown" },
|
|
{ 13035, "Unknown" },
|
|
{ 13036, "Unknown" },
|
|
{ 13037, "Unknown" },
|
|
{ 13038, "Unknown" },
|
|
{ 13039, "Unknown" },
|
|
{ 13040, "Unknown" },
|
|
{ 13041, "Unknown" },
|
|
{ 13042, "Unknown" },
|
|
{ 13043, "Unknown" },
|
|
{ 13044, "Unknown" },
|
|
{ 13045, "Unknown" },
|
|
{ 13046, "Unknown" },
|
|
{ 13047, "Unknown" },
|
|
{ 13048, "Unknown" },
|
|
{ 13049, "Unknown" },
|
|
{ 13050, "Unknown" },
|
|
{ 13051, "Unknown" },
|
|
{ 13052, "Unknown" },
|
|
{ 13053, "Unknown" },
|
|
{ 13054, "Unknown" },
|
|
{ 13055, "Unknown" },
|
|
{ 13056, "Unknown" },
|
|
{ 13057, "Unknown" },
|
|
{ 13058, "Unknown" },
|
|
{ 13059, "Unknown" },
|
|
{ 13060, "Unknown" },
|
|
{ 13061, "Unknown" },
|
|
{ 13062, "Unknown" },
|
|
{ 13063, "Unknown" },
|
|
{ 13064, "Unknown" },
|
|
{ 13065, "Unknown" },
|
|
{ 13066, "Unknown" },
|
|
{ 13067, "Unknown" },
|
|
{ 13068, "Unknown" },
|
|
{ 13069, "Unknown" },
|
|
{ 13070, "Unknown" },
|
|
{ 13071, "Unknown" },
|
|
{ 13072, "Unknown" },
|
|
{ 13073, "Unknown" },
|
|
{ 13074, "Unknown" },
|
|
{ 13075, "Unknown" },
|
|
{ 13076, "Unknown" },
|
|
{ 13077, "Unknown" },
|
|
{ 13078, "Unknown" },
|
|
{ 13079, "Unknown" },
|
|
{ 13080, "Unknown" },
|
|
{ 13081, "Unknown" },
|
|
{ 13082, "Unknown" },
|
|
{ 13083, "Unknown" },
|
|
{ 13084, "Unknown" },
|
|
{ 13085, "Unknown" },
|
|
{ 13086, "Unknown" },
|
|
{ 13087, "Unknown" },
|
|
{ 13088, "Unknown" },
|
|
{ 13089, "Unknown" },
|
|
{ 13090, "Unknown" },
|
|
{ 13091, "Unknown" },
|
|
{ 13092, "Unknown" },
|
|
{ 13093, "Unknown" },
|
|
{ 13094, "Unknown" },
|
|
{ 13095, "Unknown" },
|
|
{ 13096, "Unknown" },
|
|
{ 13097, "Unknown" },
|
|
{ 13098, "Unknown" },
|
|
{ 13099, "Unknown" },
|
|
{ 13100, "OrderAdd" },
|
|
{ 13101, "OrderModify" },
|
|
{ 13102, "OrderDelete" },
|
|
{ 13103, "OrderMassDelete" },
|
|
{ 13104, "FullOrderExecution" },
|
|
{ 13105, "PartialOrderExecution" },
|
|
{ 13106, "OrderModifySamePrio" },
|
|
{ 13107, "Unknown" },
|
|
{ 13108, "Unknown" },
|
|
{ 13109, "Unknown" },
|
|
{ 13110, "Unknown" },
|
|
{ 13111, "Unknown" },
|
|
{ 13112, "Unknown" },
|
|
{ 13113, "Unknown" },
|
|
{ 13114, "Unknown" },
|
|
{ 13115, "Unknown" },
|
|
{ 13116, "Unknown" },
|
|
{ 13117, "Unknown" },
|
|
{ 13118, "Unknown" },
|
|
{ 13119, "Unknown" },
|
|
{ 13120, "Unknown" },
|
|
{ 13121, "Unknown" },
|
|
{ 13122, "Unknown" },
|
|
{ 13123, "Unknown" },
|
|
{ 13124, "Unknown" },
|
|
{ 13125, "Unknown" },
|
|
{ 13126, "Unknown" },
|
|
{ 13127, "Unknown" },
|
|
{ 13128, "Unknown" },
|
|
{ 13129, "Unknown" },
|
|
{ 13130, "Unknown" },
|
|
{ 13131, "Unknown" },
|
|
{ 13132, "Unknown" },
|
|
{ 13133, "Unknown" },
|
|
{ 13134, "Unknown" },
|
|
{ 13135, "Unknown" },
|
|
{ 13136, "Unknown" },
|
|
{ 13137, "Unknown" },
|
|
{ 13138, "Unknown" },
|
|
{ 13139, "Unknown" },
|
|
{ 13140, "Unknown" },
|
|
{ 13141, "Unknown" },
|
|
{ 13142, "Unknown" },
|
|
{ 13143, "Unknown" },
|
|
{ 13144, "Unknown" },
|
|
{ 13145, "Unknown" },
|
|
{ 13146, "Unknown" },
|
|
{ 13147, "Unknown" },
|
|
{ 13148, "Unknown" },
|
|
{ 13149, "Unknown" },
|
|
{ 13150, "Unknown" },
|
|
{ 13151, "Unknown" },
|
|
{ 13152, "Unknown" },
|
|
{ 13153, "Unknown" },
|
|
{ 13154, "Unknown" },
|
|
{ 13155, "Unknown" },
|
|
{ 13156, "Unknown" },
|
|
{ 13157, "Unknown" },
|
|
{ 13158, "Unknown" },
|
|
{ 13159, "Unknown" },
|
|
{ 13160, "Unknown" },
|
|
{ 13161, "Unknown" },
|
|
{ 13162, "Unknown" },
|
|
{ 13163, "Unknown" },
|
|
{ 13164, "Unknown" },
|
|
{ 13165, "Unknown" },
|
|
{ 13166, "Unknown" },
|
|
{ 13167, "Unknown" },
|
|
{ 13168, "Unknown" },
|
|
{ 13169, "Unknown" },
|
|
{ 13170, "Unknown" },
|
|
{ 13171, "Unknown" },
|
|
{ 13172, "Unknown" },
|
|
{ 13173, "Unknown" },
|
|
{ 13174, "Unknown" },
|
|
{ 13175, "Unknown" },
|
|
{ 13176, "Unknown" },
|
|
{ 13177, "Unknown" },
|
|
{ 13178, "Unknown" },
|
|
{ 13179, "Unknown" },
|
|
{ 13180, "Unknown" },
|
|
{ 13181, "Unknown" },
|
|
{ 13182, "Unknown" },
|
|
{ 13183, "Unknown" },
|
|
{ 13184, "Unknown" },
|
|
{ 13185, "Unknown" },
|
|
{ 13186, "Unknown" },
|
|
{ 13187, "Unknown" },
|
|
{ 13188, "Unknown" },
|
|
{ 13189, "Unknown" },
|
|
{ 13190, "Unknown" },
|
|
{ 13191, "Unknown" },
|
|
{ 13192, "Unknown" },
|
|
{ 13193, "Unknown" },
|
|
{ 13194, "Unknown" },
|
|
{ 13195, "Unknown" },
|
|
{ 13196, "Unknown" },
|
|
{ 13197, "Unknown" },
|
|
{ 13198, "Unknown" },
|
|
{ 13199, "Unknown" },
|
|
{ 13200, "TradeReversal" },
|
|
{ 13201, "TradeReport" },
|
|
{ 13202, "ExecutionSummary" },
|
|
{ 13203, "Unknown" },
|
|
{ 13204, "Unknown" },
|
|
{ 13205, "Unknown" },
|
|
{ 13206, "Unknown" },
|
|
{ 13207, "Unknown" },
|
|
{ 13208, "Unknown" },
|
|
{ 13209, "Unknown" },
|
|
{ 13210, "Unknown" },
|
|
{ 13211, "Unknown" },
|
|
{ 13212, "Unknown" },
|
|
{ 13213, "Unknown" },
|
|
{ 13214, "Unknown" },
|
|
{ 13215, "Unknown" },
|
|
{ 13216, "Unknown" },
|
|
{ 13217, "Unknown" },
|
|
{ 13218, "Unknown" },
|
|
{ 13219, "Unknown" },
|
|
{ 13220, "Unknown" },
|
|
{ 13221, "Unknown" },
|
|
{ 13222, "Unknown" },
|
|
{ 13223, "Unknown" },
|
|
{ 13224, "Unknown" },
|
|
{ 13225, "Unknown" },
|
|
{ 13226, "Unknown" },
|
|
{ 13227, "Unknown" },
|
|
{ 13228, "Unknown" },
|
|
{ 13229, "Unknown" },
|
|
{ 13230, "Unknown" },
|
|
{ 13231, "Unknown" },
|
|
{ 13232, "Unknown" },
|
|
{ 13233, "Unknown" },
|
|
{ 13234, "Unknown" },
|
|
{ 13235, "Unknown" },
|
|
{ 13236, "Unknown" },
|
|
{ 13237, "Unknown" },
|
|
{ 13238, "Unknown" },
|
|
{ 13239, "Unknown" },
|
|
{ 13240, "Unknown" },
|
|
{ 13241, "Unknown" },
|
|
{ 13242, "Unknown" },
|
|
{ 13243, "Unknown" },
|
|
{ 13244, "Unknown" },
|
|
{ 13245, "Unknown" },
|
|
{ 13246, "Unknown" },
|
|
{ 13247, "Unknown" },
|
|
{ 13248, "Unknown" },
|
|
{ 13249, "Unknown" },
|
|
{ 13250, "Unknown" },
|
|
{ 13251, "Unknown" },
|
|
{ 13252, "Unknown" },
|
|
{ 13253, "Unknown" },
|
|
{ 13254, "Unknown" },
|
|
{ 13255, "Unknown" },
|
|
{ 13256, "Unknown" },
|
|
{ 13257, "Unknown" },
|
|
{ 13258, "Unknown" },
|
|
{ 13259, "Unknown" },
|
|
{ 13260, "Unknown" },
|
|
{ 13261, "Unknown" },
|
|
{ 13262, "Unknown" },
|
|
{ 13263, "Unknown" },
|
|
{ 13264, "Unknown" },
|
|
{ 13265, "Unknown" },
|
|
{ 13266, "Unknown" },
|
|
{ 13267, "Unknown" },
|
|
{ 13268, "Unknown" },
|
|
{ 13269, "Unknown" },
|
|
{ 13270, "Unknown" },
|
|
{ 13271, "Unknown" },
|
|
{ 13272, "Unknown" },
|
|
{ 13273, "Unknown" },
|
|
{ 13274, "Unknown" },
|
|
{ 13275, "Unknown" },
|
|
{ 13276, "Unknown" },
|
|
{ 13277, "Unknown" },
|
|
{ 13278, "Unknown" },
|
|
{ 13279, "Unknown" },
|
|
{ 13280, "Unknown" },
|
|
{ 13281, "Unknown" },
|
|
{ 13282, "Unknown" },
|
|
{ 13283, "Unknown" },
|
|
{ 13284, "Unknown" },
|
|
{ 13285, "Unknown" },
|
|
{ 13286, "Unknown" },
|
|
{ 13287, "Unknown" },
|
|
{ 13288, "Unknown" },
|
|
{ 13289, "Unknown" },
|
|
{ 13290, "Unknown" },
|
|
{ 13291, "Unknown" },
|
|
{ 13292, "Unknown" },
|
|
{ 13293, "Unknown" },
|
|
{ 13294, "Unknown" },
|
|
{ 13295, "Unknown" },
|
|
{ 13296, "Unknown" },
|
|
{ 13297, "Unknown" },
|
|
{ 13298, "Unknown" },
|
|
{ 13299, "Unknown" },
|
|
{ 13300, "ProductStateChange" },
|
|
{ 13301, "InstrumentStateChange" },
|
|
{ 13302, "MassInstrumentStateChange" },
|
|
{ 13303, "Unknown" },
|
|
{ 13304, "Unknown" },
|
|
{ 13305, "Unknown" },
|
|
{ 13306, "Unknown" },
|
|
{ 13307, "Unknown" },
|
|
{ 13308, "Unknown" },
|
|
{ 13309, "Unknown" },
|
|
{ 13310, "Unknown" },
|
|
{ 13311, "Unknown" },
|
|
{ 13312, "Unknown" },
|
|
{ 13313, "Unknown" },
|
|
{ 13314, "Unknown" },
|
|
{ 13315, "Unknown" },
|
|
{ 13316, "Unknown" },
|
|
{ 13317, "Unknown" },
|
|
{ 13318, "Unknown" },
|
|
{ 13319, "Unknown" },
|
|
{ 13320, "Unknown" },
|
|
{ 13321, "Unknown" },
|
|
{ 13322, "Unknown" },
|
|
{ 13323, "Unknown" },
|
|
{ 13324, "Unknown" },
|
|
{ 13325, "Unknown" },
|
|
{ 13326, "Unknown" },
|
|
{ 13327, "Unknown" },
|
|
{ 13328, "Unknown" },
|
|
{ 13329, "Unknown" },
|
|
{ 13330, "Unknown" },
|
|
{ 13331, "Unknown" },
|
|
{ 13332, "Unknown" },
|
|
{ 13333, "Unknown" },
|
|
{ 13334, "Unknown" },
|
|
{ 13335, "Unknown" },
|
|
{ 13336, "Unknown" },
|
|
{ 13337, "Unknown" },
|
|
{ 13338, "Unknown" },
|
|
{ 13339, "Unknown" },
|
|
{ 13340, "Unknown" },
|
|
{ 13341, "Unknown" },
|
|
{ 13342, "Unknown" },
|
|
{ 13343, "Unknown" },
|
|
{ 13344, "Unknown" },
|
|
{ 13345, "Unknown" },
|
|
{ 13346, "Unknown" },
|
|
{ 13347, "Unknown" },
|
|
{ 13348, "Unknown" },
|
|
{ 13349, "Unknown" },
|
|
{ 13350, "Unknown" },
|
|
{ 13351, "Unknown" },
|
|
{ 13352, "Unknown" },
|
|
{ 13353, "Unknown" },
|
|
{ 13354, "Unknown" },
|
|
{ 13355, "Unknown" },
|
|
{ 13356, "Unknown" },
|
|
{ 13357, "Unknown" },
|
|
{ 13358, "Unknown" },
|
|
{ 13359, "Unknown" },
|
|
{ 13360, "Unknown" },
|
|
{ 13361, "Unknown" },
|
|
{ 13362, "Unknown" },
|
|
{ 13363, "Unknown" },
|
|
{ 13364, "Unknown" },
|
|
{ 13365, "Unknown" },
|
|
{ 13366, "Unknown" },
|
|
{ 13367, "Unknown" },
|
|
{ 13368, "Unknown" },
|
|
{ 13369, "Unknown" },
|
|
{ 13370, "Unknown" },
|
|
{ 13371, "Unknown" },
|
|
{ 13372, "Unknown" },
|
|
{ 13373, "Unknown" },
|
|
{ 13374, "Unknown" },
|
|
{ 13375, "Unknown" },
|
|
{ 13376, "Unknown" },
|
|
{ 13377, "Unknown" },
|
|
{ 13378, "Unknown" },
|
|
{ 13379, "Unknown" },
|
|
{ 13380, "Unknown" },
|
|
{ 13381, "Unknown" },
|
|
{ 13382, "Unknown" },
|
|
{ 13383, "Unknown" },
|
|
{ 13384, "Unknown" },
|
|
{ 13385, "Unknown" },
|
|
{ 13386, "Unknown" },
|
|
{ 13387, "Unknown" },
|
|
{ 13388, "Unknown" },
|
|
{ 13389, "Unknown" },
|
|
{ 13390, "Unknown" },
|
|
{ 13391, "Unknown" },
|
|
{ 13392, "Unknown" },
|
|
{ 13393, "Unknown" },
|
|
{ 13394, "Unknown" },
|
|
{ 13395, "Unknown" },
|
|
{ 13396, "Unknown" },
|
|
{ 13397, "Unknown" },
|
|
{ 13398, "Unknown" },
|
|
{ 13399, "Unknown" },
|
|
{ 13400, "AddComplexInstrument" },
|
|
{ 13401, "Unknown" },
|
|
{ 13402, "Unknown" },
|
|
{ 13403, "Unknown" },
|
|
{ 13404, "Unknown" },
|
|
{ 13405, "Unknown" },
|
|
{ 13406, "Unknown" },
|
|
{ 13407, "Unknown" },
|
|
{ 13408, "Unknown" },
|
|
{ 13409, "Unknown" },
|
|
{ 13410, "Unknown" },
|
|
{ 13411, "Unknown" },
|
|
{ 13412, "Unknown" },
|
|
{ 13413, "Unknown" },
|
|
{ 13414, "Unknown" },
|
|
{ 13415, "Unknown" },
|
|
{ 13416, "Unknown" },
|
|
{ 13417, "Unknown" },
|
|
{ 13418, "Unknown" },
|
|
{ 13419, "Unknown" },
|
|
{ 13420, "Unknown" },
|
|
{ 13421, "Unknown" },
|
|
{ 13422, "Unknown" },
|
|
{ 13423, "Unknown" },
|
|
{ 13424, "Unknown" },
|
|
{ 13425, "Unknown" },
|
|
{ 13426, "Unknown" },
|
|
{ 13427, "Unknown" },
|
|
{ 13428, "Unknown" },
|
|
{ 13429, "Unknown" },
|
|
{ 13430, "Unknown" },
|
|
{ 13431, "Unknown" },
|
|
{ 13432, "Unknown" },
|
|
{ 13433, "Unknown" },
|
|
{ 13434, "Unknown" },
|
|
{ 13435, "Unknown" },
|
|
{ 13436, "Unknown" },
|
|
{ 13437, "Unknown" },
|
|
{ 13438, "Unknown" },
|
|
{ 13439, "Unknown" },
|
|
{ 13440, "Unknown" },
|
|
{ 13441, "Unknown" },
|
|
{ 13442, "Unknown" },
|
|
{ 13443, "Unknown" },
|
|
{ 13444, "Unknown" },
|
|
{ 13445, "Unknown" },
|
|
{ 13446, "Unknown" },
|
|
{ 13447, "Unknown" },
|
|
{ 13448, "Unknown" },
|
|
{ 13449, "Unknown" },
|
|
{ 13450, "Unknown" },
|
|
{ 13451, "Unknown" },
|
|
{ 13452, "Unknown" },
|
|
{ 13453, "Unknown" },
|
|
{ 13454, "Unknown" },
|
|
{ 13455, "Unknown" },
|
|
{ 13456, "Unknown" },
|
|
{ 13457, "Unknown" },
|
|
{ 13458, "Unknown" },
|
|
{ 13459, "Unknown" },
|
|
{ 13460, "Unknown" },
|
|
{ 13461, "Unknown" },
|
|
{ 13462, "Unknown" },
|
|
{ 13463, "Unknown" },
|
|
{ 13464, "Unknown" },
|
|
{ 13465, "Unknown" },
|
|
{ 13466, "Unknown" },
|
|
{ 13467, "Unknown" },
|
|
{ 13468, "Unknown" },
|
|
{ 13469, "Unknown" },
|
|
{ 13470, "Unknown" },
|
|
{ 13471, "Unknown" },
|
|
{ 13472, "Unknown" },
|
|
{ 13473, "Unknown" },
|
|
{ 13474, "Unknown" },
|
|
{ 13475, "Unknown" },
|
|
{ 13476, "Unknown" },
|
|
{ 13477, "Unknown" },
|
|
{ 13478, "Unknown" },
|
|
{ 13479, "Unknown" },
|
|
{ 13480, "Unknown" },
|
|
{ 13481, "Unknown" },
|
|
{ 13482, "Unknown" },
|
|
{ 13483, "Unknown" },
|
|
{ 13484, "Unknown" },
|
|
{ 13485, "Unknown" },
|
|
{ 13486, "Unknown" },
|
|
{ 13487, "Unknown" },
|
|
{ 13488, "Unknown" },
|
|
{ 13489, "Unknown" },
|
|
{ 13490, "Unknown" },
|
|
{ 13491, "Unknown" },
|
|
{ 13492, "Unknown" },
|
|
{ 13493, "Unknown" },
|
|
{ 13494, "Unknown" },
|
|
{ 13495, "Unknown" },
|
|
{ 13496, "Unknown" },
|
|
{ 13497, "Unknown" },
|
|
{ 13498, "Unknown" },
|
|
{ 13499, "Unknown" },
|
|
{ 13500, "AuctionBBO" },
|
|
{ 13501, "AuctionClearingPrice" },
|
|
{ 13502, "CrossRequest" },
|
|
{ 13503, "QuoteRequest" },
|
|
{ 13504, "TopOfBook" },
|
|
{ 13505, "Unknown" },
|
|
{ 13506, "Unknown" },
|
|
{ 13507, "Unknown" },
|
|
{ 13508, "Unknown" },
|
|
{ 13509, "Unknown" },
|
|
{ 13510, "Unknown" },
|
|
{ 13511, "Unknown" },
|
|
{ 13512, "Unknown" },
|
|
{ 13513, "Unknown" },
|
|
{ 13514, "Unknown" },
|
|
{ 13515, "Unknown" },
|
|
{ 13516, "Unknown" },
|
|
{ 13517, "Unknown" },
|
|
{ 13518, "Unknown" },
|
|
{ 13519, "Unknown" },
|
|
{ 13520, "Unknown" },
|
|
{ 13521, "Unknown" },
|
|
{ 13522, "Unknown" },
|
|
{ 13523, "Unknown" },
|
|
{ 13524, "Unknown" },
|
|
{ 13525, "Unknown" },
|
|
{ 13526, "Unknown" },
|
|
{ 13527, "Unknown" },
|
|
{ 13528, "Unknown" },
|
|
{ 13529, "Unknown" },
|
|
{ 13530, "Unknown" },
|
|
{ 13531, "Unknown" },
|
|
{ 13532, "Unknown" },
|
|
{ 13533, "Unknown" },
|
|
{ 13534, "Unknown" },
|
|
{ 13535, "Unknown" },
|
|
{ 13536, "Unknown" },
|
|
{ 13537, "Unknown" },
|
|
{ 13538, "Unknown" },
|
|
{ 13539, "Unknown" },
|
|
{ 13540, "Unknown" },
|
|
{ 13541, "Unknown" },
|
|
{ 13542, "Unknown" },
|
|
{ 13543, "Unknown" },
|
|
{ 13544, "Unknown" },
|
|
{ 13545, "Unknown" },
|
|
{ 13546, "Unknown" },
|
|
{ 13547, "Unknown" },
|
|
{ 13548, "Unknown" },
|
|
{ 13549, "Unknown" },
|
|
{ 13550, "Unknown" },
|
|
{ 13551, "Unknown" },
|
|
{ 13552, "Unknown" },
|
|
{ 13553, "Unknown" },
|
|
{ 13554, "Unknown" },
|
|
{ 13555, "Unknown" },
|
|
{ 13556, "Unknown" },
|
|
{ 13557, "Unknown" },
|
|
{ 13558, "Unknown" },
|
|
{ 13559, "Unknown" },
|
|
{ 13560, "Unknown" },
|
|
{ 13561, "Unknown" },
|
|
{ 13562, "Unknown" },
|
|
{ 13563, "Unknown" },
|
|
{ 13564, "Unknown" },
|
|
{ 13565, "Unknown" },
|
|
{ 13566, "Unknown" },
|
|
{ 13567, "Unknown" },
|
|
{ 13568, "Unknown" },
|
|
{ 13569, "Unknown" },
|
|
{ 13570, "Unknown" },
|
|
{ 13571, "Unknown" },
|
|
{ 13572, "Unknown" },
|
|
{ 13573, "Unknown" },
|
|
{ 13574, "Unknown" },
|
|
{ 13575, "Unknown" },
|
|
{ 13576, "Unknown" },
|
|
{ 13577, "Unknown" },
|
|
{ 13578, "Unknown" },
|
|
{ 13579, "Unknown" },
|
|
{ 13580, "Unknown" },
|
|
{ 13581, "Unknown" },
|
|
{ 13582, "Unknown" },
|
|
{ 13583, "Unknown" },
|
|
{ 13584, "Unknown" },
|
|
{ 13585, "Unknown" },
|
|
{ 13586, "Unknown" },
|
|
{ 13587, "Unknown" },
|
|
{ 13588, "Unknown" },
|
|
{ 13589, "Unknown" },
|
|
{ 13590, "Unknown" },
|
|
{ 13591, "Unknown" },
|
|
{ 13592, "Unknown" },
|
|
{ 13593, "Unknown" },
|
|
{ 13594, "Unknown" },
|
|
{ 13595, "Unknown" },
|
|
{ 13596, "Unknown" },
|
|
{ 13597, "Unknown" },
|
|
{ 13598, "Unknown" },
|
|
{ 13599, "Unknown" },
|
|
{ 13600, "ProductSummary" },
|
|
{ 13601, "InstrumentSummary" },
|
|
{ 13602, "SnapshotOrder" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext template_id_vals_ext = VALUE_STRING_EXT_INIT(template_id_vals);
|
|
static const value_string aggressor_side_vals[] = { // AggressorSide
|
|
{ 1, "Buy" },
|
|
{ 2, "Sell" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string algorithmic_trade_indicator_vals[] = { // AlgorithmicTradeIndicator
|
|
{ 1, "AlgorithmicTrade" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string appl_seq_reset_indicator_vals[] = { // ApplSeqResetIndicator
|
|
{ 0, "NoReset" },
|
|
{ 1, "Reset" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string bid_ord_type_vals[] = { // BidOrdType
|
|
{ 1, "Market" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string completion_indicator_vals[] = { // CompletionIndicator
|
|
{ 0, "Incomplete" },
|
|
{ 1, "Complete" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string cross_request_type_vals[] = { // CrossRequestType
|
|
{ 1, "CrossAnnouncement" },
|
|
{ 2, "LiquidityImprovementCross" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string fast_market_indicator_vals[] = { // FastMarketIndicator
|
|
{ 0, "No" },
|
|
{ 1, "Yes" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string implied_market_indicator_vals[] = { // ImpliedMarketIndicator
|
|
{ 0, "NotImplied" },
|
|
{ 3, "ImpliedInOut" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string input_source_vals[] = { // InputSource
|
|
{ 1, "CLIPClientBroker" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string instrument_scope_product_complex_vals[] = { // InstrumentScopeProductComplex
|
|
{ 1, "SimpleInstrument" },
|
|
{ 2, "StandardOptionStrategy" },
|
|
{ 3, "NonStandardOptionStrategy" },
|
|
{ 4, "VolatilityStrategy" },
|
|
{ 5, "FuturesSpread" },
|
|
{ 6, "InterProductSpread" },
|
|
{ 7, "StandardFuturesStrategy" },
|
|
{ 8, "PackAndBundle" },
|
|
{ 9, "Strip" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext instrument_scope_product_complex_vals_ext = VALUE_STRING_EXT_INIT(instrument_scope_product_complex_vals);
|
|
static const value_string last_fragment_vals[] = { // LastFragment
|
|
{ 0, "N" },
|
|
{ 1, "Y" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string leg_security_type_vals[] = { // LegSecurityType
|
|
{ 1, "LegSecurityMultiLeg" },
|
|
{ 2, "LegSecurityUnderlyingLeg" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
// LegSide aliased by AggressorSide
|
|
static const value_string mdentry_type_vals[] = { // MDEntryType
|
|
{ 2, "Trade" },
|
|
{ 4, "OpeningPrice" },
|
|
{ 5, "ClosingPrice" },
|
|
{ 7, "HighPrice" },
|
|
{ 8, "LowPrice" },
|
|
{ 66, "TradeVolume" },
|
|
{ 101, "PreviousClosingPrice" },
|
|
{ 200, "OpeningAuction" },
|
|
{ 201, "IntradayAuction" },
|
|
{ 202, "CircuitBreakerAuction" },
|
|
{ 203, "ClosingAuction" },
|
|
{ 204, "IPOAuction" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext mdentry_type_vals_ext = VALUE_STRING_EXT_INIT(mdentry_type_vals);
|
|
static const value_string market_condition_vals[] = { // MarketCondition
|
|
{ 0, "Normal" },
|
|
{ 1, "Stressed" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
// MassMarketCondition aliased by MarketCondition
|
|
static const value_string mass_sold_out_indicator_vals[] = { // MassSoldOutIndicator
|
|
{ 1, "SoldOut" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string match_sub_type_vals[] = { // MatchSubType
|
|
{ 1, "OpeningAuction" },
|
|
{ 2, "ClosingAuction" },
|
|
{ 3, "IntradayAuction" },
|
|
{ 4, "CircuitBreakerAuction" },
|
|
{ 5, "IPOAuction" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string match_type_vals[] = { // MatchType
|
|
{ 3, "ConfirmedTradeReport" },
|
|
{ 5, "CrossAuction" },
|
|
{ 7, "CallAuction" },
|
|
{ 13, "LiquidityImprovementCross" },
|
|
{ 14, "ContinuousAuction" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
// OfferOrdType aliased by BidOrdType
|
|
// OrdType aliased by BidOrdType
|
|
static const value_string potential_security_trading_event_vals[] = { // PotentialSecurityTradingEvent
|
|
{ 0, "None" },
|
|
{ 10, "PriceVolatilityAuctionIsExtended" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
// ProductComplex aliased by InstrumentScopeProductComplex
|
|
static const value_string security_mass_status_vals[] = { // SecurityMassStatus
|
|
{ 1, "Active" },
|
|
{ 2, "Inactive" },
|
|
{ 4, "Expired" },
|
|
{ 6, "KnockedOut" },
|
|
{ 7, "KnockOutRevoked" },
|
|
{ 9, "Suspended" },
|
|
{ 11, "PendingDeletion" },
|
|
{ 12, "KnockedOutAndSuspended" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext security_mass_status_vals_ext = VALUE_STRING_EXT_INIT(security_mass_status_vals);
|
|
static const value_string security_mass_trading_event_vals[] = { // SecurityMassTradingEvent
|
|
{ 10, "PriceVolatilityAuctionIsExtended" },
|
|
{ 11, "PriceVolatilityAuctionIsExtendedAgain" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string security_mass_trading_status_vals[] = { // SecurityMassTradingStatus
|
|
{ 2, "TradingHalt" },
|
|
{ 7, "MarketImbalanceBuy" },
|
|
{ 8, "MarketImbalanceSell" },
|
|
{ 200, "Closed" },
|
|
{ 201, "Restricted" },
|
|
{ 202, "Book" },
|
|
{ 203, "Continuous" },
|
|
{ 204, "OpeningAuction" },
|
|
{ 205, "OpeningAuctionFreeze" },
|
|
{ 206, "IntradayAuction" },
|
|
{ 207, "IntradayAuctionFreeze" },
|
|
{ 208, "CircuitBreakerAuction" },
|
|
{ 209, "CircuitBreakerAuctionFreeze" },
|
|
{ 210, "ClosingAuction" },
|
|
{ 211, "ClosingAuctionFreeze" },
|
|
{ 212, "IPOAuction" },
|
|
{ 213, "IPOAuctionFreeze" },
|
|
{ 214, "PreCall" },
|
|
{ 215, "Call" },
|
|
{ 216, "Freeze" },
|
|
{ 217, "TradeAtClose" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static value_string_ext security_mass_trading_status_vals_ext = VALUE_STRING_EXT_INIT(security_mass_trading_status_vals);
|
|
// SecurityStatus aliased by SecurityMassStatus
|
|
// SecurityTradingEvent aliased by SecurityMassTradingEvent
|
|
// SecurityTradingStatus aliased by SecurityMassTradingStatus
|
|
// Side aliased by AggressorSide
|
|
// SoldOutIndicator aliased by MassSoldOutIndicator
|
|
static const value_string trad_ses_status_vals[] = { // TradSesStatus
|
|
{ 1, "Halted" },
|
|
{ 2, "Open" },
|
|
{ 3, "Closed" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string trade_condition_vals[] = { // TradeCondition
|
|
{ 1, "ImpliedTrade" },
|
|
{ 107, "OutOfSequence" },
|
|
{ 155, "MidpointPrice" },
|
|
{ 156, "TradingOnTermsOfIssue" },
|
|
{ 596, "SpecialAuction" },
|
|
{ 624, "TradeAtClose" },
|
|
{ 0xFFFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string trading_session_id_vals[] = { // TradingSessionID
|
|
{ 1, "Day" },
|
|
{ 3, "Morning" },
|
|
{ 5, "Evening" },
|
|
{ 6, "AfterHours" },
|
|
{ 7, "Holiday" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
static const value_string trading_session_sub_id_vals[] = { // TradingSessionSubID
|
|
{ 1, "PreTrading" },
|
|
{ 3, "Continuous" },
|
|
{ 4, "Closing" },
|
|
{ 5, "PostTrading" },
|
|
{ 7, "Quiescent" },
|
|
{ 0xFF, "NO_VALUE" },
|
|
{ 0, NULL }
|
|
};
|
|
|
|
enum ETI_Type {
|
|
ETI_EOF,
|
|
ETI_PADDING,
|
|
ETI_UINT,
|
|
ETI_INT,
|
|
ETI_UINT_ENUM,
|
|
ETI_INT_ENUM,
|
|
ETI_COUNTER,
|
|
ETI_FIXED_POINT,
|
|
ETI_TIMESTAMP_NS,
|
|
ETI_CHAR,
|
|
ETI_STRING,
|
|
ETI_VAR_STRING,
|
|
ETI_STRUCT,
|
|
ETI_VAR_STRUCT,
|
|
ETI_DSCP
|
|
};
|
|
|
|
struct ETI_Field {
|
|
uint8_t type;
|
|
uint8_t counter_off; // offset into counter array
|
|
// if ETI_COUNTER => storage
|
|
// if ETI_VAR_STRING or ETI_VAR_STRUCT => load
|
|
// to get length or repeat count
|
|
// if ETI_FIXED_POINT: #fractional digits
|
|
uint16_t size; // or offset into struct_names if ETI_STRUCT/ETI_VAR_STRUCT
|
|
uint16_t field_handle_idx; // or index into fields array if ETI_STRUCT/ETI_VAR_STRUT
|
|
uint16_t ett_idx; // index into ett array if ETI_STRUCT/ETI_VAR_STRUCT
|
|
// or max value if ETI_COUNTER
|
|
};
|
|
|
|
static gint ett_eobi[] = { -1, -1, -1, -1, -1, -1, -1 };
|
|
static gint ett_eobi_dscp = -1;
|
|
/* This method dissects fully reassembled messages */
|
|
static int
|
|
dissect_eobi_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
|
|
{
|
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "EOBI");
|
|
col_clear(pinfo->cinfo, COL_INFO);
|
|
guint16 templateid = tvb_get_letohs(tvb, 2);
|
|
const char *template_str = val_to_str_ext(templateid, &template_id_vals_ext, "Unknown EOBI template: 0x%04x");
|
|
col_add_fstr(pinfo->cinfo, COL_INFO, "%s", template_str);
|
|
|
|
/* create display subtree for the protocol */
|
|
proto_item *ti = proto_tree_add_item(tree, proto_eobi, tvb, 0, -1, ENC_NA);
|
|
guint32 bodylen= tvb_get_letohs(tvb, 0);
|
|
proto_item_append_text(ti, ", %s (%" PRIu16 "), BodyLen: %u", template_str, templateid, bodylen);
|
|
proto_tree *root = proto_item_add_subtree(ti, ett_eobi[0]);
|
|
|
|
static const char struct_names[] = "InstrmtLegGrp\0MDInstrumentEntryGrp\0MDTradeEntryGrp\0MessageHeader\0OrderDetails\0SecMassStatGrp";
|
|
static const struct ETI_Field fields[] = {
|
|
// InstrmtLegGrpComp@0
|
|
{ ETI_INT, 0, 4, LEGSYMBOL_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_INT, 0, 8, LEGSECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LEGPRICE_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 4, LEGRATIOQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, LEGSECURITYTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, LEGSIDE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 2, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// MDInstrumentEntryGrpComp@9
|
|
, { ETI_FIXED_POINT, 8, 8, MDENTRYPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, MDENTRYSIZE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MDENTRYTYPE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// MDTradeEntryGrpComp@16
|
|
, { ETI_FIXED_POINT, 8, 8, MDENTRYPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, MDENTRYSIZE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MDENTRYTYPE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 7, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// MessageHeaderComp@21
|
|
, { ETI_UINT, 0, 2, BODYLEN_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 2, TEMPLATEID_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 4, MSGSEQNUM_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderDetailsComp@25
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, DISPLAYQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 6, 0, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// SecMassStatGrpComp@32
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 3, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// AddComplexInstrument@42
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 4, SECURITYSUBTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, PRODUCTCOMPLEX_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, IMPLIEDMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 2, 0, 0 }
|
|
, { ETI_UINT, 0, 4, LEGRATIOMULTIPLIER_FH_IDX, 0 }
|
|
, { ETI_COUNTER, 0, 1, NOLEGS_FH_IDX, 20 } // <- counter@0
|
|
, { ETI_PADDING, 0, 3, 0, 0 }
|
|
, { ETI_VAR_STRUCT, 0, 0, 0, 1 } // InstrmtLegGrp
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// AuctionBBO@54
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, BIDPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, OFFERPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, BIDSIZE_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, OFFERSIZE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, POTENTIALSECURITYTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, BIDORDTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, OFFERORDTYPE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 5, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// AuctionClearingPrice@66
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, IMBALANCEQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, POTENTIALSECURITYTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 6, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// CrossRequest@76
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, CROSSREQUESTTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, INPUTSOURCE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 5, 0, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// ExecutionSummary@86
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, AGGRESSORTIME_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, REQUESTTIME_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, EXECID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, AGGRESSORSIDE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, RESTINGHIDDENQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, RESTINGCXLQTY_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// FullOrderExecution@100
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// Heartbeat@112
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT, 0, 4, LASTMSGSEQNUMPROCESSED_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// InstrumentStateChange@116
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 2, 0, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// InstrumentSummary@129
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, LASTUPDATETIME_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSEXECUTIONTIME_FH_IDX, 0 }
|
|
, { ETI_COUNTER, 0, 2, TOTNOORDERS_FH_IDX, 65534 } // <- counter@0
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, PRODUCTCOMPLEX_FH_IDX, 0 }
|
|
, { ETI_COUNTER, 1, 1, NOMDENTRIES_FH_IDX, 15 } // <- counter@1
|
|
, { ETI_PADDING, 0, 6, 0, 0 }
|
|
, { ETI_VAR_STRUCT, 1, 14, 9, 2 } // MDInstrumentEntryGrp
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// MassInstrumentStateChange@147
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT_ENUM, 0, 1, INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYMASSSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYMASSTRADINGSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MASSMARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SECURITYMASSTRADINGEVENT_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MASSSOLDOUTINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, LASTFRAGMENT_FH_IDX, 0 }
|
|
, { ETI_COUNTER, 0, 1, NORELATEDSYM_FH_IDX, 24 } // <- counter@0
|
|
, { ETI_PADDING, 0, 6, 0, 0 }
|
|
, { ETI_VAR_STRUCT, 0, 78, 32, 6 } // SecMassStatGrp
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderAdd@162
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderDelete@167
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderMassDelete@173
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderModify@177
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSPREVTIMEPRIORITY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, PREVPRICE_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, PREVDISPLAYQTY_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// OrderModifySamePrio@185
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, PREVDISPLAYQTY_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// PacketHeader@192
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT, 0, 4, APPLSEQNUM_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 4, MARKETSEGMENTID_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 1, PARTITIONID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, COMPLETIONINDICATOR_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, APPLSEQRESETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_DSCP, 0, 1, DSCP_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// PartialOrderExecution@202
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// ProductStateChange@214
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONSUBID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, TRADSESSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 3, 0, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// ProductSummary@223
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_UINT, 0, 4, LASTMSGSEQNUMPROCESSED_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONSUBID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, TRADSESSTATUS_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 7, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// QuoteRequest@232
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 7, 0, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// SnapshotOrder@239
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// TopOfBook@242
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, BIDPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, OFFERPX_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, BIDSIZE_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, OFFERSIZE_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 2, NUMBEROFBUYORDERS_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 2, NUMBEROFSELLORDERS_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 4, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// TradeReport@253
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MATCHTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, MATCHSUBTYPE_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 1, 0, 0 }
|
|
, { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 6, 0, 0 }
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
// TradeReversal@266
|
|
, { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
|
|
, { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
|
|
, { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
|
|
, { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSEXECUTIONTIME_FH_IDX, 0 }
|
|
, { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
|
|
, { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
|
|
, { ETI_PADDING, 0, 2, 0, 0 }
|
|
, { ETI_COUNTER, 0, 1, NOMDENTRIES_FH_IDX, 15 } // <- counter@0
|
|
, { ETI_PADDING, 0, 7, 0, 0 }
|
|
, { ETI_VAR_STRUCT, 0, 35, 16, 3 } // MDTradeEntryGrp
|
|
, { ETI_EOF, 0, 0, 0, 0 }
|
|
};
|
|
static const int16_t tid2fidx[] = {
|
|
112 /* Heartbeat */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 192 /* PacketHeader */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 162 /* OrderAdd */
|
|
, 177 /* OrderModify */
|
|
, 167 /* OrderDelete */
|
|
, 173 /* OrderMassDelete */
|
|
, 100 /* FullOrderExecution */
|
|
, 202 /* PartialOrderExecution */
|
|
, 185 /* OrderModifySamePrio */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 266 /* TradeReversal */
|
|
, 253 /* TradeReport */
|
|
, 86 /* ExecutionSummary */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 214 /* ProductStateChange */
|
|
, 116 /* InstrumentStateChange */
|
|
, 147 /* MassInstrumentStateChange */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 42 /* AddComplexInstrument */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 54 /* AuctionBBO */
|
|
, 66 /* AuctionClearingPrice */
|
|
, 76 /* CrossRequest */
|
|
, 232 /* QuoteRequest */
|
|
, 242 /* TopOfBook */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 223 /* ProductSummary */
|
|
, 129 /* InstrumentSummary */
|
|
, 239 /* SnapshotOrder */
|
|
};
|
|
static const uint32_t tid2size[] = {
|
|
16 /* Heartbeat */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 32 /* PacketHeader */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 56 /* OrderAdd */
|
|
, 80 /* OrderModify */
|
|
, 64 /* OrderDelete */
|
|
, 24 /* OrderMassDelete */
|
|
, 56 /* FullOrderExecution */
|
|
, 56 /* PartialOrderExecution */
|
|
, 72 /* OrderModifySamePrio */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 424 /* TradeReversal */
|
|
, 56 /* TradeReport */
|
|
, 80 /* ExecutionSummary */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 24 /* ProductStateChange */
|
|
, 48 /* InstrumentStateChange */
|
|
, 800 /* MassInstrumentStateChange */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 680 /* AddComplexInstrument */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 64 /* AuctionBBO */
|
|
, 56 /* AuctionClearingPrice */
|
|
, 48 /* CrossRequest */
|
|
, 40 /* QuoteRequest */
|
|
, 64 /* TopOfBook */
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 0
|
|
, 24 /* ProductSummary */
|
|
, 424 /* InstrumentSummary */
|
|
, 40 /* SnapshotOrder */
|
|
};
|
|
static const unsigned char usages[] = {
|
|
// AddComplexInstrument
|
|
//// MessageHeaderComp
|
|
0 // BodyLen#0
|
|
, 0 // TemplateID#1
|
|
, 0 // MsgSeqNum#2
|
|
///
|
|
, 0 // SecurityID#3
|
|
, 0 // TransactTime#4
|
|
, 1 // SecuritySubType#5
|
|
, 0 // ProductComplex#6
|
|
, 0 // ImpliedMarketIndicator#7
|
|
, 1 // LegRatioMultiplier#8
|
|
, 0 // NoLegs#9
|
|
//// InstrmtLegGrpComp
|
|
, 0 // LegSymbol#10
|
|
, 0 // LegSecurityID#11
|
|
, 1 // LegPrice#12
|
|
, 0 // LegRatioQty#13
|
|
, 0 // LegSecurityType#14
|
|
, 0 // LegSide#15
|
|
///
|
|
// AuctionBBO
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#16
|
|
, 0 // TemplateID#17
|
|
, 0 // MsgSeqNum#18
|
|
///
|
|
, 0 // TransactTime#19
|
|
, 0 // SecurityID#20
|
|
, 1 // BidPx#21
|
|
, 1 // OfferPx#22
|
|
, 1 // BidSize#23
|
|
, 1 // OfferSize#24
|
|
, 1 // PotentialSecurityTradingEvent#25
|
|
, 1 // BidOrdType#26
|
|
, 1 // OfferOrdType#27
|
|
// AuctionClearingPrice
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#28
|
|
, 0 // TemplateID#29
|
|
, 0 // MsgSeqNum#30
|
|
///
|
|
, 0 // TransactTime#31
|
|
, 0 // SecurityID#32
|
|
, 0 // LastPx#33
|
|
, 1 // LastQty#34
|
|
, 1 // ImbalanceQty#35
|
|
, 1 // SecurityTradingStatus#36
|
|
, 1 // PotentialSecurityTradingEvent#37
|
|
// CrossRequest
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#38
|
|
, 0 // TemplateID#39
|
|
, 0 // MsgSeqNum#40
|
|
///
|
|
, 0 // SecurityID#41
|
|
, 1 // LastPx#42
|
|
, 1 // LastQty#43
|
|
, 1 // Side#44
|
|
, 0 // CrossRequestType#45
|
|
, 1 // InputSource#46
|
|
, 0 // TransactTime#47
|
|
// ExecutionSummary
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#48
|
|
, 0 // TemplateID#49
|
|
, 0 // MsgSeqNum#50
|
|
///
|
|
, 0 // SecurityID#51
|
|
, 1 // AggressorTime#52
|
|
, 1 // RequestTime#53
|
|
, 0 // ExecID#54
|
|
, 0 // LastQty#55
|
|
, 0 // AggressorSide#56
|
|
, 1 // TradeCondition#57
|
|
, 0 // LastPx#58
|
|
, 1 // RestingHiddenQty#59
|
|
, 0 // RestingCxlQty#60
|
|
// FullOrderExecution
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#61
|
|
, 0 // TemplateID#62
|
|
, 0 // MsgSeqNum#63
|
|
///
|
|
, 0 // Side#64
|
|
, 1 // OrdType#65
|
|
, 1 // AlgorithmicTradeIndicator#66
|
|
, 0 // TrdMatchID#67
|
|
, 1 // Price#68
|
|
, 0 // TrdRegTSTimePriority#69
|
|
, 0 // SecurityID#70
|
|
, 0 // LastQty#71
|
|
, 0 // LastPx#72
|
|
// Heartbeat
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#73
|
|
, 0 // TemplateID#74
|
|
, 2 // MsgSeqNum#75
|
|
///
|
|
, 0 // LastMsgSeqNumProcessed#76
|
|
// InstrumentStateChange
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#77
|
|
, 0 // TemplateID#78
|
|
, 0 // MsgSeqNum#79
|
|
///
|
|
, 0 // SecurityID#80
|
|
, 0 // SecurityStatus#81
|
|
, 0 // SecurityTradingStatus#82
|
|
, 0 // MarketCondition#83
|
|
, 0 // FastMarketIndicator#84
|
|
, 1 // SecurityTradingEvent#85
|
|
, 1 // SoldOutIndicator#86
|
|
, 1 // HighPx#87
|
|
, 1 // LowPx#88
|
|
, 0 // TransactTime#89
|
|
// InstrumentSummary
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#90
|
|
, 0 // TemplateID#91
|
|
, 0 // MsgSeqNum#92
|
|
///
|
|
, 0 // SecurityID#93
|
|
, 0 // LastUpdateTime#94
|
|
, 1 // TrdRegTSExecutionTime#95
|
|
, 0 // TotNoOrders#96
|
|
, 0 // SecurityStatus#97
|
|
, 0 // SecurityTradingStatus#98
|
|
, 0 // MarketCondition#99
|
|
, 0 // FastMarketIndicator#100
|
|
, 1 // SecurityTradingEvent#101
|
|
, 1 // SoldOutIndicator#102
|
|
, 1 // HighPx#103
|
|
, 1 // LowPx#104
|
|
, 0 // ProductComplex#105
|
|
, 0 // NoMDEntries#106
|
|
//// MDInstrumentEntryGrpComp
|
|
, 1 // MDEntryPx#107
|
|
, 1 // MDEntrySize#108
|
|
, 0 // MDEntryType#109
|
|
, 1 // TradeCondition#110
|
|
///
|
|
// MassInstrumentStateChange
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#111
|
|
, 0 // TemplateID#112
|
|
, 0 // MsgSeqNum#113
|
|
///
|
|
, 0 // InstrumentScopeProductComplex#114
|
|
, 0 // SecurityMassStatus#115
|
|
, 0 // SecurityMassTradingStatus#116
|
|
, 0 // MassMarketCondition#117
|
|
, 0 // FastMarketIndicator#118
|
|
, 1 // SecurityMassTradingEvent#119
|
|
, 1 // MassSoldOutIndicator#120
|
|
, 0 // TransactTime#121
|
|
, 0 // LastFragment#122
|
|
, 0 // NoRelatedSym#123
|
|
//// SecMassStatGrpComp
|
|
, 0 // SecurityID#124
|
|
, 1 // HighPx#125
|
|
, 1 // LowPx#126
|
|
, 0 // SecurityStatus#127
|
|
, 0 // SecurityTradingStatus#128
|
|
, 0 // MarketCondition#129
|
|
, 1 // SecurityTradingEvent#130
|
|
, 1 // SoldOutIndicator#131
|
|
///
|
|
// OrderAdd
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#132
|
|
, 0 // TemplateID#133
|
|
, 0 // MsgSeqNum#134
|
|
///
|
|
, 1 // TrdRegTSTimeIn#135
|
|
, 0 // SecurityID#136
|
|
//// OrderDetailsComp
|
|
, 0 // TrdRegTSTimePriority#137
|
|
, 0 // DisplayQty#138
|
|
, 0 // Side#139
|
|
, 1 // OrdType#140
|
|
, 1 // Price#141
|
|
///
|
|
// OrderDelete
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#142
|
|
, 0 // TemplateID#143
|
|
, 0 // MsgSeqNum#144
|
|
///
|
|
, 1 // TrdRegTSTimeIn#145
|
|
, 0 // TransactTime#146
|
|
, 0 // SecurityID#147
|
|
//// OrderDetailsComp
|
|
, 0 // TrdRegTSTimePriority#148
|
|
, 0 // DisplayQty#149
|
|
, 0 // Side#150
|
|
, 1 // OrdType#151
|
|
, 1 // Price#152
|
|
///
|
|
// OrderMassDelete
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#153
|
|
, 0 // TemplateID#154
|
|
, 0 // MsgSeqNum#155
|
|
///
|
|
, 0 // SecurityID#156
|
|
, 0 // TransactTime#157
|
|
// OrderModify
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#158
|
|
, 0 // TemplateID#159
|
|
, 0 // MsgSeqNum#160
|
|
///
|
|
, 0 // TrdRegTSTimeIn#161
|
|
, 0 // TrdRegTSPrevTimePriority#162
|
|
, 1 // PrevPrice#163
|
|
, 0 // PrevDisplayQty#164
|
|
, 0 // SecurityID#165
|
|
//// OrderDetailsComp
|
|
, 0 // TrdRegTSTimePriority#166
|
|
, 0 // DisplayQty#167
|
|
, 0 // Side#168
|
|
, 1 // OrdType#169
|
|
, 1 // Price#170
|
|
///
|
|
// OrderModifySamePrio
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#171
|
|
, 0 // TemplateID#172
|
|
, 0 // MsgSeqNum#173
|
|
///
|
|
, 0 // TrdRegTSTimeIn#174
|
|
, 0 // TransactTime#175
|
|
, 0 // PrevDisplayQty#176
|
|
, 0 // SecurityID#177
|
|
//// OrderDetailsComp
|
|
, 0 // TrdRegTSTimePriority#178
|
|
, 0 // DisplayQty#179
|
|
, 0 // Side#180
|
|
, 1 // OrdType#181
|
|
, 1 // Price#182
|
|
///
|
|
// PacketHeader
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#183
|
|
, 0 // TemplateID#184
|
|
, 2 // MsgSeqNum#185
|
|
///
|
|
, 0 // ApplSeqNum#186
|
|
, 0 // MarketSegmentID#187
|
|
, 0 // PartitionID#188
|
|
, 0 // CompletionIndicator#189
|
|
, 0 // ApplSeqResetIndicator#190
|
|
, 1 // DSCP#191
|
|
, 0 // TransactTime#192
|
|
// PartialOrderExecution
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#193
|
|
, 0 // TemplateID#194
|
|
, 0 // MsgSeqNum#195
|
|
///
|
|
, 0 // Side#196
|
|
, 1 // OrdType#197
|
|
, 1 // AlgorithmicTradeIndicator#198
|
|
, 0 // TrdMatchID#199
|
|
, 1 // Price#200
|
|
, 0 // TrdRegTSTimePriority#201
|
|
, 0 // SecurityID#202
|
|
, 0 // LastQty#203
|
|
, 0 // LastPx#204
|
|
// ProductStateChange
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#205
|
|
, 0 // TemplateID#206
|
|
, 0 // MsgSeqNum#207
|
|
///
|
|
, 0 // TradingSessionID#208
|
|
, 0 // TradingSessionSubID#209
|
|
, 0 // TradSesStatus#210
|
|
, 1 // MarketCondition#211
|
|
, 0 // FastMarketIndicator#212
|
|
, 0 // TransactTime#213
|
|
// ProductSummary
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#214
|
|
, 0 // TemplateID#215
|
|
, 0 // MsgSeqNum#216
|
|
///
|
|
, 0 // LastMsgSeqNumProcessed#217
|
|
, 1 // TradingSessionID#218
|
|
, 1 // TradingSessionSubID#219
|
|
, 1 // TradSesStatus#220
|
|
, 1 // MarketCondition#221
|
|
, 0 // FastMarketIndicator#222
|
|
// QuoteRequest
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#223
|
|
, 0 // TemplateID#224
|
|
, 0 // MsgSeqNum#225
|
|
///
|
|
, 0 // SecurityID#226
|
|
, 1 // LastQty#227
|
|
, 1 // Side#228
|
|
, 0 // TransactTime#229
|
|
// SnapshotOrder
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#230
|
|
, 0 // TemplateID#231
|
|
, 0 // MsgSeqNum#232
|
|
///
|
|
//// OrderDetailsComp
|
|
, 0 // TrdRegTSTimePriority#233
|
|
, 0 // DisplayQty#234
|
|
, 0 // Side#235
|
|
, 1 // OrdType#236
|
|
, 1 // Price#237
|
|
///
|
|
// TopOfBook
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#238
|
|
, 0 // TemplateID#239
|
|
, 0 // MsgSeqNum#240
|
|
///
|
|
, 0 // TransactTime#241
|
|
, 0 // SecurityID#242
|
|
, 1 // BidPx#243
|
|
, 1 // OfferPx#244
|
|
, 1 // BidSize#245
|
|
, 1 // OfferSize#246
|
|
, 1 // NumberOfBuyOrders#247
|
|
, 1 // NumberOfSellOrders#248
|
|
// TradeReport
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#249
|
|
, 0 // TemplateID#250
|
|
, 0 // MsgSeqNum#251
|
|
///
|
|
, 0 // SecurityID#252
|
|
, 0 // TransactTime#253
|
|
, 0 // LastQty#254
|
|
, 0 // LastPx#255
|
|
, 1 // TrdMatchID#256
|
|
, 1 // MatchType#257
|
|
, 1 // MatchSubType#258
|
|
, 1 // AlgorithmicTradeIndicator#259
|
|
, 1 // TradeCondition#260
|
|
// TradeReversal
|
|
//// MessageHeaderComp
|
|
, 0 // BodyLen#261
|
|
, 0 // TemplateID#262
|
|
, 0 // MsgSeqNum#263
|
|
///
|
|
, 0 // SecurityID#264
|
|
, 0 // TransactTime#265
|
|
, 0 // LastQty#266
|
|
, 0 // LastPx#267
|
|
, 1 // TrdRegTSExecutionTime#268
|
|
, 0 // TrdMatchID#269
|
|
, 1 // TradeCondition#270
|
|
, 0 // NoMDEntries#271
|
|
//// MDTradeEntryGrpComp
|
|
, 1 // MDEntryPx#272
|
|
, 1 // MDEntrySize#273
|
|
, 0 // MDEntryType#274
|
|
///
|
|
, 0 // filler
|
|
};
|
|
static const int16_t tid2uidx[] = {
|
|
73 /* Heartbeat */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 183 /* PacketHeader */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 132 /* OrderAdd */
|
|
, 158 /* OrderModify */
|
|
, 142 /* OrderDelete */
|
|
, 153 /* OrderMassDelete */
|
|
, 61 /* FullOrderExecution */
|
|
, 193 /* PartialOrderExecution */
|
|
, 171 /* OrderModifySamePrio */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 261 /* TradeReversal */
|
|
, 249 /* TradeReport */
|
|
, 48 /* ExecutionSummary */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 205 /* ProductStateChange */
|
|
, 77 /* InstrumentStateChange */
|
|
, 111 /* MassInstrumentStateChange */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 0 /* AddComplexInstrument */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 16 /* AuctionBBO */
|
|
, 28 /* AuctionClearingPrice */
|
|
, 38 /* CrossRequest */
|
|
, 223 /* QuoteRequest */
|
|
, 238 /* TopOfBook */
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, -1
|
|
, 214 /* ProductSummary */
|
|
, 90 /* InstrumentSummary */
|
|
, 230 /* SnapshotOrder */
|
|
};
|
|
static int * const dscp_bits[] = {
|
|
&hf_eobi_dscp_exec_summary,
|
|
&hf_eobi_dscp_improved,
|
|
&hf_eobi_dscp_widened,
|
|
NULL
|
|
};
|
|
if (templateid < 13001 || templateid > 13602) {
|
|
proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_template, tvb, 2, 4,
|
|
"Template ID out of range: %" PRIu16, templateid);
|
|
return tvb_captured_length(tvb);
|
|
}
|
|
int fidx = tid2fidx[templateid - 13001];
|
|
if (fidx == -1) {
|
|
proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_template, tvb, 2, 4,
|
|
"Unallocated Template ID: %" PRIu16, templateid);
|
|
return tvb_captured_length(tvb);
|
|
}
|
|
if (bodylen != tid2size[templateid - 13001]) {
|
|
proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_length, tvb, 0, 2,
|
|
"Unexpected BodyLen value of %" PRIu32 ", expected: %" PRIu32, bodylen, tid2size[templateid - 13001]);
|
|
}
|
|
int uidx = tid2uidx[templateid - 13001];
|
|
DISSECTOR_ASSERT_CMPINT(uidx, >=, 0);
|
|
DISSECTOR_ASSERT_CMPUINT(((size_t)uidx), <, (sizeof usages / sizeof usages[0]));
|
|
|
|
int old_fidx = 0;
|
|
int old_uidx = 0;
|
|
unsigned top = 1;
|
|
unsigned counter[8] = {0};
|
|
unsigned off = 0;
|
|
unsigned struct_off = 0;
|
|
unsigned repeats = 0;
|
|
proto_tree *t = root;
|
|
while (top) {
|
|
DISSECTOR_ASSERT_CMPINT(fidx, >=, 0);
|
|
DISSECTOR_ASSERT_CMPUINT(((size_t)fidx), <, (sizeof fields / sizeof fields[0]));
|
|
DISSECTOR_ASSERT_CMPINT(uidx, >=, 0);
|
|
DISSECTOR_ASSERT_CMPUINT(((size_t)uidx), <, (sizeof usages / sizeof usages[0]));
|
|
|
|
switch (fields[fidx].type) {
|
|
case ETI_EOF:
|
|
DISSECTOR_ASSERT_CMPUINT(top, >=, 1);
|
|
DISSECTOR_ASSERT_CMPUINT(top, <=, 2);
|
|
if (t != root)
|
|
proto_item_set_len(t, off - struct_off);
|
|
if (repeats) {
|
|
--repeats;
|
|
fidx = fields[old_fidx].field_handle_idx;
|
|
uidx = old_uidx;
|
|
t = proto_tree_add_subtree(root, tvb, off, -1, ett_eobi[fields[old_fidx].ett_idx], NULL, &struct_names[fields[old_fidx].size]);
|
|
struct_off = off;
|
|
} else {
|
|
fidx = old_fidx + 1;
|
|
t = root;
|
|
--top;
|
|
}
|
|
break;
|
|
case ETI_VAR_STRUCT:
|
|
case ETI_STRUCT:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, sizeof counter / sizeof counter[0]);
|
|
repeats = fields[fidx].type == ETI_VAR_STRUCT ? counter[fields[fidx].counter_off] : 1;
|
|
if (repeats) {
|
|
--repeats;
|
|
t = proto_tree_add_subtree(root, tvb, off, -1, ett_eobi[fields[fidx].ett_idx], NULL, &struct_names[fields[fidx].size]);
|
|
struct_off = off;
|
|
old_fidx = fidx;
|
|
old_uidx = uidx;
|
|
fidx = fields[fidx].field_handle_idx;
|
|
DISSECTOR_ASSERT_CMPUINT(top, ==, 1);
|
|
++top;
|
|
} else {
|
|
++fidx;
|
|
}
|
|
break;
|
|
case ETI_PADDING:
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
break;
|
|
case ETI_CHAR:
|
|
proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_ASCII);
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_STRING:
|
|
{
|
|
guint8 c = tvb_get_guint8(tvb, off);
|
|
if (c)
|
|
proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_ASCII);
|
|
else {
|
|
proto_item *e = proto_tree_add_string(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, "NO_VALUE ('0x00...')");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
}
|
|
}
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_VAR_STRING:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, sizeof counter / sizeof counter[0]);
|
|
proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, counter[fields[fidx].counter_off], ENC_ASCII);
|
|
off += counter[fields[fidx].counter_off];
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_COUNTER:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, sizeof counter / sizeof counter[0]);
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, <=, 2);
|
|
{
|
|
switch (fields[fidx].size) {
|
|
case 1:
|
|
{
|
|
guint8 x = tvb_get_guint8(tvb, off);
|
|
if (x == UINT8_MAX) {
|
|
proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xff)");
|
|
counter[fields[fidx].counter_off] = 0;
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu8, x);
|
|
if (x > fields[fidx].ett_idx) {
|
|
counter[fields[fidx].counter_off] = fields[fidx].ett_idx;
|
|
expert_add_info_format(pinfo, e, &ei_eobi_counter_overflow, "Counter overflow: %" PRIu8 " > %" PRIu16, x, fields[fidx].ett_idx);
|
|
} else {
|
|
counter[fields[fidx].counter_off] = x;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
guint16 x = tvb_get_letohs(tvb, off);
|
|
if (x == UINT16_MAX) {
|
|
proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xffff)");
|
|
counter[fields[fidx].counter_off] = 0;
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu16, x);
|
|
if (x > fields[fidx].ett_idx) {
|
|
counter[fields[fidx].counter_off] = fields[fidx].ett_idx;
|
|
expert_add_info_format(pinfo, e, &ei_eobi_counter_overflow, "Counter overflow: %" PRIu16 " > %" PRIu16, x, fields[fidx].ett_idx);
|
|
} else {
|
|
counter[fields[fidx].counter_off] = x;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_UINT:
|
|
switch (fields[fidx].size) {
|
|
case 1:
|
|
{
|
|
guint8 x = tvb_get_guint8(tvb, off);
|
|
if (x == UINT8_MAX) {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xff)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu8, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
guint16 x = tvb_get_letohs(tvb, off);
|
|
if (x == UINT16_MAX) {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xffff)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu16, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
{
|
|
guint32 x = tvb_get_letohl(tvb, off);
|
|
if (x == UINT32_MAX) {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xffffffff)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu32, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 8:
|
|
{
|
|
guint64 x = tvb_get_letoh64(tvb, off);
|
|
if (x == UINT64_MAX) {
|
|
proto_item *e = proto_tree_add_uint64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xffffffffffffffff)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_uint64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIu64, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_INT:
|
|
switch (fields[fidx].size) {
|
|
case 1:
|
|
{
|
|
gint8 x = tvb_get_gint8(tvb, off);
|
|
if (x == INT8_MIN) {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0x80)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIi8, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 2:
|
|
{
|
|
gint16 x = tvb_get_letohis(tvb, off);
|
|
if (x == INT16_MIN) {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0x8000)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIi16, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 4:
|
|
{
|
|
gint32 x = tvb_get_letohil(tvb, off);
|
|
if (x == INT32_MIN) {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0x80000000)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_int_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIi32, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
case 8:
|
|
{
|
|
gint64 x = tvb_get_letohi64(tvb, off);
|
|
if (x == INT64_MIN) {
|
|
proto_item *e = proto_tree_add_int64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0x8000000000000000)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
proto_item *e = proto_tree_add_int64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%" PRIi64, x);
|
|
if (usages[uidx] == 2)
|
|
expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
|
|
}
|
|
}
|
|
break;
|
|
}
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_UINT_ENUM:
|
|
case ETI_INT_ENUM:
|
|
proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_LITTLE_ENDIAN);
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_FIXED_POINT:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 8);
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, >, 0);
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <=, 16);
|
|
{
|
|
gint64 x = tvb_get_letohi64(tvb, off);
|
|
if (x == INT64_MIN) {
|
|
proto_item *e = proto_tree_add_int64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0x8000000000000000)");
|
|
if (!usages[uidx])
|
|
expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
|
|
} else {
|
|
unsigned slack = fields[fidx].counter_off + 1;
|
|
if (x < 0)
|
|
slack += 1;
|
|
char s[21];
|
|
int n = snprintf(s, sizeof s, "%0*" PRIi64, slack, x);
|
|
DISSECTOR_ASSERT_CMPUINT(n, >, 0);
|
|
unsigned k = n - fields[fidx].counter_off;
|
|
proto_tree_add_int64_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "%.*s.%s", k, s, s + k);
|
|
}
|
|
}
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_TIMESTAMP_NS:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 8);
|
|
proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_LITTLE_ENDIAN | ENC_TIME_NSECS);
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
case ETI_DSCP:
|
|
DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 1);
|
|
proto_tree_add_bitmask(t, tvb, off, hf_eobi[fields[fidx].field_handle_idx], ett_eobi_dscp, dscp_bits, ENC_LITTLE_ENDIAN);
|
|
off += fields[fidx].size;
|
|
++fidx;
|
|
++uidx;
|
|
break;
|
|
}
|
|
}
|
|
|
|
return tvb_captured_length(tvb);
|
|
}
|
|
|
|
/* determine PDU length of protocol EOBI */
|
|
static guint
|
|
get_eobi_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
|
|
{
|
|
return (guint)tvb_get_letohs(tvb, offset);
|
|
}
|
|
|
|
static int
|
|
dissect_eobi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
|
|
void *data)
|
|
{
|
|
return udp_dissect_pdus(tvb, pinfo, tree, 4, NULL,
|
|
get_eobi_message_len, dissect_eobi_message, data);
|
|
}
|
|
|
|
void
|
|
proto_register_eobi(void)
|
|
{
|
|
static hf_register_info hf[] ={
|
|
{ &hf_eobi[AGGRESSORSIDE_FH_IDX],
|
|
{ "AggressorSide", "eobi.aggressorside",
|
|
FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[AGGRESSORTIME_FH_IDX],
|
|
{ "AggressorTime", "eobi.aggressortime",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[ALGORITHMICTRADEINDICATOR_FH_IDX],
|
|
{ "AlgorithmicTradeIndicator", "eobi.algorithmictradeindicator",
|
|
FT_UINT8, BASE_DEC, VALS(algorithmic_trade_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[APPLSEQNUM_FH_IDX],
|
|
{ "ApplSeqNum", "eobi.applseqnum",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[APPLSEQRESETINDICATOR_FH_IDX],
|
|
{ "ApplSeqResetIndicator", "eobi.applseqresetindicator",
|
|
FT_UINT8, BASE_DEC, VALS(appl_seq_reset_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[BIDORDTYPE_FH_IDX],
|
|
{ "BidOrdType", "eobi.bidordtype",
|
|
FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[BIDPX_FH_IDX],
|
|
{ "BidPx", "eobi.bidpx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[BIDSIZE_FH_IDX],
|
|
{ "BidSize", "eobi.bidsize",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[BODYLEN_FH_IDX],
|
|
{ "BodyLen", "eobi.bodylen",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[COMPLETIONINDICATOR_FH_IDX],
|
|
{ "CompletionIndicator", "eobi.completionindicator",
|
|
FT_UINT8, BASE_DEC, VALS(completion_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[CROSSREQUESTTYPE_FH_IDX],
|
|
{ "CrossRequestType", "eobi.crossrequesttype",
|
|
FT_UINT8, BASE_DEC, VALS(cross_request_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[DSCP_FH_IDX],
|
|
{ "DSCP", "eobi.dscp",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[DISPLAYQTY_FH_IDX],
|
|
{ "DisplayQty", "eobi.displayqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[EXECID_FH_IDX],
|
|
{ "ExecID", "eobi.execid",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[FASTMARKETINDICATOR_FH_IDX],
|
|
{ "FastMarketIndicator", "eobi.fastmarketindicator",
|
|
FT_UINT8, BASE_DEC, VALS(fast_market_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[HIGHPX_FH_IDX],
|
|
{ "HighPx", "eobi.highpx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[IMBALANCEQTY_FH_IDX],
|
|
{ "ImbalanceQty", "eobi.imbalanceqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[IMPLIEDMARKETINDICATOR_FH_IDX],
|
|
{ "ImpliedMarketIndicator", "eobi.impliedmarketindicator",
|
|
FT_UINT8, BASE_DEC, VALS(implied_market_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[INPUTSOURCE_FH_IDX],
|
|
{ "InputSource", "eobi.inputsource",
|
|
FT_UINT8, BASE_DEC, VALS(input_source_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX],
|
|
{ "InstrumentScopeProductComplex", "eobi.instrumentscopeproductcomplex",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &instrument_scope_product_complex_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LASTFRAGMENT_FH_IDX],
|
|
{ "LastFragment", "eobi.lastfragment",
|
|
FT_UINT8, BASE_DEC, VALS(last_fragment_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LASTMSGSEQNUMPROCESSED_FH_IDX],
|
|
{ "LastMsgSeqNumProcessed", "eobi.lastmsgseqnumprocessed",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LASTPX_FH_IDX],
|
|
{ "LastPx", "eobi.lastpx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LASTQTY_FH_IDX],
|
|
{ "LastQty", "eobi.lastqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LASTUPDATETIME_FH_IDX],
|
|
{ "LastUpdateTime", "eobi.lastupdatetime",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGPRICE_FH_IDX],
|
|
{ "LegPrice", "eobi.legprice",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGRATIOMULTIPLIER_FH_IDX],
|
|
{ "LegRatioMultiplier", "eobi.legratiomultiplier",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGRATIOQTY_FH_IDX],
|
|
{ "LegRatioQty", "eobi.legratioqty",
|
|
FT_INT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGSECURITYID_FH_IDX],
|
|
{ "LegSecurityID", "eobi.legsecurityid",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGSECURITYTYPE_FH_IDX],
|
|
{ "LegSecurityType", "eobi.legsecuritytype",
|
|
FT_UINT8, BASE_DEC, VALS(leg_security_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGSIDE_FH_IDX],
|
|
{ "LegSide", "eobi.legside",
|
|
FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LEGSYMBOL_FH_IDX],
|
|
{ "LegSymbol", "eobi.legsymbol",
|
|
FT_INT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[LOWPX_FH_IDX],
|
|
{ "LowPx", "eobi.lowpx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MDENTRYPX_FH_IDX],
|
|
{ "MDEntryPx", "eobi.mdentrypx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MDENTRYSIZE_FH_IDX],
|
|
{ "MDEntrySize", "eobi.mdentrysize",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MDENTRYTYPE_FH_IDX],
|
|
{ "MDEntryType", "eobi.mdentrytype",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &mdentry_type_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MARKETCONDITION_FH_IDX],
|
|
{ "MarketCondition", "eobi.marketcondition",
|
|
FT_UINT8, BASE_DEC, VALS(market_condition_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MARKETSEGMENTID_FH_IDX],
|
|
{ "MarketSegmentID", "eobi.marketsegmentid",
|
|
FT_INT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MASSMARKETCONDITION_FH_IDX],
|
|
{ "MassMarketCondition", "eobi.massmarketcondition",
|
|
FT_UINT8, BASE_DEC, VALS(market_condition_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MASSSOLDOUTINDICATOR_FH_IDX],
|
|
{ "MassSoldOutIndicator", "eobi.masssoldoutindicator",
|
|
FT_UINT8, BASE_DEC, VALS(mass_sold_out_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MATCHSUBTYPE_FH_IDX],
|
|
{ "MatchSubType", "eobi.matchsubtype",
|
|
FT_UINT8, BASE_DEC, VALS(match_sub_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MATCHTYPE_FH_IDX],
|
|
{ "MatchType", "eobi.matchtype",
|
|
FT_UINT8, BASE_DEC, VALS(match_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[MSGSEQNUM_FH_IDX],
|
|
{ "MsgSeqNum", "eobi.msgseqnum",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[NOLEGS_FH_IDX],
|
|
{ "NoLegs", "eobi.nolegs",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[NOMDENTRIES_FH_IDX],
|
|
{ "NoMDEntries", "eobi.nomdentries",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[NORELATEDSYM_FH_IDX],
|
|
{ "NoRelatedSym", "eobi.norelatedsym",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[NUMBEROFBUYORDERS_FH_IDX],
|
|
{ "NumberOfBuyOrders", "eobi.numberofbuyorders",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[NUMBEROFSELLORDERS_FH_IDX],
|
|
{ "NumberOfSellOrders", "eobi.numberofsellorders",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[OFFERORDTYPE_FH_IDX],
|
|
{ "OfferOrdType", "eobi.offerordtype",
|
|
FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[OFFERPX_FH_IDX],
|
|
{ "OfferPx", "eobi.offerpx",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[OFFERSIZE_FH_IDX],
|
|
{ "OfferSize", "eobi.offersize",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[ORDTYPE_FH_IDX],
|
|
{ "OrdType", "eobi.ordtype",
|
|
FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[PARTITIONID_FH_IDX],
|
|
{ "PartitionID", "eobi.partitionid",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[POTENTIALSECURITYTRADINGEVENT_FH_IDX],
|
|
{ "PotentialSecurityTradingEvent", "eobi.potentialsecuritytradingevent",
|
|
FT_UINT8, BASE_DEC, VALS(potential_security_trading_event_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[PREVDISPLAYQTY_FH_IDX],
|
|
{ "PrevDisplayQty", "eobi.prevdisplayqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[PREVPRICE_FH_IDX],
|
|
{ "PrevPrice", "eobi.prevprice",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[PRICE_FH_IDX],
|
|
{ "Price", "eobi.price",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[PRODUCTCOMPLEX_FH_IDX],
|
|
{ "ProductComplex", "eobi.productcomplex",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &instrument_scope_product_complex_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[REQUESTTIME_FH_IDX],
|
|
{ "RequestTime", "eobi.requesttime",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[RESTINGCXLQTY_FH_IDX],
|
|
{ "RestingCxlQty", "eobi.restingcxlqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[RESTINGHIDDENQTY_FH_IDX],
|
|
{ "RestingHiddenQty", "eobi.restinghiddenqty",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYID_FH_IDX],
|
|
{ "SecurityID", "eobi.securityid",
|
|
FT_INT64, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYMASSSTATUS_FH_IDX],
|
|
{ "SecurityMassStatus", "eobi.securitymassstatus",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_status_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYMASSTRADINGEVENT_FH_IDX],
|
|
{ "SecurityMassTradingEvent", "eobi.securitymasstradingevent",
|
|
FT_UINT8, BASE_DEC, VALS(security_mass_trading_event_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYMASSTRADINGSTATUS_FH_IDX],
|
|
{ "SecurityMassTradingStatus", "eobi.securitymasstradingstatus",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_trading_status_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYSTATUS_FH_IDX],
|
|
{ "SecurityStatus", "eobi.securitystatus",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_status_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYSUBTYPE_FH_IDX],
|
|
{ "SecuritySubType", "eobi.securitysubtype",
|
|
FT_INT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYTRADINGEVENT_FH_IDX],
|
|
{ "SecurityTradingEvent", "eobi.securitytradingevent",
|
|
FT_UINT8, BASE_DEC, VALS(security_mass_trading_event_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SECURITYTRADINGSTATUS_FH_IDX],
|
|
{ "SecurityTradingStatus", "eobi.securitytradingstatus",
|
|
FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_trading_status_vals_ext, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SIDE_FH_IDX],
|
|
{ "Side", "eobi.side",
|
|
FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[SOLDOUTINDICATOR_FH_IDX],
|
|
{ "SoldOutIndicator", "eobi.soldoutindicator",
|
|
FT_UINT8, BASE_DEC, VALS(mass_sold_out_indicator_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TEMPLATEID_FH_IDX],
|
|
{ "TemplateID", "eobi.templateid",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TOTNOORDERS_FH_IDX],
|
|
{ "TotNoOrders", "eobi.totnoorders",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRADSESSTATUS_FH_IDX],
|
|
{ "TradSesStatus", "eobi.tradsesstatus",
|
|
FT_UINT8, BASE_DEC, VALS(trad_ses_status_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRADECONDITION_FH_IDX],
|
|
{ "TradeCondition", "eobi.tradecondition",
|
|
FT_UINT16, BASE_DEC, VALS(trade_condition_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRADINGSESSIONID_FH_IDX],
|
|
{ "TradingSessionID", "eobi.tradingsessionid",
|
|
FT_UINT8, BASE_DEC, VALS(trading_session_id_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRADINGSESSIONSUBID_FH_IDX],
|
|
{ "TradingSessionSubID", "eobi.tradingsessionsubid",
|
|
FT_UINT8, BASE_DEC, VALS(trading_session_sub_id_vals), 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRANSACTTIME_FH_IDX],
|
|
{ "TransactTime", "eobi.transacttime",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRDMATCHID_FH_IDX],
|
|
{ "TrdMatchID", "eobi.trdmatchid",
|
|
FT_UINT32, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRDREGTSEXECUTIONTIME_FH_IDX],
|
|
{ "TrdRegTSExecutionTime", "eobi.trdregtsexecutiontime",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRDREGTSPREVTIMEPRIORITY_FH_IDX],
|
|
{ "TrdRegTSPrevTimePriority", "eobi.trdregtsprevtimepriority",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRDREGTSTIMEIN_FH_IDX],
|
|
{ "TrdRegTSTimeIn", "eobi.trdregtstimein",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi[TRDREGTSTIMEPRIORITY_FH_IDX],
|
|
{ "TrdRegTSTimePriority", "eobi.trdregtstimepriority",
|
|
FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi_dscp_exec_summary,
|
|
{ "DSCP_ExecSummary", "eobi.dscp_execsummary",
|
|
FT_BOOLEAN, 8, NULL, 0x10,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi_dscp_improved,
|
|
{ "DSCP_Improved", "eobi.dscp_improved",
|
|
FT_BOOLEAN, 8, NULL, 0x20,
|
|
NULL, HFILL }
|
|
}
|
|
, { &hf_eobi_dscp_widened,
|
|
{ "DSCP_Widened", "eobi.dscp_widened",
|
|
FT_BOOLEAN, 8, NULL, 0x40,
|
|
NULL, HFILL }
|
|
}
|
|
};
|
|
static ei_register_info ei[] = {
|
|
{
|
|
&ei_eobi_counter_overflow,
|
|
{ "eobi.counter_overflow", PI_PROTOCOL, PI_WARN, "Counter Overflow", EXPFILL }
|
|
},
|
|
{
|
|
&ei_eobi_invalid_template,
|
|
{ "eobi.invalid_template", PI_PROTOCOL, PI_ERROR, "Invalid Template ID", EXPFILL }
|
|
},
|
|
{
|
|
&ei_eobi_invalid_length,
|
|
{ "eobi.invalid_length", PI_PROTOCOL, PI_ERROR, "Invalid Body Length", EXPFILL }
|
|
},
|
|
{
|
|
&ei_eobi_missing,
|
|
{ "eobi.missing", PI_PROTOCOL, PI_WARN, "A required value is missing", EXPFILL }
|
|
},
|
|
{
|
|
&ei_eobi_overused,
|
|
{ "eobi.overused", PI_PROTOCOL, PI_WARN, "An unused value is set", EXPFILL }
|
|
}
|
|
};
|
|
proto_eobi = proto_register_protocol("Enhanced Order Book Interface 10.0",
|
|
"EOBI", "eobi");
|
|
expert_module_t *expert_eobi = expert_register_protocol(proto_eobi);
|
|
expert_register_field_array(expert_eobi, ei, array_length(ei));
|
|
proto_register_field_array(proto_eobi, hf, array_length(hf));
|
|
static gint * const ett[] = { &ett_eobi[0], &ett_eobi[1], &ett_eobi[2], &ett_eobi[3], &ett_eobi[4], &ett_eobi[5], &ett_eobi[6], &ett_eobi_dscp };
|
|
proto_register_subtree_array(ett, array_length(ett));
|
|
proto_disable_by_default(proto_eobi);
|
|
}
|
|
|
|
void
|
|
proto_reg_handoff_eobi(void)
|
|
{
|
|
dissector_handle_t eobi_handle = create_dissector_handle(dissect_eobi,
|
|
proto_eobi);
|
|
|
|
// cf. N7 Network Access Guide, e.g.
|
|
// https://www.xetra.com/xetra-en/technology/t7/system-documentation/release10-0/Release-10.0-2692700?frag=2692724
|
|
// https://www.xetra.com/resource/blob/2762078/388b727972b5122945eedf0e63c36920/data/N7-Network-Access-Guide-v2.0.59.pdf
|
|
|
|
|
|
static const int ports[] = {
|
|
59000, // Snapshot EUREX US-allowed PROD
|
|
59001, // Incremental EUREX US-allowed PROD
|
|
59032, // Snapshot EUREX US-restricted PROD
|
|
59033, // Incremental EUREX US-restricted PROD
|
|
59500, // Snapshot EUREX US-allowed SIMU
|
|
59501, // Incremental EUREX US-allowed SIMU
|
|
59532, // Snapshot EUREX US-restricted SIMU
|
|
59533, // Incremental EUREX US-restricted SIMU
|
|
|
|
57000, // Snapshot FX US-allowed PROD
|
|
57001, // Incremental FX US-allowed PROD
|
|
57032, // Snapshot FX US-restricted PROD
|
|
57033, // Incremental FX US-restricted PROD
|
|
57500, // Snapshot FX US-allowed SIMU
|
|
57501, // Incremental FX US-allowed SIMU
|
|
57532, // Snapshot FX US-restricted SIMU
|
|
57533, // Incremental FX US-restricted SIMU
|
|
|
|
59000, // Snapshot Xetra PROD
|
|
59001, // Incremental Xetra PROD
|
|
59500, // Snapshot Xetra SIMU
|
|
59501, // Incremental Xetra SIMU
|
|
|
|
56000, // Snapshot Boerse Frankfurt PROD
|
|
56001, // Incremental Boerse Frankfurt PROD
|
|
56500, // Snapshot Boerse Frankfurt SIMU
|
|
56501 // Incremental Boerse Frankfurt SIMU
|
|
};
|
|
for (unsigned i = 0; i < sizeof ports / sizeof ports[0]; ++i)
|
|
dissector_add_uint("udp.port", ports[i], eobi_handle);
|
|
}
|