Coverage Report

Created: 2025-02-15 06:25

/src/wireshark/epan/dissectors/packet-eobi.c
Line
Count
Source (jump to first uncovered line)
1
// auto-generated by Georg Sauthoff's eti2wireshark.py
2
3
/* packet-eti.c
4
 * Routines for EOBI dissection
5
 * Copyright 2021, Georg Sauthoff <mail@gms.tf>
6
 *
7
 * Wireshark - Network traffic analyzer
8
 * By Gerald Combs <gerald@wireshark.org>
9
 * Copyright 1998 Gerald Combs
10
 *
11
 * SPDX-License-Identifier: GPL-2.0-or-later
12
 */
13
14
/*
15
 * The Enhanced Order Book Interface 10.0 (EOBI) is an electronic trading protocol
16
 * that is used by a few exchanges (Eurex, Xetra, ...).
17
 *
18
 * It's a Length-Tag based protocol consisting of mostly fix sized
19
 * request/response messages.
20
 *
21
 * Links:
22
 * https://en.wikipedia.org/wiki/List_of_electronic_trading_protocols#Europe
23
 * https://github.com/gsauthof/python-eti#protocol-descriptions
24
 * https://github.com/gsauthof/python-eti#protocol-introduction
25
 *
26
 */
27
28
#include <config.h>
29
30
31
#include <epan/packet.h>   // Should be first Wireshark include (other than config.h)
32
#include "packet-udp.h"    // udp_dissect_pdus()
33
#include <epan/expert.h>   // expert info
34
35
#include <inttypes.h>
36
#include <stdio.h>         // snprintf()
37
38
39
/* Prototypes */
40
/* (Required to prevent [-Wmissing-prototypes] warnings */
41
void proto_reg_handoff_eobi(void);
42
void proto_register_eobi(void);
43
44
static dissector_handle_t eobi_handle;
45
46
static int proto_eobi;
47
48
static expert_field ei_eobi_counter_overflow;
49
static expert_field ei_eobi_invalid_template;
50
static expert_field ei_eobi_invalid_length;
51
static expert_field ei_eobi_missing;
52
static expert_field ei_eobi_overused;
53
54
static int hf_eobi[83];
55
static int hf_eobi_dscp_exec_summary;
56
static int hf_eobi_dscp_improved;
57
static int hf_eobi_dscp_widened;
58
enum Field_Handle_Index {
59
      AGGRESSORSIDE_FH_IDX
60
    , AGGRESSORTIME_FH_IDX
61
    , ALGORITHMICTRADEINDICATOR_FH_IDX
62
    , APPLSEQNUM_FH_IDX
63
    , APPLSEQRESETINDICATOR_FH_IDX
64
    , BIDORDTYPE_FH_IDX
65
    , BIDPX_FH_IDX
66
    , BIDSIZE_FH_IDX
67
    , BODYLEN_FH_IDX
68
    , COMPLETIONINDICATOR_FH_IDX
69
    , CROSSREQUESTTYPE_FH_IDX
70
    , DSCP_FH_IDX
71
    , DISPLAYQTY_FH_IDX
72
    , EXECID_FH_IDX
73
    , FASTMARKETINDICATOR_FH_IDX
74
    , HIGHPX_FH_IDX
75
    , IMBALANCEQTY_FH_IDX
76
    , IMPLIEDMARKETINDICATOR_FH_IDX
77
    , INPUTSOURCE_FH_IDX
78
    , INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX
79
    , LASTFRAGMENT_FH_IDX
80
    , LASTMSGSEQNUMPROCESSED_FH_IDX
81
    , LASTPX_FH_IDX
82
    , LASTQTY_FH_IDX
83
    , LASTUPDATETIME_FH_IDX
84
    , LEGPRICE_FH_IDX
85
    , LEGRATIOMULTIPLIER_FH_IDX
86
    , LEGRATIOQTY_FH_IDX
87
    , LEGSECURITYID_FH_IDX
88
    , LEGSECURITYTYPE_FH_IDX
89
    , LEGSIDE_FH_IDX
90
    , LEGSYMBOL_FH_IDX
91
    , LOWPX_FH_IDX
92
    , MDENTRYPX_FH_IDX
93
    , MDENTRYSIZE_FH_IDX
94
    , MDENTRYTYPE_FH_IDX
95
    , MARKETCONDITION_FH_IDX
96
    , MARKETSEGMENTID_FH_IDX
97
    , MASSMARKETCONDITION_FH_IDX
98
    , MASSSOLDOUTINDICATOR_FH_IDX
99
    , MATCHSUBTYPE_FH_IDX
100
    , MATCHTYPE_FH_IDX
101
    , MSGSEQNUM_FH_IDX
102
    , NOLEGS_FH_IDX
103
    , NOMDENTRIES_FH_IDX
104
    , NORELATEDSYM_FH_IDX
105
    , NUMBEROFBUYORDERS_FH_IDX
106
    , NUMBEROFSELLORDERS_FH_IDX
107
    , OFFERORDTYPE_FH_IDX
108
    , OFFERPX_FH_IDX
109
    , OFFERSIZE_FH_IDX
110
    , ORDTYPE_FH_IDX
111
    , PARTITIONID_FH_IDX
112
    , POTENTIALSECURITYTRADINGEVENT_FH_IDX
113
    , PREVDISPLAYQTY_FH_IDX
114
    , PREVPRICE_FH_IDX
115
    , PRICE_FH_IDX
116
    , PRODUCTCOMPLEX_FH_IDX
117
    , REQUESTTIME_FH_IDX
118
    , RESTINGCXLQTY_FH_IDX
119
    , RESTINGHIDDENQTY_FH_IDX
120
    , SECURITYID_FH_IDX
121
    , SECURITYMASSSTATUS_FH_IDX
122
    , SECURITYMASSTRADINGEVENT_FH_IDX
123
    , SECURITYMASSTRADINGSTATUS_FH_IDX
124
    , SECURITYSTATUS_FH_IDX
125
    , SECURITYSUBTYPE_FH_IDX
126
    , SECURITYTRADINGEVENT_FH_IDX
127
    , SECURITYTRADINGSTATUS_FH_IDX
128
    , SIDE_FH_IDX
129
    , SOLDOUTINDICATOR_FH_IDX
130
    , TEMPLATEID_FH_IDX
131
    , TOTNOORDERS_FH_IDX
132
    , TRADSESSTATUS_FH_IDX
133
    , TRADECONDITION_FH_IDX
134
    , TRADINGSESSIONID_FH_IDX
135
    , TRADINGSESSIONSUBID_FH_IDX
136
    , TRANSACTTIME_FH_IDX
137
    , TRDMATCHID_FH_IDX
138
    , TRDREGTSEXECUTIONTIME_FH_IDX
139
    , TRDREGTSPREVTIMEPRIORITY_FH_IDX
140
    , TRDREGTSTIMEIN_FH_IDX
141
    , TRDREGTSTIMEPRIORITY_FH_IDX
142
};
143
static const value_string template_id_vals[] = { // TemplateID
144
    { 13001, "Heartbeat" },
145
    { 13002, "Unknown" },
146
    { 13003, "Unknown" },
147
    { 13004, "Unknown" },
148
    { 13005, "PacketHeader" },
149
    { 13006, "Unknown" },
150
    { 13007, "Unknown" },
151
    { 13008, "Unknown" },
152
    { 13009, "Unknown" },
153
    { 13010, "Unknown" },
154
    { 13011, "Unknown" },
155
    { 13012, "Unknown" },
156
    { 13013, "Unknown" },
157
    { 13014, "Unknown" },
158
    { 13015, "Unknown" },
159
    { 13016, "Unknown" },
160
    { 13017, "Unknown" },
161
    { 13018, "Unknown" },
162
    { 13019, "Unknown" },
163
    { 13020, "Unknown" },
164
    { 13021, "Unknown" },
165
    { 13022, "Unknown" },
166
    { 13023, "Unknown" },
167
    { 13024, "Unknown" },
168
    { 13025, "Unknown" },
169
    { 13026, "Unknown" },
170
    { 13027, "Unknown" },
171
    { 13028, "Unknown" },
172
    { 13029, "Unknown" },
173
    { 13030, "Unknown" },
174
    { 13031, "Unknown" },
175
    { 13032, "Unknown" },
176
    { 13033, "Unknown" },
177
    { 13034, "Unknown" },
178
    { 13035, "Unknown" },
179
    { 13036, "Unknown" },
180
    { 13037, "Unknown" },
181
    { 13038, "Unknown" },
182
    { 13039, "Unknown" },
183
    { 13040, "Unknown" },
184
    { 13041, "Unknown" },
185
    { 13042, "Unknown" },
186
    { 13043, "Unknown" },
187
    { 13044, "Unknown" },
188
    { 13045, "Unknown" },
189
    { 13046, "Unknown" },
190
    { 13047, "Unknown" },
191
    { 13048, "Unknown" },
192
    { 13049, "Unknown" },
193
    { 13050, "Unknown" },
194
    { 13051, "Unknown" },
195
    { 13052, "Unknown" },
196
    { 13053, "Unknown" },
197
    { 13054, "Unknown" },
198
    { 13055, "Unknown" },
199
    { 13056, "Unknown" },
200
    { 13057, "Unknown" },
201
    { 13058, "Unknown" },
202
    { 13059, "Unknown" },
203
    { 13060, "Unknown" },
204
    { 13061, "Unknown" },
205
    { 13062, "Unknown" },
206
    { 13063, "Unknown" },
207
    { 13064, "Unknown" },
208
    { 13065, "Unknown" },
209
    { 13066, "Unknown" },
210
    { 13067, "Unknown" },
211
    { 13068, "Unknown" },
212
    { 13069, "Unknown" },
213
    { 13070, "Unknown" },
214
    { 13071, "Unknown" },
215
    { 13072, "Unknown" },
216
    { 13073, "Unknown" },
217
    { 13074, "Unknown" },
218
    { 13075, "Unknown" },
219
    { 13076, "Unknown" },
220
    { 13077, "Unknown" },
221
    { 13078, "Unknown" },
222
    { 13079, "Unknown" },
223
    { 13080, "Unknown" },
224
    { 13081, "Unknown" },
225
    { 13082, "Unknown" },
226
    { 13083, "Unknown" },
227
    { 13084, "Unknown" },
228
    { 13085, "Unknown" },
229
    { 13086, "Unknown" },
230
    { 13087, "Unknown" },
231
    { 13088, "Unknown" },
232
    { 13089, "Unknown" },
233
    { 13090, "Unknown" },
234
    { 13091, "Unknown" },
235
    { 13092, "Unknown" },
236
    { 13093, "Unknown" },
237
    { 13094, "Unknown" },
238
    { 13095, "Unknown" },
239
    { 13096, "Unknown" },
240
    { 13097, "Unknown" },
241
    { 13098, "Unknown" },
242
    { 13099, "Unknown" },
243
    { 13100, "OrderAdd" },
244
    { 13101, "OrderModify" },
245
    { 13102, "OrderDelete" },
246
    { 13103, "OrderMassDelete" },
247
    { 13104, "FullOrderExecution" },
248
    { 13105, "PartialOrderExecution" },
249
    { 13106, "OrderModifySamePrio" },
250
    { 13107, "Unknown" },
251
    { 13108, "Unknown" },
252
    { 13109, "Unknown" },
253
    { 13110, "Unknown" },
254
    { 13111, "Unknown" },
255
    { 13112, "Unknown" },
256
    { 13113, "Unknown" },
257
    { 13114, "Unknown" },
258
    { 13115, "Unknown" },
259
    { 13116, "Unknown" },
260
    { 13117, "Unknown" },
261
    { 13118, "Unknown" },
262
    { 13119, "Unknown" },
263
    { 13120, "Unknown" },
264
    { 13121, "Unknown" },
265
    { 13122, "Unknown" },
266
    { 13123, "Unknown" },
267
    { 13124, "Unknown" },
268
    { 13125, "Unknown" },
269
    { 13126, "Unknown" },
270
    { 13127, "Unknown" },
271
    { 13128, "Unknown" },
272
    { 13129, "Unknown" },
273
    { 13130, "Unknown" },
274
    { 13131, "Unknown" },
275
    { 13132, "Unknown" },
276
    { 13133, "Unknown" },
277
    { 13134, "Unknown" },
278
    { 13135, "Unknown" },
279
    { 13136, "Unknown" },
280
    { 13137, "Unknown" },
281
    { 13138, "Unknown" },
282
    { 13139, "Unknown" },
283
    { 13140, "Unknown" },
284
    { 13141, "Unknown" },
285
    { 13142, "Unknown" },
286
    { 13143, "Unknown" },
287
    { 13144, "Unknown" },
288
    { 13145, "Unknown" },
289
    { 13146, "Unknown" },
290
    { 13147, "Unknown" },
291
    { 13148, "Unknown" },
292
    { 13149, "Unknown" },
293
    { 13150, "Unknown" },
294
    { 13151, "Unknown" },
295
    { 13152, "Unknown" },
296
    { 13153, "Unknown" },
297
    { 13154, "Unknown" },
298
    { 13155, "Unknown" },
299
    { 13156, "Unknown" },
300
    { 13157, "Unknown" },
301
    { 13158, "Unknown" },
302
    { 13159, "Unknown" },
303
    { 13160, "Unknown" },
304
    { 13161, "Unknown" },
305
    { 13162, "Unknown" },
306
    { 13163, "Unknown" },
307
    { 13164, "Unknown" },
308
    { 13165, "Unknown" },
309
    { 13166, "Unknown" },
310
    { 13167, "Unknown" },
311
    { 13168, "Unknown" },
312
    { 13169, "Unknown" },
313
    { 13170, "Unknown" },
314
    { 13171, "Unknown" },
315
    { 13172, "Unknown" },
316
    { 13173, "Unknown" },
317
    { 13174, "Unknown" },
318
    { 13175, "Unknown" },
319
    { 13176, "Unknown" },
320
    { 13177, "Unknown" },
321
    { 13178, "Unknown" },
322
    { 13179, "Unknown" },
323
    { 13180, "Unknown" },
324
    { 13181, "Unknown" },
325
    { 13182, "Unknown" },
326
    { 13183, "Unknown" },
327
    { 13184, "Unknown" },
328
    { 13185, "Unknown" },
329
    { 13186, "Unknown" },
330
    { 13187, "Unknown" },
331
    { 13188, "Unknown" },
332
    { 13189, "Unknown" },
333
    { 13190, "Unknown" },
334
    { 13191, "Unknown" },
335
    { 13192, "Unknown" },
336
    { 13193, "Unknown" },
337
    { 13194, "Unknown" },
338
    { 13195, "Unknown" },
339
    { 13196, "Unknown" },
340
    { 13197, "Unknown" },
341
    { 13198, "Unknown" },
342
    { 13199, "Unknown" },
343
    { 13200, "TradeReversal" },
344
    { 13201, "TradeReport" },
345
    { 13202, "ExecutionSummary" },
346
    { 13203, "Unknown" },
347
    { 13204, "Unknown" },
348
    { 13205, "Unknown" },
349
    { 13206, "Unknown" },
350
    { 13207, "Unknown" },
351
    { 13208, "Unknown" },
352
    { 13209, "Unknown" },
353
    { 13210, "Unknown" },
354
    { 13211, "Unknown" },
355
    { 13212, "Unknown" },
356
    { 13213, "Unknown" },
357
    { 13214, "Unknown" },
358
    { 13215, "Unknown" },
359
    { 13216, "Unknown" },
360
    { 13217, "Unknown" },
361
    { 13218, "Unknown" },
362
    { 13219, "Unknown" },
363
    { 13220, "Unknown" },
364
    { 13221, "Unknown" },
365
    { 13222, "Unknown" },
366
    { 13223, "Unknown" },
367
    { 13224, "Unknown" },
368
    { 13225, "Unknown" },
369
    { 13226, "Unknown" },
370
    { 13227, "Unknown" },
371
    { 13228, "Unknown" },
372
    { 13229, "Unknown" },
373
    { 13230, "Unknown" },
374
    { 13231, "Unknown" },
375
    { 13232, "Unknown" },
376
    { 13233, "Unknown" },
377
    { 13234, "Unknown" },
378
    { 13235, "Unknown" },
379
    { 13236, "Unknown" },
380
    { 13237, "Unknown" },
381
    { 13238, "Unknown" },
382
    { 13239, "Unknown" },
383
    { 13240, "Unknown" },
384
    { 13241, "Unknown" },
385
    { 13242, "Unknown" },
386
    { 13243, "Unknown" },
387
    { 13244, "Unknown" },
388
    { 13245, "Unknown" },
389
    { 13246, "Unknown" },
390
    { 13247, "Unknown" },
391
    { 13248, "Unknown" },
392
    { 13249, "Unknown" },
393
    { 13250, "Unknown" },
394
    { 13251, "Unknown" },
395
    { 13252, "Unknown" },
396
    { 13253, "Unknown" },
397
    { 13254, "Unknown" },
398
    { 13255, "Unknown" },
399
    { 13256, "Unknown" },
400
    { 13257, "Unknown" },
401
    { 13258, "Unknown" },
402
    { 13259, "Unknown" },
403
    { 13260, "Unknown" },
404
    { 13261, "Unknown" },
405
    { 13262, "Unknown" },
406
    { 13263, "Unknown" },
407
    { 13264, "Unknown" },
408
    { 13265, "Unknown" },
409
    { 13266, "Unknown" },
410
    { 13267, "Unknown" },
411
    { 13268, "Unknown" },
412
    { 13269, "Unknown" },
413
    { 13270, "Unknown" },
414
    { 13271, "Unknown" },
415
    { 13272, "Unknown" },
416
    { 13273, "Unknown" },
417
    { 13274, "Unknown" },
418
    { 13275, "Unknown" },
419
    { 13276, "Unknown" },
420
    { 13277, "Unknown" },
421
    { 13278, "Unknown" },
422
    { 13279, "Unknown" },
423
    { 13280, "Unknown" },
424
    { 13281, "Unknown" },
425
    { 13282, "Unknown" },
426
    { 13283, "Unknown" },
427
    { 13284, "Unknown" },
428
    { 13285, "Unknown" },
429
    { 13286, "Unknown" },
430
    { 13287, "Unknown" },
431
    { 13288, "Unknown" },
432
    { 13289, "Unknown" },
433
    { 13290, "Unknown" },
434
    { 13291, "Unknown" },
435
    { 13292, "Unknown" },
436
    { 13293, "Unknown" },
437
    { 13294, "Unknown" },
438
    { 13295, "Unknown" },
439
    { 13296, "Unknown" },
440
    { 13297, "Unknown" },
441
    { 13298, "Unknown" },
442
    { 13299, "Unknown" },
443
    { 13300, "ProductStateChange" },
444
    { 13301, "InstrumentStateChange" },
445
    { 13302, "MassInstrumentStateChange" },
446
    { 13303, "Unknown" },
447
    { 13304, "Unknown" },
448
    { 13305, "Unknown" },
449
    { 13306, "Unknown" },
450
    { 13307, "Unknown" },
451
    { 13308, "Unknown" },
452
    { 13309, "Unknown" },
453
    { 13310, "Unknown" },
454
    { 13311, "Unknown" },
455
    { 13312, "Unknown" },
456
    { 13313, "Unknown" },
457
    { 13314, "Unknown" },
458
    { 13315, "Unknown" },
459
    { 13316, "Unknown" },
460
    { 13317, "Unknown" },
461
    { 13318, "Unknown" },
462
    { 13319, "Unknown" },
463
    { 13320, "Unknown" },
464
    { 13321, "Unknown" },
465
    { 13322, "Unknown" },
466
    { 13323, "Unknown" },
467
    { 13324, "Unknown" },
468
    { 13325, "Unknown" },
469
    { 13326, "Unknown" },
470
    { 13327, "Unknown" },
471
    { 13328, "Unknown" },
472
    { 13329, "Unknown" },
473
    { 13330, "Unknown" },
474
    { 13331, "Unknown" },
475
    { 13332, "Unknown" },
476
    { 13333, "Unknown" },
477
    { 13334, "Unknown" },
478
    { 13335, "Unknown" },
479
    { 13336, "Unknown" },
480
    { 13337, "Unknown" },
481
    { 13338, "Unknown" },
482
    { 13339, "Unknown" },
483
    { 13340, "Unknown" },
484
    { 13341, "Unknown" },
485
    { 13342, "Unknown" },
486
    { 13343, "Unknown" },
487
    { 13344, "Unknown" },
488
    { 13345, "Unknown" },
489
    { 13346, "Unknown" },
490
    { 13347, "Unknown" },
491
    { 13348, "Unknown" },
492
    { 13349, "Unknown" },
493
    { 13350, "Unknown" },
494
    { 13351, "Unknown" },
495
    { 13352, "Unknown" },
496
    { 13353, "Unknown" },
497
    { 13354, "Unknown" },
498
    { 13355, "Unknown" },
499
    { 13356, "Unknown" },
500
    { 13357, "Unknown" },
501
    { 13358, "Unknown" },
502
    { 13359, "Unknown" },
503
    { 13360, "Unknown" },
504
    { 13361, "Unknown" },
505
    { 13362, "Unknown" },
506
    { 13363, "Unknown" },
507
    { 13364, "Unknown" },
508
    { 13365, "Unknown" },
509
    { 13366, "Unknown" },
510
    { 13367, "Unknown" },
511
    { 13368, "Unknown" },
512
    { 13369, "Unknown" },
513
    { 13370, "Unknown" },
514
    { 13371, "Unknown" },
515
    { 13372, "Unknown" },
516
    { 13373, "Unknown" },
517
    { 13374, "Unknown" },
518
    { 13375, "Unknown" },
519
    { 13376, "Unknown" },
520
    { 13377, "Unknown" },
521
    { 13378, "Unknown" },
522
    { 13379, "Unknown" },
523
    { 13380, "Unknown" },
524
    { 13381, "Unknown" },
525
    { 13382, "Unknown" },
526
    { 13383, "Unknown" },
527
    { 13384, "Unknown" },
528
    { 13385, "Unknown" },
529
    { 13386, "Unknown" },
530
    { 13387, "Unknown" },
531
    { 13388, "Unknown" },
532
    { 13389, "Unknown" },
533
    { 13390, "Unknown" },
534
    { 13391, "Unknown" },
535
    { 13392, "Unknown" },
536
    { 13393, "Unknown" },
537
    { 13394, "Unknown" },
538
    { 13395, "Unknown" },
539
    { 13396, "Unknown" },
540
    { 13397, "Unknown" },
541
    { 13398, "Unknown" },
542
    { 13399, "Unknown" },
543
    { 13400, "AddComplexInstrument" },
544
    { 13401, "Unknown" },
545
    { 13402, "Unknown" },
546
    { 13403, "Unknown" },
547
    { 13404, "Unknown" },
548
    { 13405, "Unknown" },
549
    { 13406, "Unknown" },
550
    { 13407, "Unknown" },
551
    { 13408, "Unknown" },
552
    { 13409, "Unknown" },
553
    { 13410, "Unknown" },
554
    { 13411, "Unknown" },
555
    { 13412, "Unknown" },
556
    { 13413, "Unknown" },
557
    { 13414, "Unknown" },
558
    { 13415, "Unknown" },
559
    { 13416, "Unknown" },
560
    { 13417, "Unknown" },
561
    { 13418, "Unknown" },
562
    { 13419, "Unknown" },
563
    { 13420, "Unknown" },
564
    { 13421, "Unknown" },
565
    { 13422, "Unknown" },
566
    { 13423, "Unknown" },
567
    { 13424, "Unknown" },
568
    { 13425, "Unknown" },
569
    { 13426, "Unknown" },
570
    { 13427, "Unknown" },
571
    { 13428, "Unknown" },
572
    { 13429, "Unknown" },
573
    { 13430, "Unknown" },
574
    { 13431, "Unknown" },
575
    { 13432, "Unknown" },
576
    { 13433, "Unknown" },
577
    { 13434, "Unknown" },
578
    { 13435, "Unknown" },
579
    { 13436, "Unknown" },
580
    { 13437, "Unknown" },
581
    { 13438, "Unknown" },
582
    { 13439, "Unknown" },
583
    { 13440, "Unknown" },
584
    { 13441, "Unknown" },
585
    { 13442, "Unknown" },
586
    { 13443, "Unknown" },
587
    { 13444, "Unknown" },
588
    { 13445, "Unknown" },
589
    { 13446, "Unknown" },
590
    { 13447, "Unknown" },
591
    { 13448, "Unknown" },
592
    { 13449, "Unknown" },
593
    { 13450, "Unknown" },
594
    { 13451, "Unknown" },
595
    { 13452, "Unknown" },
596
    { 13453, "Unknown" },
597
    { 13454, "Unknown" },
598
    { 13455, "Unknown" },
599
    { 13456, "Unknown" },
600
    { 13457, "Unknown" },
601
    { 13458, "Unknown" },
602
    { 13459, "Unknown" },
603
    { 13460, "Unknown" },
604
    { 13461, "Unknown" },
605
    { 13462, "Unknown" },
606
    { 13463, "Unknown" },
607
    { 13464, "Unknown" },
608
    { 13465, "Unknown" },
609
    { 13466, "Unknown" },
610
    { 13467, "Unknown" },
611
    { 13468, "Unknown" },
612
    { 13469, "Unknown" },
613
    { 13470, "Unknown" },
614
    { 13471, "Unknown" },
615
    { 13472, "Unknown" },
616
    { 13473, "Unknown" },
617
    { 13474, "Unknown" },
618
    { 13475, "Unknown" },
619
    { 13476, "Unknown" },
620
    { 13477, "Unknown" },
621
    { 13478, "Unknown" },
622
    { 13479, "Unknown" },
623
    { 13480, "Unknown" },
624
    { 13481, "Unknown" },
625
    { 13482, "Unknown" },
626
    { 13483, "Unknown" },
627
    { 13484, "Unknown" },
628
    { 13485, "Unknown" },
629
    { 13486, "Unknown" },
630
    { 13487, "Unknown" },
631
    { 13488, "Unknown" },
632
    { 13489, "Unknown" },
633
    { 13490, "Unknown" },
634
    { 13491, "Unknown" },
635
    { 13492, "Unknown" },
636
    { 13493, "Unknown" },
637
    { 13494, "Unknown" },
638
    { 13495, "Unknown" },
639
    { 13496, "Unknown" },
640
    { 13497, "Unknown" },
641
    { 13498, "Unknown" },
642
    { 13499, "Unknown" },
643
    { 13500, "AuctionBBO" },
644
    { 13501, "AuctionClearingPrice" },
645
    { 13502, "CrossRequest" },
646
    { 13503, "QuoteRequest" },
647
    { 13504, "TopOfBook" },
648
    { 13505, "Unknown" },
649
    { 13506, "Unknown" },
650
    { 13507, "Unknown" },
651
    { 13508, "Unknown" },
652
    { 13509, "Unknown" },
653
    { 13510, "Unknown" },
654
    { 13511, "Unknown" },
655
    { 13512, "Unknown" },
656
    { 13513, "Unknown" },
657
    { 13514, "Unknown" },
658
    { 13515, "Unknown" },
659
    { 13516, "Unknown" },
660
    { 13517, "Unknown" },
661
    { 13518, "Unknown" },
662
    { 13519, "Unknown" },
663
    { 13520, "Unknown" },
664
    { 13521, "Unknown" },
665
    { 13522, "Unknown" },
666
    { 13523, "Unknown" },
667
    { 13524, "Unknown" },
668
    { 13525, "Unknown" },
669
    { 13526, "Unknown" },
670
    { 13527, "Unknown" },
671
    { 13528, "Unknown" },
672
    { 13529, "Unknown" },
673
    { 13530, "Unknown" },
674
    { 13531, "Unknown" },
675
    { 13532, "Unknown" },
676
    { 13533, "Unknown" },
677
    { 13534, "Unknown" },
678
    { 13535, "Unknown" },
679
    { 13536, "Unknown" },
680
    { 13537, "Unknown" },
681
    { 13538, "Unknown" },
682
    { 13539, "Unknown" },
683
    { 13540, "Unknown" },
684
    { 13541, "Unknown" },
685
    { 13542, "Unknown" },
686
    { 13543, "Unknown" },
687
    { 13544, "Unknown" },
688
    { 13545, "Unknown" },
689
    { 13546, "Unknown" },
690
    { 13547, "Unknown" },
691
    { 13548, "Unknown" },
692
    { 13549, "Unknown" },
693
    { 13550, "Unknown" },
694
    { 13551, "Unknown" },
695
    { 13552, "Unknown" },
696
    { 13553, "Unknown" },
697
    { 13554, "Unknown" },
698
    { 13555, "Unknown" },
699
    { 13556, "Unknown" },
700
    { 13557, "Unknown" },
701
    { 13558, "Unknown" },
702
    { 13559, "Unknown" },
703
    { 13560, "Unknown" },
704
    { 13561, "Unknown" },
705
    { 13562, "Unknown" },
706
    { 13563, "Unknown" },
707
    { 13564, "Unknown" },
708
    { 13565, "Unknown" },
709
    { 13566, "Unknown" },
710
    { 13567, "Unknown" },
711
    { 13568, "Unknown" },
712
    { 13569, "Unknown" },
713
    { 13570, "Unknown" },
714
    { 13571, "Unknown" },
715
    { 13572, "Unknown" },
716
    { 13573, "Unknown" },
717
    { 13574, "Unknown" },
718
    { 13575, "Unknown" },
719
    { 13576, "Unknown" },
720
    { 13577, "Unknown" },
721
    { 13578, "Unknown" },
722
    { 13579, "Unknown" },
723
    { 13580, "Unknown" },
724
    { 13581, "Unknown" },
725
    { 13582, "Unknown" },
726
    { 13583, "Unknown" },
727
    { 13584, "Unknown" },
728
    { 13585, "Unknown" },
729
    { 13586, "Unknown" },
730
    { 13587, "Unknown" },
731
    { 13588, "Unknown" },
732
    { 13589, "Unknown" },
733
    { 13590, "Unknown" },
734
    { 13591, "Unknown" },
735
    { 13592, "Unknown" },
736
    { 13593, "Unknown" },
737
    { 13594, "Unknown" },
738
    { 13595, "Unknown" },
739
    { 13596, "Unknown" },
740
    { 13597, "Unknown" },
741
    { 13598, "Unknown" },
742
    { 13599, "Unknown" },
743
    { 13600, "ProductSummary" },
744
    { 13601, "InstrumentSummary" },
745
    { 13602, "SnapshotOrder" },
746
    { 0, NULL }
747
};
748
static value_string_ext template_id_vals_ext = VALUE_STRING_EXT_INIT(template_id_vals);
749
static const value_string aggressor_side_vals[] = { // AggressorSide
750
    { 1, "Buy" },
751
    { 2, "Sell" },
752
    { 0xFF, "NO_VALUE" },
753
    { 0, NULL }
754
};
755
static const value_string algorithmic_trade_indicator_vals[] = { // AlgorithmicTradeIndicator
756
    { 1, "AlgorithmicTrade" },
757
    { 0xFF, "NO_VALUE" },
758
    { 0, NULL }
759
};
760
static const value_string appl_seq_reset_indicator_vals[] = { // ApplSeqResetIndicator
761
    { 0, "NoReset" },
762
    { 1, "Reset" },
763
    { 0xFF, "NO_VALUE" },
764
    { 0, NULL }
765
};
766
static const value_string bid_ord_type_vals[] = { // BidOrdType
767
    { 1, "Market" },
768
    { 0xFF, "NO_VALUE" },
769
    { 0, NULL }
770
};
771
static const value_string completion_indicator_vals[] = { // CompletionIndicator
772
    { 0, "Incomplete" },
773
    { 1, "Complete" },
774
    { 0xFF, "NO_VALUE" },
775
    { 0, NULL }
776
};
777
static const value_string cross_request_type_vals[] = { // CrossRequestType
778
    { 1, "CrossAnnouncement" },
779
    { 2, "LiquidityImprovementCross" },
780
    { 0xFF, "NO_VALUE" },
781
    { 0, NULL }
782
};
783
static const value_string fast_market_indicator_vals[] = { // FastMarketIndicator
784
    { 0, "No" },
785
    { 1, "Yes" },
786
    { 0xFF, "NO_VALUE" },
787
    { 0, NULL }
788
};
789
static const value_string implied_market_indicator_vals[] = { // ImpliedMarketIndicator
790
    { 0, "NotImplied" },
791
    { 3, "ImpliedInOut" },
792
    { 0xFF, "NO_VALUE" },
793
    { 0, NULL }
794
};
795
static const value_string input_source_vals[] = { // InputSource
796
    { 1, "CLIPClientBroker" },
797
    { 0xFF, "NO_VALUE" },
798
    { 0, NULL }
799
};
800
static const value_string instrument_scope_product_complex_vals[] = { // InstrumentScopeProductComplex
801
    { 1, "SimpleInstrument" },
802
    { 2, "StandardOptionStrategy" },
803
    { 3, "NonStandardOptionStrategy" },
804
    { 4, "VolatilityStrategy" },
805
    { 5, "FuturesSpread" },
806
    { 6, "InterProductSpread" },
807
    { 7, "StandardFuturesStrategy" },
808
    { 8, "PackAndBundle" },
809
    { 9, "Strip" },
810
    { 0xFF, "NO_VALUE" },
811
    { 0, NULL }
812
};
813
static value_string_ext instrument_scope_product_complex_vals_ext = VALUE_STRING_EXT_INIT(instrument_scope_product_complex_vals);
814
static const value_string last_fragment_vals[] = { // LastFragment
815
    { 0, "N" },
816
    { 1, "Y" },
817
    { 0xFF, "NO_VALUE" },
818
    { 0, NULL }
819
};
820
static const value_string leg_security_type_vals[] = { // LegSecurityType
821
    { 1, "LegSecurityMultiLeg" },
822
    { 2, "LegSecurityUnderlyingLeg" },
823
    { 0xFF, "NO_VALUE" },
824
    { 0, NULL }
825
};
826
// LegSide aliased by AggressorSide
827
static const value_string mdentry_type_vals[] = { // MDEntryType
828
    { 2, "Trade" },
829
    { 4, "OpeningPrice" },
830
    { 5, "ClosingPrice" },
831
    { 7, "HighPrice" },
832
    { 8, "LowPrice" },
833
    { 66, "TradeVolume" },
834
    { 101, "PreviousClosingPrice" },
835
    { 200, "OpeningAuction" },
836
    { 201, "IntradayAuction" },
837
    { 202, "CircuitBreakerAuction" },
838
    { 203, "ClosingAuction" },
839
    { 204, "IPOAuction" },
840
    { 0xFF, "NO_VALUE" },
841
    { 0, NULL }
842
};
843
static value_string_ext mdentry_type_vals_ext = VALUE_STRING_EXT_INIT(mdentry_type_vals);
844
static const value_string market_condition_vals[] = { // MarketCondition
845
    { 0, "Normal" },
846
    { 1, "Stressed" },
847
    { 0xFF, "NO_VALUE" },
848
    { 0, NULL }
849
};
850
// MassMarketCondition aliased by MarketCondition
851
static const value_string mass_sold_out_indicator_vals[] = { // MassSoldOutIndicator
852
    { 1, "SoldOut" },
853
    { 0xFF, "NO_VALUE" },
854
    { 0, NULL }
855
};
856
static const value_string match_sub_type_vals[] = { // MatchSubType
857
    { 1, "OpeningAuction" },
858
    { 2, "ClosingAuction" },
859
    { 3, "IntradayAuction" },
860
    { 4, "CircuitBreakerAuction" },
861
    { 5, "IPOAuction" },
862
    { 0xFF, "NO_VALUE" },
863
    { 0, NULL }
864
};
865
static const value_string match_type_vals[] = { // MatchType
866
    { 3, "ConfirmedTradeReport" },
867
    { 5, "CrossAuction" },
868
    { 7, "CallAuction" },
869
    { 13, "LiquidityImprovementCross" },
870
    { 14, "ContinuousAuction" },
871
    { 0xFF, "NO_VALUE" },
872
    { 0, NULL }
873
};
874
// OfferOrdType aliased by BidOrdType
875
// OrdType aliased by BidOrdType
876
static const value_string potential_security_trading_event_vals[] = { // PotentialSecurityTradingEvent
877
    { 0, "None" },
878
    { 10, "PriceVolatilityAuctionIsExtended" },
879
    { 0xFF, "NO_VALUE" },
880
    { 0, NULL }
881
};
882
// ProductComplex aliased by InstrumentScopeProductComplex
883
static const value_string security_mass_status_vals[] = { // SecurityMassStatus
884
    { 1, "Active" },
885
    { 2, "Inactive" },
886
    { 4, "Expired" },
887
    { 6, "KnockedOut" },
888
    { 7, "KnockOutRevoked" },
889
    { 9, "Suspended" },
890
    { 11, "PendingDeletion" },
891
    { 12, "KnockedOutAndSuspended" },
892
    { 0xFF, "NO_VALUE" },
893
    { 0, NULL }
894
};
895
static value_string_ext security_mass_status_vals_ext = VALUE_STRING_EXT_INIT(security_mass_status_vals);
896
static const value_string security_mass_trading_event_vals[] = { // SecurityMassTradingEvent
897
    { 10, "PriceVolatilityAuctionIsExtended" },
898
    { 11, "PriceVolatilityAuctionIsExtendedAgain" },
899
    { 0xFF, "NO_VALUE" },
900
    { 0, NULL }
901
};
902
static const value_string security_mass_trading_status_vals[] = { // SecurityMassTradingStatus
903
    { 2, "TradingHalt" },
904
    { 7, "MarketImbalanceBuy" },
905
    { 8, "MarketImbalanceSell" },
906
    { 200, "Closed" },
907
    { 201, "Restricted" },
908
    { 202, "Book" },
909
    { 203, "Continuous" },
910
    { 204, "OpeningAuction" },
911
    { 205, "OpeningAuctionFreeze" },
912
    { 206, "IntradayAuction" },
913
    { 207, "IntradayAuctionFreeze" },
914
    { 208, "CircuitBreakerAuction" },
915
    { 209, "CircuitBreakerAuctionFreeze" },
916
    { 210, "ClosingAuction" },
917
    { 211, "ClosingAuctionFreeze" },
918
    { 212, "IPOAuction" },
919
    { 213, "IPOAuctionFreeze" },
920
    { 214, "PreCall" },
921
    { 215, "Call" },
922
    { 216, "Freeze" },
923
    { 217, "TradeAtClose" },
924
    { 0xFF, "NO_VALUE" },
925
    { 0, NULL }
926
};
927
static value_string_ext security_mass_trading_status_vals_ext = VALUE_STRING_EXT_INIT(security_mass_trading_status_vals);
928
// SecurityStatus aliased by SecurityMassStatus
929
// SecurityTradingEvent aliased by SecurityMassTradingEvent
930
// SecurityTradingStatus aliased by SecurityMassTradingStatus
931
// Side aliased by AggressorSide
932
// SoldOutIndicator aliased by MassSoldOutIndicator
933
static const value_string trad_ses_status_vals[] = { // TradSesStatus
934
    { 1, "Halted" },
935
    { 2, "Open" },
936
    { 3, "Closed" },
937
    { 0xFF, "NO_VALUE" },
938
    { 0, NULL }
939
};
940
static const value_string trade_condition_vals[] = { // TradeCondition
941
    { 1, "ImpliedTrade" },
942
    { 107, "OutOfSequence" },
943
    { 155, "MidpointPrice" },
944
    { 156, "TradingOnTermsOfIssue" },
945
    { 596, "SpecialAuction" },
946
    { 624, "TradeAtClose" },
947
    { 0xFFFF, "NO_VALUE" },
948
    { 0, NULL }
949
};
950
static const value_string trading_session_id_vals[] = { // TradingSessionID
951
    { 1, "Day" },
952
    { 3, "Morning" },
953
    { 5, "Evening" },
954
    { 6, "AfterHours" },
955
    { 7, "Holiday" },
956
    { 0xFF, "NO_VALUE" },
957
    { 0, NULL }
958
};
959
static const value_string trading_session_sub_id_vals[] = { // TradingSessionSubID
960
    { 1, "PreTrading" },
961
    { 3, "Continuous" },
962
    { 4, "Closing" },
963
    { 5, "PostTrading" },
964
    { 7, "Quiescent" },
965
    { 0xFF, "NO_VALUE" },
966
    { 0, NULL }
967
};
968
969
enum ETI_Type {
970
    ETI_EOF,
971
    ETI_PADDING,
972
    ETI_UINT,
973
    ETI_INT,
974
    ETI_UINT_ENUM,
975
    ETI_INT_ENUM,
976
    ETI_COUNTER,
977
    ETI_FIXED_POINT,
978
    ETI_TIMESTAMP_NS,
979
    ETI_CHAR,
980
    ETI_STRING,
981
    ETI_VAR_STRING,
982
    ETI_STRUCT,
983
    ETI_VAR_STRUCT,
984
    ETI_DSCP
985
};
986
987
struct ETI_Field {
988
    uint8_t  type;
989
    uint8_t  counter_off;      // offset into counter array
990
                               // if ETI_COUNTER => storage
991
                               // if ETI_VAR_STRING or ETI_VAR_STRUCT => load
992
                               // to get length or repeat count
993
                               // if ETI_FIXED_POINT: #fractional digits
994
    uint16_t size;             // or offset into struct_names if ETI_STRUCT/ETI_VAR_STRUCT
995
    uint16_t field_handle_idx; // or index into fields array if ETI_STRUCT/ETI_VAR_STRUT
996
    uint16_t ett_idx;          // index into ett array if ETI_STRUCT/ETI_VAR_STRUCT
997
                               // or max value if ETI_COUNTER
998
};
999
1000
static int ett_eobi[7];
1001
static int ett_eobi_dscp;
1002
/* This method dissects fully reassembled messages */
1003
static int
1004
dissect_eobi_message(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
1005
0
{
1006
0
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "EOBI");
1007
0
    col_clear(pinfo->cinfo, COL_INFO);
1008
0
    uint16_t templateid = tvb_get_letohs(tvb, 2);
1009
0
    const char *template_str = val_to_str_ext(templateid, &template_id_vals_ext, "Unknown EOBI template: 0x%04x");
1010
0
    col_add_str(pinfo->cinfo, COL_INFO, template_str);
1011
1012
    /* create display subtree for the protocol */
1013
0
    proto_item *ti = proto_tree_add_item(tree, proto_eobi, tvb, 0, -1, ENC_NA);
1014
0
    uint32_t bodylen= tvb_get_letohs(tvb, 0);
1015
0
    proto_item_append_text(ti, ", %s (%" PRIu16 "), BodyLen: %u", template_str, templateid, bodylen);
1016
0
    proto_tree *root = proto_item_add_subtree(ti, ett_eobi[0]);
1017
1018
0
    static const char struct_names[] = "InstrmtLegGrp\0MDInstrumentEntryGrp\0MDTradeEntryGrp\0MessageHeader\0OrderDetails\0SecMassStatGrp";
1019
0
    static const struct ETI_Field fields[] = {
1020
        // InstrmtLegGrpComp@0
1021
0
          { ETI_INT, 0, 4, LEGSYMBOL_FH_IDX, 0 }
1022
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1023
0
        , { ETI_INT, 0, 8, LEGSECURITYID_FH_IDX, 0 }
1024
0
        , { ETI_FIXED_POINT, 8, 8, LEGPRICE_FH_IDX, 0 }
1025
0
        , { ETI_INT, 0, 4, LEGRATIOQTY_FH_IDX, 0 }
1026
0
        , { ETI_UINT_ENUM, 0, 1, LEGSECURITYTYPE_FH_IDX, 0 }
1027
0
        , { ETI_UINT_ENUM, 0, 1, LEGSIDE_FH_IDX, 0 }
1028
0
        , { ETI_PADDING, 0, 2, 0, 0 }
1029
0
        , { ETI_EOF, 0, 0, 0, 0 }
1030
        // MDInstrumentEntryGrpComp@9
1031
0
        , { ETI_FIXED_POINT, 8, 8, MDENTRYPX_FH_IDX, 0 }
1032
0
        , { ETI_FIXED_POINT, 4, 8, MDENTRYSIZE_FH_IDX, 0 }
1033
0
        , { ETI_UINT_ENUM, 0, 1, MDENTRYTYPE_FH_IDX, 0 }
1034
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1035
0
        , { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
1036
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1037
0
        , { ETI_EOF, 0, 0, 0, 0 }
1038
        // MDTradeEntryGrpComp@16
1039
0
        , { ETI_FIXED_POINT, 8, 8, MDENTRYPX_FH_IDX, 0 }
1040
0
        , { ETI_FIXED_POINT, 4, 8, MDENTRYSIZE_FH_IDX, 0 }
1041
0
        , { ETI_UINT_ENUM, 0, 1, MDENTRYTYPE_FH_IDX, 0 }
1042
0
        , { ETI_PADDING, 0, 7, 0, 0 }
1043
0
        , { ETI_EOF, 0, 0, 0, 0 }
1044
        // MessageHeaderComp@21
1045
0
        , { ETI_UINT, 0, 2, BODYLEN_FH_IDX, 0 }
1046
0
        , { ETI_UINT, 0, 2, TEMPLATEID_FH_IDX, 0 }
1047
0
        , { ETI_UINT, 0, 4, MSGSEQNUM_FH_IDX, 0 }
1048
0
        , { ETI_EOF, 0, 0, 0, 0 }
1049
        // OrderDetailsComp@25
1050
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
1051
0
        , { ETI_FIXED_POINT, 4, 8, DISPLAYQTY_FH_IDX, 0 }
1052
0
        , { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
1053
0
        , { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
1054
0
        , { ETI_PADDING, 0, 6, 0, 0 }
1055
0
        , { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
1056
0
        , { ETI_EOF, 0, 0, 0, 0 }
1057
        // SecMassStatGrpComp@32
1058
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1059
0
        , { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
1060
0
        , { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
1061
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
1062
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
1063
0
        , { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
1064
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
1065
0
        , { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
1066
0
        , { ETI_PADDING, 0, 3, 0, 0 }
1067
0
        , { ETI_EOF, 0, 0, 0, 0 }
1068
        // AddComplexInstrument@42
1069
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1070
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1071
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1072
0
        , { ETI_INT, 0, 4, SECURITYSUBTYPE_FH_IDX, 0 }
1073
0
        , { ETI_UINT_ENUM, 0, 1, PRODUCTCOMPLEX_FH_IDX, 0 }
1074
0
        , { ETI_UINT_ENUM, 0, 1, IMPLIEDMARKETINDICATOR_FH_IDX, 0 }
1075
0
        , { ETI_PADDING, 0, 2, 0, 0 }
1076
0
        , { ETI_UINT, 0, 4, LEGRATIOMULTIPLIER_FH_IDX, 0 }
1077
0
        , { ETI_COUNTER, 0, 1, NOLEGS_FH_IDX, 20 } // <- counter@0
1078
0
        , { ETI_PADDING, 0, 3, 0, 0 }
1079
0
        , { ETI_VAR_STRUCT, 0, 0, 0, 1 } // InstrmtLegGrp
1080
0
        , { ETI_EOF, 0, 0, 0, 0 }
1081
        // AuctionBBO@54
1082
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1083
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1084
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1085
0
        , { ETI_FIXED_POINT, 8, 8, BIDPX_FH_IDX, 0 }
1086
0
        , { ETI_FIXED_POINT, 8, 8, OFFERPX_FH_IDX, 0 }
1087
0
        , { ETI_FIXED_POINT, 4, 8, BIDSIZE_FH_IDX, 0 }
1088
0
        , { ETI_FIXED_POINT, 4, 8, OFFERSIZE_FH_IDX, 0 }
1089
0
        , { ETI_UINT_ENUM, 0, 1, POTENTIALSECURITYTRADINGEVENT_FH_IDX, 0 }
1090
0
        , { ETI_UINT_ENUM, 0, 1, BIDORDTYPE_FH_IDX, 0 }
1091
0
        , { ETI_UINT_ENUM, 0, 1, OFFERORDTYPE_FH_IDX, 0 }
1092
0
        , { ETI_PADDING, 0, 5, 0, 0 }
1093
0
        , { ETI_EOF, 0, 0, 0, 0 }
1094
        // AuctionClearingPrice@66
1095
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1096
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1097
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1098
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1099
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1100
0
        , { ETI_FIXED_POINT, 4, 8, IMBALANCEQTY_FH_IDX, 0 }
1101
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
1102
0
        , { ETI_UINT_ENUM, 0, 1, POTENTIALSECURITYTRADINGEVENT_FH_IDX, 0 }
1103
0
        , { ETI_PADDING, 0, 6, 0, 0 }
1104
0
        , { ETI_EOF, 0, 0, 0, 0 }
1105
        // CrossRequest@76
1106
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1107
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1108
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1109
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1110
0
        , { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
1111
0
        , { ETI_UINT_ENUM, 0, 1, CROSSREQUESTTYPE_FH_IDX, 0 }
1112
0
        , { ETI_UINT_ENUM, 0, 1, INPUTSOURCE_FH_IDX, 0 }
1113
0
        , { ETI_PADDING, 0, 5, 0, 0 }
1114
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1115
0
        , { ETI_EOF, 0, 0, 0, 0 }
1116
        // ExecutionSummary@86
1117
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1118
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1119
0
        , { ETI_TIMESTAMP_NS, 0, 8, AGGRESSORTIME_FH_IDX, 0 }
1120
0
        , { ETI_TIMESTAMP_NS, 0, 8, REQUESTTIME_FH_IDX, 0 }
1121
0
        , { ETI_TIMESTAMP_NS, 0, 8, EXECID_FH_IDX, 0 }
1122
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1123
0
        , { ETI_UINT_ENUM, 0, 1, AGGRESSORSIDE_FH_IDX, 0 }
1124
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1125
0
        , { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
1126
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1127
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1128
0
        , { ETI_FIXED_POINT, 4, 8, RESTINGHIDDENQTY_FH_IDX, 0 }
1129
0
        , { ETI_FIXED_POINT, 4, 8, RESTINGCXLQTY_FH_IDX, 0 }
1130
0
        , { ETI_EOF, 0, 0, 0, 0 }
1131
        // FullOrderExecution@100
1132
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1133
0
        , { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
1134
0
        , { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
1135
0
        , { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
1136
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1137
0
        , { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
1138
0
        , { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
1139
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
1140
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1141
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1142
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1143
0
        , { ETI_EOF, 0, 0, 0, 0 }
1144
        // Heartbeat@112
1145
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1146
0
        , { ETI_UINT, 0, 4, LASTMSGSEQNUMPROCESSED_FH_IDX, 0 }
1147
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1148
0
        , { ETI_EOF, 0, 0, 0, 0 }
1149
        // InstrumentStateChange@116
1150
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1151
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1152
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
1153
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
1154
0
        , { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
1155
0
        , { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
1156
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
1157
0
        , { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
1158
0
        , { ETI_PADDING, 0, 2, 0, 0 }
1159
0
        , { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
1160
0
        , { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
1161
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1162
0
        , { ETI_EOF, 0, 0, 0, 0 }
1163
        // InstrumentSummary@129
1164
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1165
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1166
0
        , { ETI_TIMESTAMP_NS, 0, 8, LASTUPDATETIME_FH_IDX, 0 }
1167
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSEXECUTIONTIME_FH_IDX, 0 }
1168
0
        , { ETI_COUNTER, 0, 2, TOTNOORDERS_FH_IDX, 65534 } // <- counter@0
1169
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYSTATUS_FH_IDX, 0 }
1170
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGSTATUS_FH_IDX, 0 }
1171
0
        , { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
1172
0
        , { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
1173
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYTRADINGEVENT_FH_IDX, 0 }
1174
0
        , { ETI_UINT_ENUM, 0, 1, SOLDOUTINDICATOR_FH_IDX, 0 }
1175
0
        , { ETI_FIXED_POINT, 8, 8, HIGHPX_FH_IDX, 0 }
1176
0
        , { ETI_FIXED_POINT, 8, 8, LOWPX_FH_IDX, 0 }
1177
0
        , { ETI_UINT_ENUM, 0, 1, PRODUCTCOMPLEX_FH_IDX, 0 }
1178
0
        , { ETI_COUNTER, 1, 1, NOMDENTRIES_FH_IDX, 15 } // <- counter@1
1179
0
        , { ETI_PADDING, 0, 6, 0, 0 }
1180
0
        , { ETI_VAR_STRUCT, 1, 14, 9, 2 } // MDInstrumentEntryGrp
1181
0
        , { ETI_EOF, 0, 0, 0, 0 }
1182
        // MassInstrumentStateChange@147
1183
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1184
0
        , { ETI_UINT_ENUM, 0, 1, INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX, 0 }
1185
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYMASSSTATUS_FH_IDX, 0 }
1186
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYMASSTRADINGSTATUS_FH_IDX, 0 }
1187
0
        , { ETI_UINT_ENUM, 0, 1, MASSMARKETCONDITION_FH_IDX, 0 }
1188
0
        , { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
1189
0
        , { ETI_UINT_ENUM, 0, 1, SECURITYMASSTRADINGEVENT_FH_IDX, 0 }
1190
0
        , { ETI_UINT_ENUM, 0, 1, MASSSOLDOUTINDICATOR_FH_IDX, 0 }
1191
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1192
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1193
0
        , { ETI_UINT_ENUM, 0, 1, LASTFRAGMENT_FH_IDX, 0 }
1194
0
        , { ETI_COUNTER, 0, 1, NORELATEDSYM_FH_IDX, 24 } // <- counter@0
1195
0
        , { ETI_PADDING, 0, 6, 0, 0 }
1196
0
        , { ETI_VAR_STRUCT, 0, 78, 32, 6 } // SecMassStatGrp
1197
0
        , { ETI_EOF, 0, 0, 0, 0 }
1198
        // OrderAdd@162
1199
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1200
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
1201
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1202
0
        , { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
1203
0
        , { ETI_EOF, 0, 0, 0, 0 }
1204
        // OrderDelete@167
1205
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1206
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
1207
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1208
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1209
0
        , { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
1210
0
        , { ETI_EOF, 0, 0, 0, 0 }
1211
        // OrderMassDelete@173
1212
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1213
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1214
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1215
0
        , { ETI_EOF, 0, 0, 0, 0 }
1216
        // OrderModify@177
1217
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1218
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
1219
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSPREVTIMEPRIORITY_FH_IDX, 0 }
1220
0
        , { ETI_FIXED_POINT, 8, 8, PREVPRICE_FH_IDX, 0 }
1221
0
        , { ETI_FIXED_POINT, 4, 8, PREVDISPLAYQTY_FH_IDX, 0 }
1222
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1223
0
        , { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
1224
0
        , { ETI_EOF, 0, 0, 0, 0 }
1225
        // OrderModifySamePrio@185
1226
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1227
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEIN_FH_IDX, 0 }
1228
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1229
0
        , { ETI_FIXED_POINT, 4, 8, PREVDISPLAYQTY_FH_IDX, 0 }
1230
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1231
0
        , { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
1232
0
        , { ETI_EOF, 0, 0, 0, 0 }
1233
        // PacketHeader@192
1234
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1235
0
        , { ETI_UINT, 0, 4, APPLSEQNUM_FH_IDX, 0 }
1236
0
        , { ETI_INT, 0, 4, MARKETSEGMENTID_FH_IDX, 0 }
1237
0
        , { ETI_UINT, 0, 1, PARTITIONID_FH_IDX, 0 }
1238
0
        , { ETI_UINT_ENUM, 0, 1, COMPLETIONINDICATOR_FH_IDX, 0 }
1239
0
        , { ETI_UINT_ENUM, 0, 1, APPLSEQRESETINDICATOR_FH_IDX, 0 }
1240
0
        , { ETI_DSCP, 0, 1, DSCP_FH_IDX, 0 }
1241
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1242
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1243
0
        , { ETI_EOF, 0, 0, 0, 0 }
1244
        // PartialOrderExecution@202
1245
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1246
0
        , { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
1247
0
        , { ETI_UINT_ENUM, 0, 1, ORDTYPE_FH_IDX, 0 }
1248
0
        , { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
1249
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1250
0
        , { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
1251
0
        , { ETI_FIXED_POINT, 8, 8, PRICE_FH_IDX, 0 }
1252
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSTIMEPRIORITY_FH_IDX, 0 }
1253
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1254
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1255
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1256
0
        , { ETI_EOF, 0, 0, 0, 0 }
1257
        // ProductStateChange@214
1258
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1259
0
        , { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONID_FH_IDX, 0 }
1260
0
        , { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONSUBID_FH_IDX, 0 }
1261
0
        , { ETI_UINT_ENUM, 0, 1, TRADSESSTATUS_FH_IDX, 0 }
1262
0
        , { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
1263
0
        , { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
1264
0
        , { ETI_PADDING, 0, 3, 0, 0 }
1265
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1266
0
        , { ETI_EOF, 0, 0, 0, 0 }
1267
        // ProductSummary@223
1268
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1269
0
        , { ETI_UINT, 0, 4, LASTMSGSEQNUMPROCESSED_FH_IDX, 0 }
1270
0
        , { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONID_FH_IDX, 0 }
1271
0
        , { ETI_UINT_ENUM, 0, 1, TRADINGSESSIONSUBID_FH_IDX, 0 }
1272
0
        , { ETI_UINT_ENUM, 0, 1, TRADSESSTATUS_FH_IDX, 0 }
1273
0
        , { ETI_UINT_ENUM, 0, 1, MARKETCONDITION_FH_IDX, 0 }
1274
0
        , { ETI_UINT_ENUM, 0, 1, FASTMARKETINDICATOR_FH_IDX, 0 }
1275
0
        , { ETI_PADDING, 0, 7, 0, 0 }
1276
0
        , { ETI_EOF, 0, 0, 0, 0 }
1277
        // QuoteRequest@232
1278
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1279
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1280
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1281
0
        , { ETI_UINT_ENUM, 0, 1, SIDE_FH_IDX, 0 }
1282
0
        , { ETI_PADDING, 0, 7, 0, 0 }
1283
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1284
0
        , { ETI_EOF, 0, 0, 0, 0 }
1285
        // SnapshotOrder@239
1286
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1287
0
        , { ETI_STRUCT, 0, 65, 25, 5 } // OrderDetails
1288
0
        , { ETI_EOF, 0, 0, 0, 0 }
1289
        // TopOfBook@242
1290
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1291
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1292
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1293
0
        , { ETI_FIXED_POINT, 8, 8, BIDPX_FH_IDX, 0 }
1294
0
        , { ETI_FIXED_POINT, 8, 8, OFFERPX_FH_IDX, 0 }
1295
0
        , { ETI_FIXED_POINT, 4, 8, BIDSIZE_FH_IDX, 0 }
1296
0
        , { ETI_FIXED_POINT, 4, 8, OFFERSIZE_FH_IDX, 0 }
1297
0
        , { ETI_UINT, 0, 2, NUMBEROFBUYORDERS_FH_IDX, 0 }
1298
0
        , { ETI_UINT, 0, 2, NUMBEROFSELLORDERS_FH_IDX, 0 }
1299
0
        , { ETI_PADDING, 0, 4, 0, 0 }
1300
0
        , { ETI_EOF, 0, 0, 0, 0 }
1301
        // TradeReport@253
1302
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1303
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1304
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1305
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1306
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1307
0
        , { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
1308
0
        , { ETI_UINT_ENUM, 0, 1, MATCHTYPE_FH_IDX, 0 }
1309
0
        , { ETI_UINT_ENUM, 0, 1, MATCHSUBTYPE_FH_IDX, 0 }
1310
0
        , { ETI_UINT_ENUM, 0, 1, ALGORITHMICTRADEINDICATOR_FH_IDX, 0 }
1311
0
        , { ETI_PADDING, 0, 1, 0, 0 }
1312
0
        , { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
1313
0
        , { ETI_PADDING, 0, 6, 0, 0 }
1314
0
        , { ETI_EOF, 0, 0, 0, 0 }
1315
        // TradeReversal@266
1316
0
        , { ETI_STRUCT, 0, 51, 21, 4 } // MessageHeader
1317
0
        , { ETI_INT, 0, 8, SECURITYID_FH_IDX, 0 }
1318
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRANSACTTIME_FH_IDX, 0 }
1319
0
        , { ETI_FIXED_POINT, 4, 8, LASTQTY_FH_IDX, 0 }
1320
0
        , { ETI_FIXED_POINT, 8, 8, LASTPX_FH_IDX, 0 }
1321
0
        , { ETI_TIMESTAMP_NS, 0, 8, TRDREGTSEXECUTIONTIME_FH_IDX, 0 }
1322
0
        , { ETI_UINT, 0, 4, TRDMATCHID_FH_IDX, 0 }
1323
0
        , { ETI_UINT_ENUM, 0, 2, TRADECONDITION_FH_IDX, 0 }
1324
0
        , { ETI_PADDING, 0, 2, 0, 0 }
1325
0
        , { ETI_COUNTER, 0, 1, NOMDENTRIES_FH_IDX, 15 } // <- counter@0
1326
0
        , { ETI_PADDING, 0, 7, 0, 0 }
1327
0
        , { ETI_VAR_STRUCT, 0, 35, 16, 3 } // MDTradeEntryGrp
1328
0
        , { ETI_EOF, 0, 0, 0, 0 }
1329
0
    };
1330
0
    static const int16_t tid2fidx[] = {
1331
0
          112 /* Heartbeat */
1332
0
        , -1
1333
0
        , -1
1334
0
        , -1
1335
0
        , 192 /* PacketHeader */
1336
0
        , -1
1337
0
        , -1
1338
0
        , -1
1339
0
        , -1
1340
0
        , -1
1341
0
        , -1
1342
0
        , -1
1343
0
        , -1
1344
0
        , -1
1345
0
        , -1
1346
0
        , -1
1347
0
        , -1
1348
0
        , -1
1349
0
        , -1
1350
0
        , -1
1351
0
        , -1
1352
0
        , -1
1353
0
        , -1
1354
0
        , -1
1355
0
        , -1
1356
0
        , -1
1357
0
        , -1
1358
0
        , -1
1359
0
        , -1
1360
0
        , -1
1361
0
        , -1
1362
0
        , -1
1363
0
        , -1
1364
0
        , -1
1365
0
        , -1
1366
0
        , -1
1367
0
        , -1
1368
0
        , -1
1369
0
        , -1
1370
0
        , -1
1371
0
        , -1
1372
0
        , -1
1373
0
        , -1
1374
0
        , -1
1375
0
        , -1
1376
0
        , -1
1377
0
        , -1
1378
0
        , -1
1379
0
        , -1
1380
0
        , -1
1381
0
        , -1
1382
0
        , -1
1383
0
        , -1
1384
0
        , -1
1385
0
        , -1
1386
0
        , -1
1387
0
        , -1
1388
0
        , -1
1389
0
        , -1
1390
0
        , -1
1391
0
        , -1
1392
0
        , -1
1393
0
        , -1
1394
0
        , -1
1395
0
        , -1
1396
0
        , -1
1397
0
        , -1
1398
0
        , -1
1399
0
        , -1
1400
0
        , -1
1401
0
        , -1
1402
0
        , -1
1403
0
        , -1
1404
0
        , -1
1405
0
        , -1
1406
0
        , -1
1407
0
        , -1
1408
0
        , -1
1409
0
        , -1
1410
0
        , -1
1411
0
        , -1
1412
0
        , -1
1413
0
        , -1
1414
0
        , -1
1415
0
        , -1
1416
0
        , -1
1417
0
        , -1
1418
0
        , -1
1419
0
        , -1
1420
0
        , -1
1421
0
        , -1
1422
0
        , -1
1423
0
        , -1
1424
0
        , -1
1425
0
        , -1
1426
0
        , -1
1427
0
        , -1
1428
0
        , -1
1429
0
        , -1
1430
0
        , 162 /* OrderAdd */
1431
0
        , 177 /* OrderModify */
1432
0
        , 167 /* OrderDelete */
1433
0
        , 173 /* OrderMassDelete */
1434
0
        , 100 /* FullOrderExecution */
1435
0
        , 202 /* PartialOrderExecution */
1436
0
        , 185 /* OrderModifySamePrio */
1437
0
        , -1
1438
0
        , -1
1439
0
        , -1
1440
0
        , -1
1441
0
        , -1
1442
0
        , -1
1443
0
        , -1
1444
0
        , -1
1445
0
        , -1
1446
0
        , -1
1447
0
        , -1
1448
0
        , -1
1449
0
        , -1
1450
0
        , -1
1451
0
        , -1
1452
0
        , -1
1453
0
        , -1
1454
0
        , -1
1455
0
        , -1
1456
0
        , -1
1457
0
        , -1
1458
0
        , -1
1459
0
        , -1
1460
0
        , -1
1461
0
        , -1
1462
0
        , -1
1463
0
        , -1
1464
0
        , -1
1465
0
        , -1
1466
0
        , -1
1467
0
        , -1
1468
0
        , -1
1469
0
        , -1
1470
0
        , -1
1471
0
        , -1
1472
0
        , -1
1473
0
        , -1
1474
0
        , -1
1475
0
        , -1
1476
0
        , -1
1477
0
        , -1
1478
0
        , -1
1479
0
        , -1
1480
0
        , -1
1481
0
        , -1
1482
0
        , -1
1483
0
        , -1
1484
0
        , -1
1485
0
        , -1
1486
0
        , -1
1487
0
        , -1
1488
0
        , -1
1489
0
        , -1
1490
0
        , -1
1491
0
        , -1
1492
0
        , -1
1493
0
        , -1
1494
0
        , -1
1495
0
        , -1
1496
0
        , -1
1497
0
        , -1
1498
0
        , -1
1499
0
        , -1
1500
0
        , -1
1501
0
        , -1
1502
0
        , -1
1503
0
        , -1
1504
0
        , -1
1505
0
        , -1
1506
0
        , -1
1507
0
        , -1
1508
0
        , -1
1509
0
        , -1
1510
0
        , -1
1511
0
        , -1
1512
0
        , -1
1513
0
        , -1
1514
0
        , -1
1515
0
        , -1
1516
0
        , -1
1517
0
        , -1
1518
0
        , -1
1519
0
        , -1
1520
0
        , -1
1521
0
        , -1
1522
0
        , -1
1523
0
        , -1
1524
0
        , -1
1525
0
        , -1
1526
0
        , -1
1527
0
        , -1
1528
0
        , -1
1529
0
        , -1
1530
0
        , 266 /* TradeReversal */
1531
0
        , 253 /* TradeReport */
1532
0
        , 86 /* ExecutionSummary */
1533
0
        , -1
1534
0
        , -1
1535
0
        , -1
1536
0
        , -1
1537
0
        , -1
1538
0
        , -1
1539
0
        , -1
1540
0
        , -1
1541
0
        , -1
1542
0
        , -1
1543
0
        , -1
1544
0
        , -1
1545
0
        , -1
1546
0
        , -1
1547
0
        , -1
1548
0
        , -1
1549
0
        , -1
1550
0
        , -1
1551
0
        , -1
1552
0
        , -1
1553
0
        , -1
1554
0
        , -1
1555
0
        , -1
1556
0
        , -1
1557
0
        , -1
1558
0
        , -1
1559
0
        , -1
1560
0
        , -1
1561
0
        , -1
1562
0
        , -1
1563
0
        , -1
1564
0
        , -1
1565
0
        , -1
1566
0
        , -1
1567
0
        , -1
1568
0
        , -1
1569
0
        , -1
1570
0
        , -1
1571
0
        , -1
1572
0
        , -1
1573
0
        , -1
1574
0
        , -1
1575
0
        , -1
1576
0
        , -1
1577
0
        , -1
1578
0
        , -1
1579
0
        , -1
1580
0
        , -1
1581
0
        , -1
1582
0
        , -1
1583
0
        , -1
1584
0
        , -1
1585
0
        , -1
1586
0
        , -1
1587
0
        , -1
1588
0
        , -1
1589
0
        , -1
1590
0
        , -1
1591
0
        , -1
1592
0
        , -1
1593
0
        , -1
1594
0
        , -1
1595
0
        , -1
1596
0
        , -1
1597
0
        , -1
1598
0
        , -1
1599
0
        , -1
1600
0
        , -1
1601
0
        , -1
1602
0
        , -1
1603
0
        , -1
1604
0
        , -1
1605
0
        , -1
1606
0
        , -1
1607
0
        , -1
1608
0
        , -1
1609
0
        , -1
1610
0
        , -1
1611
0
        , -1
1612
0
        , -1
1613
0
        , -1
1614
0
        , -1
1615
0
        , -1
1616
0
        , -1
1617
0
        , -1
1618
0
        , -1
1619
0
        , -1
1620
0
        , -1
1621
0
        , -1
1622
0
        , -1
1623
0
        , -1
1624
0
        , -1
1625
0
        , -1
1626
0
        , -1
1627
0
        , -1
1628
0
        , -1
1629
0
        , -1
1630
0
        , 214 /* ProductStateChange */
1631
0
        , 116 /* InstrumentStateChange */
1632
0
        , 147 /* MassInstrumentStateChange */
1633
0
        , -1
1634
0
        , -1
1635
0
        , -1
1636
0
        , -1
1637
0
        , -1
1638
0
        , -1
1639
0
        , -1
1640
0
        , -1
1641
0
        , -1
1642
0
        , -1
1643
0
        , -1
1644
0
        , -1
1645
0
        , -1
1646
0
        , -1
1647
0
        , -1
1648
0
        , -1
1649
0
        , -1
1650
0
        , -1
1651
0
        , -1
1652
0
        , -1
1653
0
        , -1
1654
0
        , -1
1655
0
        , -1
1656
0
        , -1
1657
0
        , -1
1658
0
        , -1
1659
0
        , -1
1660
0
        , -1
1661
0
        , -1
1662
0
        , -1
1663
0
        , -1
1664
0
        , -1
1665
0
        , -1
1666
0
        , -1
1667
0
        , -1
1668
0
        , -1
1669
0
        , -1
1670
0
        , -1
1671
0
        , -1
1672
0
        , -1
1673
0
        , -1
1674
0
        , -1
1675
0
        , -1
1676
0
        , -1
1677
0
        , -1
1678
0
        , -1
1679
0
        , -1
1680
0
        , -1
1681
0
        , -1
1682
0
        , -1
1683
0
        , -1
1684
0
        , -1
1685
0
        , -1
1686
0
        , -1
1687
0
        , -1
1688
0
        , -1
1689
0
        , -1
1690
0
        , -1
1691
0
        , -1
1692
0
        , -1
1693
0
        , -1
1694
0
        , -1
1695
0
        , -1
1696
0
        , -1
1697
0
        , -1
1698
0
        , -1
1699
0
        , -1
1700
0
        , -1
1701
0
        , -1
1702
0
        , -1
1703
0
        , -1
1704
0
        , -1
1705
0
        , -1
1706
0
        , -1
1707
0
        , -1
1708
0
        , -1
1709
0
        , -1
1710
0
        , -1
1711
0
        , -1
1712
0
        , -1
1713
0
        , -1
1714
0
        , -1
1715
0
        , -1
1716
0
        , -1
1717
0
        , -1
1718
0
        , -1
1719
0
        , -1
1720
0
        , -1
1721
0
        , -1
1722
0
        , -1
1723
0
        , -1
1724
0
        , -1
1725
0
        , -1
1726
0
        , -1
1727
0
        , -1
1728
0
        , -1
1729
0
        , -1
1730
0
        , 42 /* AddComplexInstrument */
1731
0
        , -1
1732
0
        , -1
1733
0
        , -1
1734
0
        , -1
1735
0
        , -1
1736
0
        , -1
1737
0
        , -1
1738
0
        , -1
1739
0
        , -1
1740
0
        , -1
1741
0
        , -1
1742
0
        , -1
1743
0
        , -1
1744
0
        , -1
1745
0
        , -1
1746
0
        , -1
1747
0
        , -1
1748
0
        , -1
1749
0
        , -1
1750
0
        , -1
1751
0
        , -1
1752
0
        , -1
1753
0
        , -1
1754
0
        , -1
1755
0
        , -1
1756
0
        , -1
1757
0
        , -1
1758
0
        , -1
1759
0
        , -1
1760
0
        , -1
1761
0
        , -1
1762
0
        , -1
1763
0
        , -1
1764
0
        , -1
1765
0
        , -1
1766
0
        , -1
1767
0
        , -1
1768
0
        , -1
1769
0
        , -1
1770
0
        , -1
1771
0
        , -1
1772
0
        , -1
1773
0
        , -1
1774
0
        , -1
1775
0
        , -1
1776
0
        , -1
1777
0
        , -1
1778
0
        , -1
1779
0
        , -1
1780
0
        , -1
1781
0
        , -1
1782
0
        , -1
1783
0
        , -1
1784
0
        , -1
1785
0
        , -1
1786
0
        , -1
1787
0
        , -1
1788
0
        , -1
1789
0
        , -1
1790
0
        , -1
1791
0
        , -1
1792
0
        , -1
1793
0
        , -1
1794
0
        , -1
1795
0
        , -1
1796
0
        , -1
1797
0
        , -1
1798
0
        , -1
1799
0
        , -1
1800
0
        , -1
1801
0
        , -1
1802
0
        , -1
1803
0
        , -1
1804
0
        , -1
1805
0
        , -1
1806
0
        , -1
1807
0
        , -1
1808
0
        , -1
1809
0
        , -1
1810
0
        , -1
1811
0
        , -1
1812
0
        , -1
1813
0
        , -1
1814
0
        , -1
1815
0
        , -1
1816
0
        , -1
1817
0
        , -1
1818
0
        , -1
1819
0
        , -1
1820
0
        , -1
1821
0
        , -1
1822
0
        , -1
1823
0
        , -1
1824
0
        , -1
1825
0
        , -1
1826
0
        , -1
1827
0
        , -1
1828
0
        , -1
1829
0
        , -1
1830
0
        , 54 /* AuctionBBO */
1831
0
        , 66 /* AuctionClearingPrice */
1832
0
        , 76 /* CrossRequest */
1833
0
        , 232 /* QuoteRequest */
1834
0
        , 242 /* TopOfBook */
1835
0
        , -1
1836
0
        , -1
1837
0
        , -1
1838
0
        , -1
1839
0
        , -1
1840
0
        , -1
1841
0
        , -1
1842
0
        , -1
1843
0
        , -1
1844
0
        , -1
1845
0
        , -1
1846
0
        , -1
1847
0
        , -1
1848
0
        , -1
1849
0
        , -1
1850
0
        , -1
1851
0
        , -1
1852
0
        , -1
1853
0
        , -1
1854
0
        , -1
1855
0
        , -1
1856
0
        , -1
1857
0
        , -1
1858
0
        , -1
1859
0
        , -1
1860
0
        , -1
1861
0
        , -1
1862
0
        , -1
1863
0
        , -1
1864
0
        , -1
1865
0
        , -1
1866
0
        , -1
1867
0
        , -1
1868
0
        , -1
1869
0
        , -1
1870
0
        , -1
1871
0
        , -1
1872
0
        , -1
1873
0
        , -1
1874
0
        , -1
1875
0
        , -1
1876
0
        , -1
1877
0
        , -1
1878
0
        , -1
1879
0
        , -1
1880
0
        , -1
1881
0
        , -1
1882
0
        , -1
1883
0
        , -1
1884
0
        , -1
1885
0
        , -1
1886
0
        , -1
1887
0
        , -1
1888
0
        , -1
1889
0
        , -1
1890
0
        , -1
1891
0
        , -1
1892
0
        , -1
1893
0
        , -1
1894
0
        , -1
1895
0
        , -1
1896
0
        , -1
1897
0
        , -1
1898
0
        , -1
1899
0
        , -1
1900
0
        , -1
1901
0
        , -1
1902
0
        , -1
1903
0
        , -1
1904
0
        , -1
1905
0
        , -1
1906
0
        , -1
1907
0
        , -1
1908
0
        , -1
1909
0
        , -1
1910
0
        , -1
1911
0
        , -1
1912
0
        , -1
1913
0
        , -1
1914
0
        , -1
1915
0
        , -1
1916
0
        , -1
1917
0
        , -1
1918
0
        , -1
1919
0
        , -1
1920
0
        , -1
1921
0
        , -1
1922
0
        , -1
1923
0
        , -1
1924
0
        , -1
1925
0
        , -1
1926
0
        , -1
1927
0
        , -1
1928
0
        , -1
1929
0
        , -1
1930
0
        , 223 /* ProductSummary */
1931
0
        , 129 /* InstrumentSummary */
1932
0
        , 239 /* SnapshotOrder */
1933
0
    };
1934
0
    static const uint32_t tid2size[] = {
1935
0
          16 /* Heartbeat */
1936
0
        , 0
1937
0
        , 0
1938
0
        , 0
1939
0
        , 32 /* PacketHeader */
1940
0
        , 0
1941
0
        , 0
1942
0
        , 0
1943
0
        , 0
1944
0
        , 0
1945
0
        , 0
1946
0
        , 0
1947
0
        , 0
1948
0
        , 0
1949
0
        , 0
1950
0
        , 0
1951
0
        , 0
1952
0
        , 0
1953
0
        , 0
1954
0
        , 0
1955
0
        , 0
1956
0
        , 0
1957
0
        , 0
1958
0
        , 0
1959
0
        , 0
1960
0
        , 0
1961
0
        , 0
1962
0
        , 0
1963
0
        , 0
1964
0
        , 0
1965
0
        , 0
1966
0
        , 0
1967
0
        , 0
1968
0
        , 0
1969
0
        , 0
1970
0
        , 0
1971
0
        , 0
1972
0
        , 0
1973
0
        , 0
1974
0
        , 0
1975
0
        , 0
1976
0
        , 0
1977
0
        , 0
1978
0
        , 0
1979
0
        , 0
1980
0
        , 0
1981
0
        , 0
1982
0
        , 0
1983
0
        , 0
1984
0
        , 0
1985
0
        , 0
1986
0
        , 0
1987
0
        , 0
1988
0
        , 0
1989
0
        , 0
1990
0
        , 0
1991
0
        , 0
1992
0
        , 0
1993
0
        , 0
1994
0
        , 0
1995
0
        , 0
1996
0
        , 0
1997
0
        , 0
1998
0
        , 0
1999
0
        , 0
2000
0
        , 0
2001
0
        , 0
2002
0
        , 0
2003
0
        , 0
2004
0
        , 0
2005
0
        , 0
2006
0
        , 0
2007
0
        , 0
2008
0
        , 0
2009
0
        , 0
2010
0
        , 0
2011
0
        , 0
2012
0
        , 0
2013
0
        , 0
2014
0
        , 0
2015
0
        , 0
2016
0
        , 0
2017
0
        , 0
2018
0
        , 0
2019
0
        , 0
2020
0
        , 0
2021
0
        , 0
2022
0
        , 0
2023
0
        , 0
2024
0
        , 0
2025
0
        , 0
2026
0
        , 0
2027
0
        , 0
2028
0
        , 0
2029
0
        , 0
2030
0
        , 0
2031
0
        , 0
2032
0
        , 0
2033
0
        , 0
2034
0
        , 56 /* OrderAdd */
2035
0
        , 80 /* OrderModify */
2036
0
        , 64 /* OrderDelete */
2037
0
        , 24 /* OrderMassDelete */
2038
0
        , 56 /* FullOrderExecution */
2039
0
        , 56 /* PartialOrderExecution */
2040
0
        , 72 /* OrderModifySamePrio */
2041
0
        , 0
2042
0
        , 0
2043
0
        , 0
2044
0
        , 0
2045
0
        , 0
2046
0
        , 0
2047
0
        , 0
2048
0
        , 0
2049
0
        , 0
2050
0
        , 0
2051
0
        , 0
2052
0
        , 0
2053
0
        , 0
2054
0
        , 0
2055
0
        , 0
2056
0
        , 0
2057
0
        , 0
2058
0
        , 0
2059
0
        , 0
2060
0
        , 0
2061
0
        , 0
2062
0
        , 0
2063
0
        , 0
2064
0
        , 0
2065
0
        , 0
2066
0
        , 0
2067
0
        , 0
2068
0
        , 0
2069
0
        , 0
2070
0
        , 0
2071
0
        , 0
2072
0
        , 0
2073
0
        , 0
2074
0
        , 0
2075
0
        , 0
2076
0
        , 0
2077
0
        , 0
2078
0
        , 0
2079
0
        , 0
2080
0
        , 0
2081
0
        , 0
2082
0
        , 0
2083
0
        , 0
2084
0
        , 0
2085
0
        , 0
2086
0
        , 0
2087
0
        , 0
2088
0
        , 0
2089
0
        , 0
2090
0
        , 0
2091
0
        , 0
2092
0
        , 0
2093
0
        , 0
2094
0
        , 0
2095
0
        , 0
2096
0
        , 0
2097
0
        , 0
2098
0
        , 0
2099
0
        , 0
2100
0
        , 0
2101
0
        , 0
2102
0
        , 0
2103
0
        , 0
2104
0
        , 0
2105
0
        , 0
2106
0
        , 0
2107
0
        , 0
2108
0
        , 0
2109
0
        , 0
2110
0
        , 0
2111
0
        , 0
2112
0
        , 0
2113
0
        , 0
2114
0
        , 0
2115
0
        , 0
2116
0
        , 0
2117
0
        , 0
2118
0
        , 0
2119
0
        , 0
2120
0
        , 0
2121
0
        , 0
2122
0
        , 0
2123
0
        , 0
2124
0
        , 0
2125
0
        , 0
2126
0
        , 0
2127
0
        , 0
2128
0
        , 0
2129
0
        , 0
2130
0
        , 0
2131
0
        , 0
2132
0
        , 0
2133
0
        , 0
2134
0
        , 424 /* TradeReversal */
2135
0
        , 56 /* TradeReport */
2136
0
        , 80 /* ExecutionSummary */
2137
0
        , 0
2138
0
        , 0
2139
0
        , 0
2140
0
        , 0
2141
0
        , 0
2142
0
        , 0
2143
0
        , 0
2144
0
        , 0
2145
0
        , 0
2146
0
        , 0
2147
0
        , 0
2148
0
        , 0
2149
0
        , 0
2150
0
        , 0
2151
0
        , 0
2152
0
        , 0
2153
0
        , 0
2154
0
        , 0
2155
0
        , 0
2156
0
        , 0
2157
0
        , 0
2158
0
        , 0
2159
0
        , 0
2160
0
        , 0
2161
0
        , 0
2162
0
        , 0
2163
0
        , 0
2164
0
        , 0
2165
0
        , 0
2166
0
        , 0
2167
0
        , 0
2168
0
        , 0
2169
0
        , 0
2170
0
        , 0
2171
0
        , 0
2172
0
        , 0
2173
0
        , 0
2174
0
        , 0
2175
0
        , 0
2176
0
        , 0
2177
0
        , 0
2178
0
        , 0
2179
0
        , 0
2180
0
        , 0
2181
0
        , 0
2182
0
        , 0
2183
0
        , 0
2184
0
        , 0
2185
0
        , 0
2186
0
        , 0
2187
0
        , 0
2188
0
        , 0
2189
0
        , 0
2190
0
        , 0
2191
0
        , 0
2192
0
        , 0
2193
0
        , 0
2194
0
        , 0
2195
0
        , 0
2196
0
        , 0
2197
0
        , 0
2198
0
        , 0
2199
0
        , 0
2200
0
        , 0
2201
0
        , 0
2202
0
        , 0
2203
0
        , 0
2204
0
        , 0
2205
0
        , 0
2206
0
        , 0
2207
0
        , 0
2208
0
        , 0
2209
0
        , 0
2210
0
        , 0
2211
0
        , 0
2212
0
        , 0
2213
0
        , 0
2214
0
        , 0
2215
0
        , 0
2216
0
        , 0
2217
0
        , 0
2218
0
        , 0
2219
0
        , 0
2220
0
        , 0
2221
0
        , 0
2222
0
        , 0
2223
0
        , 0
2224
0
        , 0
2225
0
        , 0
2226
0
        , 0
2227
0
        , 0
2228
0
        , 0
2229
0
        , 0
2230
0
        , 0
2231
0
        , 0
2232
0
        , 0
2233
0
        , 0
2234
0
        , 24 /* ProductStateChange */
2235
0
        , 48 /* InstrumentStateChange */
2236
0
        , 800 /* MassInstrumentStateChange */
2237
0
        , 0
2238
0
        , 0
2239
0
        , 0
2240
0
        , 0
2241
0
        , 0
2242
0
        , 0
2243
0
        , 0
2244
0
        , 0
2245
0
        , 0
2246
0
        , 0
2247
0
        , 0
2248
0
        , 0
2249
0
        , 0
2250
0
        , 0
2251
0
        , 0
2252
0
        , 0
2253
0
        , 0
2254
0
        , 0
2255
0
        , 0
2256
0
        , 0
2257
0
        , 0
2258
0
        , 0
2259
0
        , 0
2260
0
        , 0
2261
0
        , 0
2262
0
        , 0
2263
0
        , 0
2264
0
        , 0
2265
0
        , 0
2266
0
        , 0
2267
0
        , 0
2268
0
        , 0
2269
0
        , 0
2270
0
        , 0
2271
0
        , 0
2272
0
        , 0
2273
0
        , 0
2274
0
        , 0
2275
0
        , 0
2276
0
        , 0
2277
0
        , 0
2278
0
        , 0
2279
0
        , 0
2280
0
        , 0
2281
0
        , 0
2282
0
        , 0
2283
0
        , 0
2284
0
        , 0
2285
0
        , 0
2286
0
        , 0
2287
0
        , 0
2288
0
        , 0
2289
0
        , 0
2290
0
        , 0
2291
0
        , 0
2292
0
        , 0
2293
0
        , 0
2294
0
        , 0
2295
0
        , 0
2296
0
        , 0
2297
0
        , 0
2298
0
        , 0
2299
0
        , 0
2300
0
        , 0
2301
0
        , 0
2302
0
        , 0
2303
0
        , 0
2304
0
        , 0
2305
0
        , 0
2306
0
        , 0
2307
0
        , 0
2308
0
        , 0
2309
0
        , 0
2310
0
        , 0
2311
0
        , 0
2312
0
        , 0
2313
0
        , 0
2314
0
        , 0
2315
0
        , 0
2316
0
        , 0
2317
0
        , 0
2318
0
        , 0
2319
0
        , 0
2320
0
        , 0
2321
0
        , 0
2322
0
        , 0
2323
0
        , 0
2324
0
        , 0
2325
0
        , 0
2326
0
        , 0
2327
0
        , 0
2328
0
        , 0
2329
0
        , 0
2330
0
        , 0
2331
0
        , 0
2332
0
        , 0
2333
0
        , 0
2334
0
        , 680 /* AddComplexInstrument */
2335
0
        , 0
2336
0
        , 0
2337
0
        , 0
2338
0
        , 0
2339
0
        , 0
2340
0
        , 0
2341
0
        , 0
2342
0
        , 0
2343
0
        , 0
2344
0
        , 0
2345
0
        , 0
2346
0
        , 0
2347
0
        , 0
2348
0
        , 0
2349
0
        , 0
2350
0
        , 0
2351
0
        , 0
2352
0
        , 0
2353
0
        , 0
2354
0
        , 0
2355
0
        , 0
2356
0
        , 0
2357
0
        , 0
2358
0
        , 0
2359
0
        , 0
2360
0
        , 0
2361
0
        , 0
2362
0
        , 0
2363
0
        , 0
2364
0
        , 0
2365
0
        , 0
2366
0
        , 0
2367
0
        , 0
2368
0
        , 0
2369
0
        , 0
2370
0
        , 0
2371
0
        , 0
2372
0
        , 0
2373
0
        , 0
2374
0
        , 0
2375
0
        , 0
2376
0
        , 0
2377
0
        , 0
2378
0
        , 0
2379
0
        , 0
2380
0
        , 0
2381
0
        , 0
2382
0
        , 0
2383
0
        , 0
2384
0
        , 0
2385
0
        , 0
2386
0
        , 0
2387
0
        , 0
2388
0
        , 0
2389
0
        , 0
2390
0
        , 0
2391
0
        , 0
2392
0
        , 0
2393
0
        , 0
2394
0
        , 0
2395
0
        , 0
2396
0
        , 0
2397
0
        , 0
2398
0
        , 0
2399
0
        , 0
2400
0
        , 0
2401
0
        , 0
2402
0
        , 0
2403
0
        , 0
2404
0
        , 0
2405
0
        , 0
2406
0
        , 0
2407
0
        , 0
2408
0
        , 0
2409
0
        , 0
2410
0
        , 0
2411
0
        , 0
2412
0
        , 0
2413
0
        , 0
2414
0
        , 0
2415
0
        , 0
2416
0
        , 0
2417
0
        , 0
2418
0
        , 0
2419
0
        , 0
2420
0
        , 0
2421
0
        , 0
2422
0
        , 0
2423
0
        , 0
2424
0
        , 0
2425
0
        , 0
2426
0
        , 0
2427
0
        , 0
2428
0
        , 0
2429
0
        , 0
2430
0
        , 0
2431
0
        , 0
2432
0
        , 0
2433
0
        , 0
2434
0
        , 64 /* AuctionBBO */
2435
0
        , 56 /* AuctionClearingPrice */
2436
0
        , 48 /* CrossRequest */
2437
0
        , 40 /* QuoteRequest */
2438
0
        , 64 /* TopOfBook */
2439
0
        , 0
2440
0
        , 0
2441
0
        , 0
2442
0
        , 0
2443
0
        , 0
2444
0
        , 0
2445
0
        , 0
2446
0
        , 0
2447
0
        , 0
2448
0
        , 0
2449
0
        , 0
2450
0
        , 0
2451
0
        , 0
2452
0
        , 0
2453
0
        , 0
2454
0
        , 0
2455
0
        , 0
2456
0
        , 0
2457
0
        , 0
2458
0
        , 0
2459
0
        , 0
2460
0
        , 0
2461
0
        , 0
2462
0
        , 0
2463
0
        , 0
2464
0
        , 0
2465
0
        , 0
2466
0
        , 0
2467
0
        , 0
2468
0
        , 0
2469
0
        , 0
2470
0
        , 0
2471
0
        , 0
2472
0
        , 0
2473
0
        , 0
2474
0
        , 0
2475
0
        , 0
2476
0
        , 0
2477
0
        , 0
2478
0
        , 0
2479
0
        , 0
2480
0
        , 0
2481
0
        , 0
2482
0
        , 0
2483
0
        , 0
2484
0
        , 0
2485
0
        , 0
2486
0
        , 0
2487
0
        , 0
2488
0
        , 0
2489
0
        , 0
2490
0
        , 0
2491
0
        , 0
2492
0
        , 0
2493
0
        , 0
2494
0
        , 0
2495
0
        , 0
2496
0
        , 0
2497
0
        , 0
2498
0
        , 0
2499
0
        , 0
2500
0
        , 0
2501
0
        , 0
2502
0
        , 0
2503
0
        , 0
2504
0
        , 0
2505
0
        , 0
2506
0
        , 0
2507
0
        , 0
2508
0
        , 0
2509
0
        , 0
2510
0
        , 0
2511
0
        , 0
2512
0
        , 0
2513
0
        , 0
2514
0
        , 0
2515
0
        , 0
2516
0
        , 0
2517
0
        , 0
2518
0
        , 0
2519
0
        , 0
2520
0
        , 0
2521
0
        , 0
2522
0
        , 0
2523
0
        , 0
2524
0
        , 0
2525
0
        , 0
2526
0
        , 0
2527
0
        , 0
2528
0
        , 0
2529
0
        , 0
2530
0
        , 0
2531
0
        , 0
2532
0
        , 0
2533
0
        , 0
2534
0
        , 24 /* ProductSummary */
2535
0
        , 424 /* InstrumentSummary */
2536
0
        , 40 /* SnapshotOrder */
2537
0
    };
2538
0
    static const unsigned char usages[] = {
2539
        // AddComplexInstrument
2540
        //// MessageHeaderComp
2541
0
          0 // BodyLen#0
2542
0
        , 0 // TemplateID#1
2543
0
        , 0 // MsgSeqNum#2
2544
        ///
2545
0
        , 0 // SecurityID#3
2546
0
        , 0 // TransactTime#4
2547
0
        , 1 // SecuritySubType#5
2548
0
        , 0 // ProductComplex#6
2549
0
        , 0 // ImpliedMarketIndicator#7
2550
0
        , 1 // LegRatioMultiplier#8
2551
0
        , 0 // NoLegs#9
2552
        //// InstrmtLegGrpComp
2553
0
        , 0 // LegSymbol#10
2554
0
        , 0 // LegSecurityID#11
2555
0
        , 1 // LegPrice#12
2556
0
        , 0 // LegRatioQty#13
2557
0
        , 0 // LegSecurityType#14
2558
0
        , 0 // LegSide#15
2559
        ///
2560
        // AuctionBBO
2561
        //// MessageHeaderComp
2562
0
        , 0 // BodyLen#16
2563
0
        , 0 // TemplateID#17
2564
0
        , 0 // MsgSeqNum#18
2565
        ///
2566
0
        , 0 // TransactTime#19
2567
0
        , 0 // SecurityID#20
2568
0
        , 1 // BidPx#21
2569
0
        , 1 // OfferPx#22
2570
0
        , 1 // BidSize#23
2571
0
        , 1 // OfferSize#24
2572
0
        , 1 // PotentialSecurityTradingEvent#25
2573
0
        , 1 // BidOrdType#26
2574
0
        , 1 // OfferOrdType#27
2575
        // AuctionClearingPrice
2576
        //// MessageHeaderComp
2577
0
        , 0 // BodyLen#28
2578
0
        , 0 // TemplateID#29
2579
0
        , 0 // MsgSeqNum#30
2580
        ///
2581
0
        , 0 // TransactTime#31
2582
0
        , 0 // SecurityID#32
2583
0
        , 0 // LastPx#33
2584
0
        , 1 // LastQty#34
2585
0
        , 1 // ImbalanceQty#35
2586
0
        , 1 // SecurityTradingStatus#36
2587
0
        , 1 // PotentialSecurityTradingEvent#37
2588
        // CrossRequest
2589
        //// MessageHeaderComp
2590
0
        , 0 // BodyLen#38
2591
0
        , 0 // TemplateID#39
2592
0
        , 0 // MsgSeqNum#40
2593
        ///
2594
0
        , 0 // SecurityID#41
2595
0
        , 1 // LastPx#42
2596
0
        , 1 // LastQty#43
2597
0
        , 1 // Side#44
2598
0
        , 0 // CrossRequestType#45
2599
0
        , 1 // InputSource#46
2600
0
        , 0 // TransactTime#47
2601
        // ExecutionSummary
2602
        //// MessageHeaderComp
2603
0
        , 0 // BodyLen#48
2604
0
        , 0 // TemplateID#49
2605
0
        , 0 // MsgSeqNum#50
2606
        ///
2607
0
        , 0 // SecurityID#51
2608
0
        , 1 // AggressorTime#52
2609
0
        , 1 // RequestTime#53
2610
0
        , 0 // ExecID#54
2611
0
        , 0 // LastQty#55
2612
0
        , 0 // AggressorSide#56
2613
0
        , 1 // TradeCondition#57
2614
0
        , 0 // LastPx#58
2615
0
        , 1 // RestingHiddenQty#59
2616
0
        , 0 // RestingCxlQty#60
2617
        // FullOrderExecution
2618
        //// MessageHeaderComp
2619
0
        , 0 // BodyLen#61
2620
0
        , 0 // TemplateID#62
2621
0
        , 0 // MsgSeqNum#63
2622
        ///
2623
0
        , 0 // Side#64
2624
0
        , 1 // OrdType#65
2625
0
        , 1 // AlgorithmicTradeIndicator#66
2626
0
        , 0 // TrdMatchID#67
2627
0
        , 1 // Price#68
2628
0
        , 0 // TrdRegTSTimePriority#69
2629
0
        , 0 // SecurityID#70
2630
0
        , 0 // LastQty#71
2631
0
        , 0 // LastPx#72
2632
        // Heartbeat
2633
        //// MessageHeaderComp
2634
0
        , 0 // BodyLen#73
2635
0
        , 0 // TemplateID#74
2636
0
        , 2 // MsgSeqNum#75
2637
        ///
2638
0
        , 0 // LastMsgSeqNumProcessed#76
2639
        // InstrumentStateChange
2640
        //// MessageHeaderComp
2641
0
        , 0 // BodyLen#77
2642
0
        , 0 // TemplateID#78
2643
0
        , 0 // MsgSeqNum#79
2644
        ///
2645
0
        , 0 // SecurityID#80
2646
0
        , 0 // SecurityStatus#81
2647
0
        , 0 // SecurityTradingStatus#82
2648
0
        , 0 // MarketCondition#83
2649
0
        , 0 // FastMarketIndicator#84
2650
0
        , 1 // SecurityTradingEvent#85
2651
0
        , 1 // SoldOutIndicator#86
2652
0
        , 1 // HighPx#87
2653
0
        , 1 // LowPx#88
2654
0
        , 0 // TransactTime#89
2655
        // InstrumentSummary
2656
        //// MessageHeaderComp
2657
0
        , 0 // BodyLen#90
2658
0
        , 0 // TemplateID#91
2659
0
        , 0 // MsgSeqNum#92
2660
        ///
2661
0
        , 0 // SecurityID#93
2662
0
        , 0 // LastUpdateTime#94
2663
0
        , 1 // TrdRegTSExecutionTime#95
2664
0
        , 0 // TotNoOrders#96
2665
0
        , 0 // SecurityStatus#97
2666
0
        , 0 // SecurityTradingStatus#98
2667
0
        , 0 // MarketCondition#99
2668
0
        , 0 // FastMarketIndicator#100
2669
0
        , 1 // SecurityTradingEvent#101
2670
0
        , 1 // SoldOutIndicator#102
2671
0
        , 1 // HighPx#103
2672
0
        , 1 // LowPx#104
2673
0
        , 0 // ProductComplex#105
2674
0
        , 0 // NoMDEntries#106
2675
        //// MDInstrumentEntryGrpComp
2676
0
        , 1 // MDEntryPx#107
2677
0
        , 1 // MDEntrySize#108
2678
0
        , 0 // MDEntryType#109
2679
0
        , 1 // TradeCondition#110
2680
        ///
2681
        // MassInstrumentStateChange
2682
        //// MessageHeaderComp
2683
0
        , 0 // BodyLen#111
2684
0
        , 0 // TemplateID#112
2685
0
        , 0 // MsgSeqNum#113
2686
        ///
2687
0
        , 0 // InstrumentScopeProductComplex#114
2688
0
        , 0 // SecurityMassStatus#115
2689
0
        , 0 // SecurityMassTradingStatus#116
2690
0
        , 0 // MassMarketCondition#117
2691
0
        , 0 // FastMarketIndicator#118
2692
0
        , 1 // SecurityMassTradingEvent#119
2693
0
        , 1 // MassSoldOutIndicator#120
2694
0
        , 0 // TransactTime#121
2695
0
        , 0 // LastFragment#122
2696
0
        , 0 // NoRelatedSym#123
2697
        //// SecMassStatGrpComp
2698
0
        , 0 // SecurityID#124
2699
0
        , 1 // HighPx#125
2700
0
        , 1 // LowPx#126
2701
0
        , 0 // SecurityStatus#127
2702
0
        , 0 // SecurityTradingStatus#128
2703
0
        , 0 // MarketCondition#129
2704
0
        , 1 // SecurityTradingEvent#130
2705
0
        , 1 // SoldOutIndicator#131
2706
        ///
2707
        // OrderAdd
2708
        //// MessageHeaderComp
2709
0
        , 0 // BodyLen#132
2710
0
        , 0 // TemplateID#133
2711
0
        , 0 // MsgSeqNum#134
2712
        ///
2713
0
        , 1 // TrdRegTSTimeIn#135
2714
0
        , 0 // SecurityID#136
2715
        //// OrderDetailsComp
2716
0
        , 0 // TrdRegTSTimePriority#137
2717
0
        , 0 // DisplayQty#138
2718
0
        , 0 // Side#139
2719
0
        , 1 // OrdType#140
2720
0
        , 1 // Price#141
2721
        ///
2722
        // OrderDelete
2723
        //// MessageHeaderComp
2724
0
        , 0 // BodyLen#142
2725
0
        , 0 // TemplateID#143
2726
0
        , 0 // MsgSeqNum#144
2727
        ///
2728
0
        , 1 // TrdRegTSTimeIn#145
2729
0
        , 0 // TransactTime#146
2730
0
        , 0 // SecurityID#147
2731
        //// OrderDetailsComp
2732
0
        , 0 // TrdRegTSTimePriority#148
2733
0
        , 0 // DisplayQty#149
2734
0
        , 0 // Side#150
2735
0
        , 1 // OrdType#151
2736
0
        , 1 // Price#152
2737
        ///
2738
        // OrderMassDelete
2739
        //// MessageHeaderComp
2740
0
        , 0 // BodyLen#153
2741
0
        , 0 // TemplateID#154
2742
0
        , 0 // MsgSeqNum#155
2743
        ///
2744
0
        , 0 // SecurityID#156
2745
0
        , 0 // TransactTime#157
2746
        // OrderModify
2747
        //// MessageHeaderComp
2748
0
        , 0 // BodyLen#158
2749
0
        , 0 // TemplateID#159
2750
0
        , 0 // MsgSeqNum#160
2751
        ///
2752
0
        , 0 // TrdRegTSTimeIn#161
2753
0
        , 0 // TrdRegTSPrevTimePriority#162
2754
0
        , 1 // PrevPrice#163
2755
0
        , 0 // PrevDisplayQty#164
2756
0
        , 0 // SecurityID#165
2757
        //// OrderDetailsComp
2758
0
        , 0 // TrdRegTSTimePriority#166
2759
0
        , 0 // DisplayQty#167
2760
0
        , 0 // Side#168
2761
0
        , 1 // OrdType#169
2762
0
        , 1 // Price#170
2763
        ///
2764
        // OrderModifySamePrio
2765
        //// MessageHeaderComp
2766
0
        , 0 // BodyLen#171
2767
0
        , 0 // TemplateID#172
2768
0
        , 0 // MsgSeqNum#173
2769
        ///
2770
0
        , 0 // TrdRegTSTimeIn#174
2771
0
        , 0 // TransactTime#175
2772
0
        , 0 // PrevDisplayQty#176
2773
0
        , 0 // SecurityID#177
2774
        //// OrderDetailsComp
2775
0
        , 0 // TrdRegTSTimePriority#178
2776
0
        , 0 // DisplayQty#179
2777
0
        , 0 // Side#180
2778
0
        , 1 // OrdType#181
2779
0
        , 1 // Price#182
2780
        ///
2781
        // PacketHeader
2782
        //// MessageHeaderComp
2783
0
        , 0 // BodyLen#183
2784
0
        , 0 // TemplateID#184
2785
0
        , 2 // MsgSeqNum#185
2786
        ///
2787
0
        , 0 // ApplSeqNum#186
2788
0
        , 0 // MarketSegmentID#187
2789
0
        , 0 // PartitionID#188
2790
0
        , 0 // CompletionIndicator#189
2791
0
        , 0 // ApplSeqResetIndicator#190
2792
0
        , 1 // DSCP#191
2793
0
        , 0 // TransactTime#192
2794
        // PartialOrderExecution
2795
        //// MessageHeaderComp
2796
0
        , 0 // BodyLen#193
2797
0
        , 0 // TemplateID#194
2798
0
        , 0 // MsgSeqNum#195
2799
        ///
2800
0
        , 0 // Side#196
2801
0
        , 1 // OrdType#197
2802
0
        , 1 // AlgorithmicTradeIndicator#198
2803
0
        , 0 // TrdMatchID#199
2804
0
        , 1 // Price#200
2805
0
        , 0 // TrdRegTSTimePriority#201
2806
0
        , 0 // SecurityID#202
2807
0
        , 0 // LastQty#203
2808
0
        , 0 // LastPx#204
2809
        // ProductStateChange
2810
        //// MessageHeaderComp
2811
0
        , 0 // BodyLen#205
2812
0
        , 0 // TemplateID#206
2813
0
        , 0 // MsgSeqNum#207
2814
        ///
2815
0
        , 0 // TradingSessionID#208
2816
0
        , 0 // TradingSessionSubID#209
2817
0
        , 0 // TradSesStatus#210
2818
0
        , 1 // MarketCondition#211
2819
0
        , 0 // FastMarketIndicator#212
2820
0
        , 0 // TransactTime#213
2821
        // ProductSummary
2822
        //// MessageHeaderComp
2823
0
        , 0 // BodyLen#214
2824
0
        , 0 // TemplateID#215
2825
0
        , 0 // MsgSeqNum#216
2826
        ///
2827
0
        , 0 // LastMsgSeqNumProcessed#217
2828
0
        , 1 // TradingSessionID#218
2829
0
        , 1 // TradingSessionSubID#219
2830
0
        , 1 // TradSesStatus#220
2831
0
        , 1 // MarketCondition#221
2832
0
        , 0 // FastMarketIndicator#222
2833
        // QuoteRequest
2834
        //// MessageHeaderComp
2835
0
        , 0 // BodyLen#223
2836
0
        , 0 // TemplateID#224
2837
0
        , 0 // MsgSeqNum#225
2838
        ///
2839
0
        , 0 // SecurityID#226
2840
0
        , 1 // LastQty#227
2841
0
        , 1 // Side#228
2842
0
        , 0 // TransactTime#229
2843
        // SnapshotOrder
2844
        //// MessageHeaderComp
2845
0
        , 0 // BodyLen#230
2846
0
        , 0 // TemplateID#231
2847
0
        , 0 // MsgSeqNum#232
2848
        ///
2849
        //// OrderDetailsComp
2850
0
        , 0 // TrdRegTSTimePriority#233
2851
0
        , 0 // DisplayQty#234
2852
0
        , 0 // Side#235
2853
0
        , 1 // OrdType#236
2854
0
        , 1 // Price#237
2855
        ///
2856
        // TopOfBook
2857
        //// MessageHeaderComp
2858
0
        , 0 // BodyLen#238
2859
0
        , 0 // TemplateID#239
2860
0
        , 0 // MsgSeqNum#240
2861
        ///
2862
0
        , 0 // TransactTime#241
2863
0
        , 0 // SecurityID#242
2864
0
        , 1 // BidPx#243
2865
0
        , 1 // OfferPx#244
2866
0
        , 1 // BidSize#245
2867
0
        , 1 // OfferSize#246
2868
0
        , 1 // NumberOfBuyOrders#247
2869
0
        , 1 // NumberOfSellOrders#248
2870
        // TradeReport
2871
        //// MessageHeaderComp
2872
0
        , 0 // BodyLen#249
2873
0
        , 0 // TemplateID#250
2874
0
        , 0 // MsgSeqNum#251
2875
        ///
2876
0
        , 0 // SecurityID#252
2877
0
        , 0 // TransactTime#253
2878
0
        , 0 // LastQty#254
2879
0
        , 0 // LastPx#255
2880
0
        , 1 // TrdMatchID#256
2881
0
        , 1 // MatchType#257
2882
0
        , 1 // MatchSubType#258
2883
0
        , 1 // AlgorithmicTradeIndicator#259
2884
0
        , 1 // TradeCondition#260
2885
        // TradeReversal
2886
        //// MessageHeaderComp
2887
0
        , 0 // BodyLen#261
2888
0
        , 0 // TemplateID#262
2889
0
        , 0 // MsgSeqNum#263
2890
        ///
2891
0
        , 0 // SecurityID#264
2892
0
        , 0 // TransactTime#265
2893
0
        , 0 // LastQty#266
2894
0
        , 0 // LastPx#267
2895
0
        , 1 // TrdRegTSExecutionTime#268
2896
0
        , 0 // TrdMatchID#269
2897
0
        , 1 // TradeCondition#270
2898
0
        , 0 // NoMDEntries#271
2899
        //// MDTradeEntryGrpComp
2900
0
        , 1 // MDEntryPx#272
2901
0
        , 1 // MDEntrySize#273
2902
0
        , 0 // MDEntryType#274
2903
        ///
2904
0
        , 0 // filler
2905
0
    };
2906
0
    static const int16_t tid2uidx[] = {
2907
0
        73 /* Heartbeat */
2908
0
        , -1
2909
0
        , -1
2910
0
        , -1
2911
0
        , 183 /* PacketHeader */
2912
0
        , -1
2913
0
        , -1
2914
0
        , -1
2915
0
        , -1
2916
0
        , -1
2917
0
        , -1
2918
0
        , -1
2919
0
        , -1
2920
0
        , -1
2921
0
        , -1
2922
0
        , -1
2923
0
        , -1
2924
0
        , -1
2925
0
        , -1
2926
0
        , -1
2927
0
        , -1
2928
0
        , -1
2929
0
        , -1
2930
0
        , -1
2931
0
        , -1
2932
0
        , -1
2933
0
        , -1
2934
0
        , -1
2935
0
        , -1
2936
0
        , -1
2937
0
        , -1
2938
0
        , -1
2939
0
        , -1
2940
0
        , -1
2941
0
        , -1
2942
0
        , -1
2943
0
        , -1
2944
0
        , -1
2945
0
        , -1
2946
0
        , -1
2947
0
        , -1
2948
0
        , -1
2949
0
        , -1
2950
0
        , -1
2951
0
        , -1
2952
0
        , -1
2953
0
        , -1
2954
0
        , -1
2955
0
        , -1
2956
0
        , -1
2957
0
        , -1
2958
0
        , -1
2959
0
        , -1
2960
0
        , -1
2961
0
        , -1
2962
0
        , -1
2963
0
        , -1
2964
0
        , -1
2965
0
        , -1
2966
0
        , -1
2967
0
        , -1
2968
0
        , -1
2969
0
        , -1
2970
0
        , -1
2971
0
        , -1
2972
0
        , -1
2973
0
        , -1
2974
0
        , -1
2975
0
        , -1
2976
0
        , -1
2977
0
        , -1
2978
0
        , -1
2979
0
        , -1
2980
0
        , -1
2981
0
        , -1
2982
0
        , -1
2983
0
        , -1
2984
0
        , -1
2985
0
        , -1
2986
0
        , -1
2987
0
        , -1
2988
0
        , -1
2989
0
        , -1
2990
0
        , -1
2991
0
        , -1
2992
0
        , -1
2993
0
        , -1
2994
0
        , -1
2995
0
        , -1
2996
0
        , -1
2997
0
        , -1
2998
0
        , -1
2999
0
        , -1
3000
0
        , -1
3001
0
        , -1
3002
0
        , -1
3003
0
        , -1
3004
0
        , -1
3005
0
        , -1
3006
0
        , 132 /* OrderAdd */
3007
0
        , 158 /* OrderModify */
3008
0
        , 142 /* OrderDelete */
3009
0
        , 153 /* OrderMassDelete */
3010
0
        , 61 /* FullOrderExecution */
3011
0
        , 193 /* PartialOrderExecution */
3012
0
        , 171 /* OrderModifySamePrio */
3013
0
        , -1
3014
0
        , -1
3015
0
        , -1
3016
0
        , -1
3017
0
        , -1
3018
0
        , -1
3019
0
        , -1
3020
0
        , -1
3021
0
        , -1
3022
0
        , -1
3023
0
        , -1
3024
0
        , -1
3025
0
        , -1
3026
0
        , -1
3027
0
        , -1
3028
0
        , -1
3029
0
        , -1
3030
0
        , -1
3031
0
        , -1
3032
0
        , -1
3033
0
        , -1
3034
0
        , -1
3035
0
        , -1
3036
0
        , -1
3037
0
        , -1
3038
0
        , -1
3039
0
        , -1
3040
0
        , -1
3041
0
        , -1
3042
0
        , -1
3043
0
        , -1
3044
0
        , -1
3045
0
        , -1
3046
0
        , -1
3047
0
        , -1
3048
0
        , -1
3049
0
        , -1
3050
0
        , -1
3051
0
        , -1
3052
0
        , -1
3053
0
        , -1
3054
0
        , -1
3055
0
        , -1
3056
0
        , -1
3057
0
        , -1
3058
0
        , -1
3059
0
        , -1
3060
0
        , -1
3061
0
        , -1
3062
0
        , -1
3063
0
        , -1
3064
0
        , -1
3065
0
        , -1
3066
0
        , -1
3067
0
        , -1
3068
0
        , -1
3069
0
        , -1
3070
0
        , -1
3071
0
        , -1
3072
0
        , -1
3073
0
        , -1
3074
0
        , -1
3075
0
        , -1
3076
0
        , -1
3077
0
        , -1
3078
0
        , -1
3079
0
        , -1
3080
0
        , -1
3081
0
        , -1
3082
0
        , -1
3083
0
        , -1
3084
0
        , -1
3085
0
        , -1
3086
0
        , -1
3087
0
        , -1
3088
0
        , -1
3089
0
        , -1
3090
0
        , -1
3091
0
        , -1
3092
0
        , -1
3093
0
        , -1
3094
0
        , -1
3095
0
        , -1
3096
0
        , -1
3097
0
        , -1
3098
0
        , -1
3099
0
        , -1
3100
0
        , -1
3101
0
        , -1
3102
0
        , -1
3103
0
        , -1
3104
0
        , -1
3105
0
        , -1
3106
0
        , 261 /* TradeReversal */
3107
0
        , 249 /* TradeReport */
3108
0
        , 48 /* ExecutionSummary */
3109
0
        , -1
3110
0
        , -1
3111
0
        , -1
3112
0
        , -1
3113
0
        , -1
3114
0
        , -1
3115
0
        , -1
3116
0
        , -1
3117
0
        , -1
3118
0
        , -1
3119
0
        , -1
3120
0
        , -1
3121
0
        , -1
3122
0
        , -1
3123
0
        , -1
3124
0
        , -1
3125
0
        , -1
3126
0
        , -1
3127
0
        , -1
3128
0
        , -1
3129
0
        , -1
3130
0
        , -1
3131
0
        , -1
3132
0
        , -1
3133
0
        , -1
3134
0
        , -1
3135
0
        , -1
3136
0
        , -1
3137
0
        , -1
3138
0
        , -1
3139
0
        , -1
3140
0
        , -1
3141
0
        , -1
3142
0
        , -1
3143
0
        , -1
3144
0
        , -1
3145
0
        , -1
3146
0
        , -1
3147
0
        , -1
3148
0
        , -1
3149
0
        , -1
3150
0
        , -1
3151
0
        , -1
3152
0
        , -1
3153
0
        , -1
3154
0
        , -1
3155
0
        , -1
3156
0
        , -1
3157
0
        , -1
3158
0
        , -1
3159
0
        , -1
3160
0
        , -1
3161
0
        , -1
3162
0
        , -1
3163
0
        , -1
3164
0
        , -1
3165
0
        , -1
3166
0
        , -1
3167
0
        , -1
3168
0
        , -1
3169
0
        , -1
3170
0
        , -1
3171
0
        , -1
3172
0
        , -1
3173
0
        , -1
3174
0
        , -1
3175
0
        , -1
3176
0
        , -1
3177
0
        , -1
3178
0
        , -1
3179
0
        , -1
3180
0
        , -1
3181
0
        , -1
3182
0
        , -1
3183
0
        , -1
3184
0
        , -1
3185
0
        , -1
3186
0
        , -1
3187
0
        , -1
3188
0
        , -1
3189
0
        , -1
3190
0
        , -1
3191
0
        , -1
3192
0
        , -1
3193
0
        , -1
3194
0
        , -1
3195
0
        , -1
3196
0
        , -1
3197
0
        , -1
3198
0
        , -1
3199
0
        , -1
3200
0
        , -1
3201
0
        , -1
3202
0
        , -1
3203
0
        , -1
3204
0
        , -1
3205
0
        , -1
3206
0
        , 205 /* ProductStateChange */
3207
0
        , 77 /* InstrumentStateChange */
3208
0
        , 111 /* MassInstrumentStateChange */
3209
0
        , -1
3210
0
        , -1
3211
0
        , -1
3212
0
        , -1
3213
0
        , -1
3214
0
        , -1
3215
0
        , -1
3216
0
        , -1
3217
0
        , -1
3218
0
        , -1
3219
0
        , -1
3220
0
        , -1
3221
0
        , -1
3222
0
        , -1
3223
0
        , -1
3224
0
        , -1
3225
0
        , -1
3226
0
        , -1
3227
0
        , -1
3228
0
        , -1
3229
0
        , -1
3230
0
        , -1
3231
0
        , -1
3232
0
        , -1
3233
0
        , -1
3234
0
        , -1
3235
0
        , -1
3236
0
        , -1
3237
0
        , -1
3238
0
        , -1
3239
0
        , -1
3240
0
        , -1
3241
0
        , -1
3242
0
        , -1
3243
0
        , -1
3244
0
        , -1
3245
0
        , -1
3246
0
        , -1
3247
0
        , -1
3248
0
        , -1
3249
0
        , -1
3250
0
        , -1
3251
0
        , -1
3252
0
        , -1
3253
0
        , -1
3254
0
        , -1
3255
0
        , -1
3256
0
        , -1
3257
0
        , -1
3258
0
        , -1
3259
0
        , -1
3260
0
        , -1
3261
0
        , -1
3262
0
        , -1
3263
0
        , -1
3264
0
        , -1
3265
0
        , -1
3266
0
        , -1
3267
0
        , -1
3268
0
        , -1
3269
0
        , -1
3270
0
        , -1
3271
0
        , -1
3272
0
        , -1
3273
0
        , -1
3274
0
        , -1
3275
0
        , -1
3276
0
        , -1
3277
0
        , -1
3278
0
        , -1
3279
0
        , -1
3280
0
        , -1
3281
0
        , -1
3282
0
        , -1
3283
0
        , -1
3284
0
        , -1
3285
0
        , -1
3286
0
        , -1
3287
0
        , -1
3288
0
        , -1
3289
0
        , -1
3290
0
        , -1
3291
0
        , -1
3292
0
        , -1
3293
0
        , -1
3294
0
        , -1
3295
0
        , -1
3296
0
        , -1
3297
0
        , -1
3298
0
        , -1
3299
0
        , -1
3300
0
        , -1
3301
0
        , -1
3302
0
        , -1
3303
0
        , -1
3304
0
        , -1
3305
0
        , -1
3306
0
        , 0 /* AddComplexInstrument */
3307
0
        , -1
3308
0
        , -1
3309
0
        , -1
3310
0
        , -1
3311
0
        , -1
3312
0
        , -1
3313
0
        , -1
3314
0
        , -1
3315
0
        , -1
3316
0
        , -1
3317
0
        , -1
3318
0
        , -1
3319
0
        , -1
3320
0
        , -1
3321
0
        , -1
3322
0
        , -1
3323
0
        , -1
3324
0
        , -1
3325
0
        , -1
3326
0
        , -1
3327
0
        , -1
3328
0
        , -1
3329
0
        , -1
3330
0
        , -1
3331
0
        , -1
3332
0
        , -1
3333
0
        , -1
3334
0
        , -1
3335
0
        , -1
3336
0
        , -1
3337
0
        , -1
3338
0
        , -1
3339
0
        , -1
3340
0
        , -1
3341
0
        , -1
3342
0
        , -1
3343
0
        , -1
3344
0
        , -1
3345
0
        , -1
3346
0
        , -1
3347
0
        , -1
3348
0
        , -1
3349
0
        , -1
3350
0
        , -1
3351
0
        , -1
3352
0
        , -1
3353
0
        , -1
3354
0
        , -1
3355
0
        , -1
3356
0
        , -1
3357
0
        , -1
3358
0
        , -1
3359
0
        , -1
3360
0
        , -1
3361
0
        , -1
3362
0
        , -1
3363
0
        , -1
3364
0
        , -1
3365
0
        , -1
3366
0
        , -1
3367
0
        , -1
3368
0
        , -1
3369
0
        , -1
3370
0
        , -1
3371
0
        , -1
3372
0
        , -1
3373
0
        , -1
3374
0
        , -1
3375
0
        , -1
3376
0
        , -1
3377
0
        , -1
3378
0
        , -1
3379
0
        , -1
3380
0
        , -1
3381
0
        , -1
3382
0
        , -1
3383
0
        , -1
3384
0
        , -1
3385
0
        , -1
3386
0
        , -1
3387
0
        , -1
3388
0
        , -1
3389
0
        , -1
3390
0
        , -1
3391
0
        , -1
3392
0
        , -1
3393
0
        , -1
3394
0
        , -1
3395
0
        , -1
3396
0
        , -1
3397
0
        , -1
3398
0
        , -1
3399
0
        , -1
3400
0
        , -1
3401
0
        , -1
3402
0
        , -1
3403
0
        , -1
3404
0
        , -1
3405
0
        , -1
3406
0
        , 16 /* AuctionBBO */
3407
0
        , 28 /* AuctionClearingPrice */
3408
0
        , 38 /* CrossRequest */
3409
0
        , 223 /* QuoteRequest */
3410
0
        , 238 /* TopOfBook */
3411
0
        , -1
3412
0
        , -1
3413
0
        , -1
3414
0
        , -1
3415
0
        , -1
3416
0
        , -1
3417
0
        , -1
3418
0
        , -1
3419
0
        , -1
3420
0
        , -1
3421
0
        , -1
3422
0
        , -1
3423
0
        , -1
3424
0
        , -1
3425
0
        , -1
3426
0
        , -1
3427
0
        , -1
3428
0
        , -1
3429
0
        , -1
3430
0
        , -1
3431
0
        , -1
3432
0
        , -1
3433
0
        , -1
3434
0
        , -1
3435
0
        , -1
3436
0
        , -1
3437
0
        , -1
3438
0
        , -1
3439
0
        , -1
3440
0
        , -1
3441
0
        , -1
3442
0
        , -1
3443
0
        , -1
3444
0
        , -1
3445
0
        , -1
3446
0
        , -1
3447
0
        , -1
3448
0
        , -1
3449
0
        , -1
3450
0
        , -1
3451
0
        , -1
3452
0
        , -1
3453
0
        , -1
3454
0
        , -1
3455
0
        , -1
3456
0
        , -1
3457
0
        , -1
3458
0
        , -1
3459
0
        , -1
3460
0
        , -1
3461
0
        , -1
3462
0
        , -1
3463
0
        , -1
3464
0
        , -1
3465
0
        , -1
3466
0
        , -1
3467
0
        , -1
3468
0
        , -1
3469
0
        , -1
3470
0
        , -1
3471
0
        , -1
3472
0
        , -1
3473
0
        , -1
3474
0
        , -1
3475
0
        , -1
3476
0
        , -1
3477
0
        , -1
3478
0
        , -1
3479
0
        , -1
3480
0
        , -1
3481
0
        , -1
3482
0
        , -1
3483
0
        , -1
3484
0
        , -1
3485
0
        , -1
3486
0
        , -1
3487
0
        , -1
3488
0
        , -1
3489
0
        , -1
3490
0
        , -1
3491
0
        , -1
3492
0
        , -1
3493
0
        , -1
3494
0
        , -1
3495
0
        , -1
3496
0
        , -1
3497
0
        , -1
3498
0
        , -1
3499
0
        , -1
3500
0
        , -1
3501
0
        , -1
3502
0
        , -1
3503
0
        , -1
3504
0
        , -1
3505
0
        , -1
3506
0
        , 214 /* ProductSummary */
3507
0
        , 90 /* InstrumentSummary */
3508
0
        , 230 /* SnapshotOrder */
3509
0
    };
3510
0
    static int * const dscp_bits[] = {
3511
0
        &hf_eobi_dscp_exec_summary,
3512
0
        &hf_eobi_dscp_improved,
3513
0
        &hf_eobi_dscp_widened,
3514
0
        NULL
3515
0
    };
3516
0
    if (templateid < 13001 || templateid > 13602) {
3517
0
        proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_template, tvb, 2, 4,
3518
0
            "Template ID out of range: %" PRIu16, templateid);
3519
0
        return tvb_captured_length(tvb);
3520
0
    }
3521
0
    int fidx = tid2fidx[templateid - 13001];
3522
0
    if (fidx == -1) {
3523
0
        proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_template, tvb, 2, 4,
3524
0
            "Unallocated Template ID: %" PRIu16, templateid);
3525
0
        return tvb_captured_length(tvb);
3526
0
    }
3527
0
    if (bodylen != tid2size[templateid - 13001]) {
3528
0
        proto_tree_add_expert_format(root, pinfo, &ei_eobi_invalid_length, tvb, 0, 2,
3529
0
                "Unexpected BodyLen value of %" PRIu32 ", expected:  %" PRIu32, bodylen, tid2size[templateid - 13001]);
3530
0
    }
3531
0
    int uidx = tid2uidx[templateid - 13001];
3532
0
    DISSECTOR_ASSERT_CMPINT(uidx, >=, 0);
3533
0
    DISSECTOR_ASSERT_CMPUINT(((size_t)uidx), <, array_length(usages));
3534
3535
0
    int old_fidx = 0;
3536
0
    int old_uidx = 0;
3537
0
    unsigned top = 1;
3538
0
    unsigned counter[8] = {0};
3539
0
    unsigned off = 0;
3540
0
    unsigned struct_off = 0;
3541
0
    unsigned repeats = 0;
3542
0
    proto_tree *t = root;
3543
0
    while (top) {
3544
0
        DISSECTOR_ASSERT_CMPINT(fidx, >=, 0);
3545
0
        DISSECTOR_ASSERT_CMPUINT(((size_t)fidx), <, array_length(fields));
3546
0
        DISSECTOR_ASSERT_CMPINT(uidx, >=, 0);
3547
0
        DISSECTOR_ASSERT_CMPUINT(((size_t)uidx), <, array_length(usages));
3548
3549
0
        switch (fields[fidx].type) {
3550
0
            case ETI_EOF:
3551
0
                DISSECTOR_ASSERT_CMPUINT(top, >=, 1);
3552
0
                DISSECTOR_ASSERT_CMPUINT(top, <=, 2);
3553
0
                if (t != root)
3554
0
                    proto_item_set_len(t, off - struct_off);
3555
0
                if (repeats) {
3556
0
                    --repeats;
3557
0
                    fidx = fields[old_fidx].field_handle_idx;
3558
0
                    uidx = old_uidx;
3559
0
                    t = proto_tree_add_subtree(root, tvb, off, -1, ett_eobi[fields[old_fidx].ett_idx], NULL, &struct_names[fields[old_fidx].size]);
3560
0
                    struct_off = off;
3561
0
                } else {
3562
0
                    fidx = old_fidx + 1;
3563
0
                    t = root;
3564
0
                    --top;
3565
0
                }
3566
0
                break;
3567
0
            case ETI_VAR_STRUCT:
3568
0
            case ETI_STRUCT:
3569
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, array_length(counter));
3570
0
                repeats = fields[fidx].type == ETI_VAR_STRUCT ? counter[fields[fidx].counter_off] : 1;
3571
0
                if (repeats) {
3572
0
                    --repeats;
3573
0
                    t = proto_tree_add_subtree(root, tvb, off, -1, ett_eobi[fields[fidx].ett_idx], NULL, &struct_names[fields[fidx].size]);
3574
0
                    struct_off = off;
3575
0
                    old_fidx = fidx;
3576
0
                    old_uidx = uidx;
3577
0
                    fidx = fields[fidx].field_handle_idx;
3578
0
                    DISSECTOR_ASSERT_CMPUINT(top, ==, 1);
3579
0
                    ++top;
3580
0
                } else {
3581
0
                    ++fidx;
3582
0
                }
3583
0
                break;
3584
0
            case ETI_PADDING:
3585
0
                off += fields[fidx].size;
3586
0
                ++fidx;
3587
0
                break;
3588
0
            case ETI_CHAR:
3589
0
                proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_ASCII);
3590
0
                off += fields[fidx].size;
3591
0
                ++fidx;
3592
0
                ++uidx;
3593
0
                break;
3594
0
            case ETI_STRING:
3595
0
                {
3596
0
                    uint8_t c = tvb_get_uint8(tvb, off);
3597
0
                    if (c)
3598
0
                        proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_ASCII);
3599
0
                    else {
3600
0
                        proto_item *e = proto_tree_add_string(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, "NO_VALUE ('0x00...')");
3601
0
                        if (!usages[uidx])
3602
0
                            expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3603
0
                    }
3604
0
                }
3605
0
                off += fields[fidx].size;
3606
0
                ++fidx;
3607
0
                ++uidx;
3608
0
                break;
3609
0
            case ETI_VAR_STRING:
3610
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, array_length(counter));
3611
0
                proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, counter[fields[fidx].counter_off], ENC_ASCII);
3612
0
                off += counter[fields[fidx].counter_off];
3613
0
                ++fidx;
3614
0
                ++uidx;
3615
0
                break;
3616
0
            case ETI_COUNTER:
3617
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <, array_length(counter));
3618
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, <=, 2);
3619
0
                {
3620
0
                    switch (fields[fidx].size) {
3621
0
                        case 1:
3622
0
                            {
3623
0
                                uint8_t x = tvb_get_uint8(tvb, off);
3624
0
                                if (x == UINT8_MAX) {
3625
0
                                    proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xff)");
3626
0
                                    counter[fields[fidx].counter_off] = 0;
3627
0
                                } else {
3628
0
                                    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);
3629
0
                                    if (x > fields[fidx].ett_idx) {
3630
0
                                        counter[fields[fidx].counter_off] = fields[fidx].ett_idx;
3631
0
                                        expert_add_info_format(pinfo, e, &ei_eobi_counter_overflow, "Counter overflow: %" PRIu8 " > %" PRIu16, x, fields[fidx].ett_idx);
3632
0
                                    } else {
3633
0
                                        counter[fields[fidx].counter_off] = x;
3634
0
                                    }
3635
0
                                }
3636
0
                            }
3637
0
                            break;
3638
0
                        case 2:
3639
0
                            {
3640
0
                                uint16_t x = tvb_get_letohs(tvb, off);
3641
0
                                if (x == UINT16_MAX) {
3642
0
                                    proto_tree_add_uint_format_value(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, x, "NO_VALUE (0xffff)");
3643
0
                                    counter[fields[fidx].counter_off] = 0;
3644
0
                                } else {
3645
0
                                    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);
3646
0
                                    if (x > fields[fidx].ett_idx) {
3647
0
                                        counter[fields[fidx].counter_off] = fields[fidx].ett_idx;
3648
0
                                        expert_add_info_format(pinfo, e, &ei_eobi_counter_overflow, "Counter overflow: %" PRIu16 " > %" PRIu16, x, fields[fidx].ett_idx);
3649
0
                                    } else {
3650
0
                                        counter[fields[fidx].counter_off] = x;
3651
0
                                    }
3652
0
                                }
3653
0
                            }
3654
0
                            break;
3655
0
                    }
3656
0
                }
3657
0
                off += fields[fidx].size;
3658
0
                ++fidx;
3659
0
                ++uidx;
3660
0
                break;
3661
0
            case ETI_UINT:
3662
0
                switch (fields[fidx].size) {
3663
0
                    case 1:
3664
0
                        {
3665
0
                            uint8_t x = tvb_get_uint8(tvb, off);
3666
0
                            if (x == UINT8_MAX) {
3667
0
                                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)");
3668
0
                                if (!usages[uidx])
3669
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3670
0
                            } else {
3671
0
                                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);
3672
0
                                if (usages[uidx] == 2)
3673
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3674
0
                            }
3675
0
                        }
3676
0
                        break;
3677
0
                    case 2:
3678
0
                        {
3679
0
                            uint16_t x = tvb_get_letohs(tvb, off);
3680
0
                            if (x == UINT16_MAX) {
3681
0
                                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)");
3682
0
                                if (!usages[uidx])
3683
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3684
0
                            } else {
3685
0
                                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);
3686
0
                                if (usages[uidx] == 2)
3687
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3688
0
                            }
3689
0
                        }
3690
0
                        break;
3691
0
                    case 4:
3692
0
                        {
3693
0
                            uint32_t x = tvb_get_letohl(tvb, off);
3694
0
                            if (x == UINT32_MAX) {
3695
0
                                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)");
3696
0
                                if (!usages[uidx])
3697
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3698
0
                            } else {
3699
0
                                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);
3700
0
                                if (usages[uidx] == 2)
3701
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3702
0
                            }
3703
0
                        }
3704
0
                        break;
3705
0
                    case 8:
3706
0
                        {
3707
0
                            uint64_t x = tvb_get_letoh64(tvb, off);
3708
0
                            if (x == UINT64_MAX) {
3709
0
                                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)");
3710
0
                                if (!usages[uidx])
3711
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3712
0
                            } else {
3713
0
                                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);
3714
0
                                if (usages[uidx] == 2)
3715
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3716
0
                            }
3717
0
                        }
3718
0
                        break;
3719
0
                }
3720
0
                off += fields[fidx].size;
3721
0
                ++fidx;
3722
0
                ++uidx;
3723
0
                break;
3724
0
            case ETI_INT:
3725
0
                switch (fields[fidx].size) {
3726
0
                    case 1:
3727
0
                        {
3728
0
                            int8_t x = tvb_get_int8(tvb, off);
3729
0
                            if (x == INT8_MIN) {
3730
0
                                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)");
3731
0
                                if (!usages[uidx])
3732
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3733
0
                            } else {
3734
0
                                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);
3735
0
                                if (usages[uidx] == 2)
3736
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3737
0
                            }
3738
0
                        }
3739
0
                        break;
3740
0
                    case 2:
3741
0
                        {
3742
0
                            int16_t x = tvb_get_letohis(tvb, off);
3743
0
                            if (x == INT16_MIN) {
3744
0
                                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)");
3745
0
                                if (!usages[uidx])
3746
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3747
0
                            } else {
3748
0
                                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);
3749
0
                                if (usages[uidx] == 2)
3750
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3751
0
                            }
3752
0
                        }
3753
0
                        break;
3754
0
                    case 4:
3755
0
                        {
3756
0
                            int32_t x = tvb_get_letohil(tvb, off);
3757
0
                            if (x == INT32_MIN) {
3758
0
                                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)");
3759
0
                                if (!usages[uidx])
3760
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3761
0
                            } else {
3762
0
                                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);
3763
0
                                if (usages[uidx] == 2)
3764
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3765
0
                            }
3766
0
                        }
3767
0
                        break;
3768
0
                    case 8:
3769
0
                        {
3770
0
                            int64_t x = tvb_get_letohi64(tvb, off);
3771
0
                            if (x == INT64_MIN) {
3772
0
                                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)");
3773
0
                                if (!usages[uidx])
3774
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3775
0
                            } else {
3776
0
                                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);
3777
0
                                if (usages[uidx] == 2)
3778
0
                                    expert_add_info_format(pinfo, e, &ei_eobi_overused, "unused value is set");
3779
0
                            }
3780
0
                        }
3781
0
                        break;
3782
0
                }
3783
0
                off += fields[fidx].size;
3784
0
                ++fidx;
3785
0
                ++uidx;
3786
0
                break;
3787
0
            case ETI_UINT_ENUM:
3788
0
            case ETI_INT_ENUM:
3789
0
                proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_LITTLE_ENDIAN);
3790
0
                off += fields[fidx].size;
3791
0
                ++fidx;
3792
0
                ++uidx;
3793
0
                break;
3794
0
            case ETI_FIXED_POINT:
3795
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 8);
3796
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, >, 0);
3797
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].counter_off, <=, 16);
3798
0
                {
3799
0
                    int64_t x = tvb_get_letohi64(tvb, off);
3800
0
                    if (x == INT64_MIN) {
3801
0
                        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)");
3802
0
                        if (!usages[uidx])
3803
0
                            expert_add_info_format(pinfo, e, &ei_eobi_missing, "required value is missing");
3804
0
                    } else {
3805
0
                        unsigned slack = fields[fidx].counter_off + 1;
3806
0
                        if (x < 0)
3807
0
                            slack += 1;
3808
0
                        char s[21];
3809
0
                        int n = snprintf(s, sizeof s, "%0*" PRIi64, slack, x);
3810
0
                        DISSECTOR_ASSERT_CMPUINT(n, >, 0);
3811
0
                        unsigned k = n - fields[fidx].counter_off;
3812
0
                        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);
3813
0
                    }
3814
0
                }
3815
0
                off += fields[fidx].size;
3816
0
                ++fidx;
3817
0
                ++uidx;
3818
0
                break;
3819
0
            case ETI_TIMESTAMP_NS:
3820
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 8);
3821
0
                proto_tree_add_item(t, hf_eobi[fields[fidx].field_handle_idx], tvb, off, fields[fidx].size, ENC_LITTLE_ENDIAN | ENC_TIME_NSECS);
3822
0
                off += fields[fidx].size;
3823
0
                ++fidx;
3824
0
                ++uidx;
3825
0
                break;
3826
0
            case ETI_DSCP:
3827
0
                DISSECTOR_ASSERT_CMPUINT(fields[fidx].size, ==, 1);
3828
0
                proto_tree_add_bitmask(t, tvb, off, hf_eobi[fields[fidx].field_handle_idx], ett_eobi_dscp, dscp_bits, ENC_LITTLE_ENDIAN);
3829
0
                off += fields[fidx].size;
3830
0
                ++fidx;
3831
0
                ++uidx;
3832
0
                break;
3833
0
        }
3834
0
    }
3835
3836
0
    return tvb_captured_length(tvb);
3837
0
}
3838
3839
/* determine PDU length of protocol EOBI */
3840
static unsigned
3841
get_eobi_message_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_)
3842
0
{
3843
0
    return (unsigned)tvb_get_letohs(tvb, offset);
3844
0
}
3845
3846
static int
3847
dissect_eobi(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree,
3848
        void *data)
3849
0
{
3850
0
    return udp_dissect_pdus(tvb, pinfo, tree, 4, NULL,
3851
0
            get_eobi_message_len, dissect_eobi_message, data);
3852
0
}
3853
3854
void
3855
proto_register_eobi(void)
3856
14
{
3857
14
    static hf_register_info hf[] ={
3858
14
          { &hf_eobi[AGGRESSORSIDE_FH_IDX],
3859
14
              { "AggressorSide", "eobi.aggressorside",
3860
14
                FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
3861
14
                NULL, HFILL }
3862
14
          }
3863
14
        , { &hf_eobi[AGGRESSORTIME_FH_IDX],
3864
14
              { "AggressorTime", "eobi.aggressortime",
3865
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
3866
14
                NULL, HFILL }
3867
14
          }
3868
14
        , { &hf_eobi[ALGORITHMICTRADEINDICATOR_FH_IDX],
3869
14
              { "AlgorithmicTradeIndicator", "eobi.algorithmictradeindicator",
3870
14
                FT_UINT8, BASE_DEC, VALS(algorithmic_trade_indicator_vals), 0x0,
3871
14
                NULL, HFILL }
3872
14
          }
3873
14
        , { &hf_eobi[APPLSEQNUM_FH_IDX],
3874
14
              { "ApplSeqNum", "eobi.applseqnum",
3875
14
                FT_UINT32, BASE_DEC, NULL, 0x0,
3876
14
                NULL, HFILL }
3877
14
          }
3878
14
        , { &hf_eobi[APPLSEQRESETINDICATOR_FH_IDX],
3879
14
              { "ApplSeqResetIndicator", "eobi.applseqresetindicator",
3880
14
                FT_UINT8, BASE_DEC, VALS(appl_seq_reset_indicator_vals), 0x0,
3881
14
                NULL, HFILL }
3882
14
          }
3883
14
        , { &hf_eobi[BIDORDTYPE_FH_IDX],
3884
14
              { "BidOrdType", "eobi.bidordtype",
3885
14
                FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
3886
14
                NULL, HFILL }
3887
14
          }
3888
14
        , { &hf_eobi[BIDPX_FH_IDX],
3889
14
              { "BidPx", "eobi.bidpx",
3890
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3891
14
                NULL, HFILL }
3892
14
          }
3893
14
        , { &hf_eobi[BIDSIZE_FH_IDX],
3894
14
              { "BidSize", "eobi.bidsize",
3895
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3896
14
                NULL, HFILL }
3897
14
          }
3898
14
        , { &hf_eobi[BODYLEN_FH_IDX],
3899
14
              { "BodyLen", "eobi.bodylen",
3900
14
                FT_UINT16, BASE_DEC, NULL, 0x0,
3901
14
                NULL, HFILL }
3902
14
          }
3903
14
        , { &hf_eobi[COMPLETIONINDICATOR_FH_IDX],
3904
14
              { "CompletionIndicator", "eobi.completionindicator",
3905
14
                FT_UINT8, BASE_DEC, VALS(completion_indicator_vals), 0x0,
3906
14
                NULL, HFILL }
3907
14
          }
3908
14
        , { &hf_eobi[CROSSREQUESTTYPE_FH_IDX],
3909
14
              { "CrossRequestType", "eobi.crossrequesttype",
3910
14
                FT_UINT8, BASE_DEC, VALS(cross_request_type_vals), 0x0,
3911
14
                NULL, HFILL }
3912
14
          }
3913
14
        , { &hf_eobi[DSCP_FH_IDX],
3914
14
              { "DSCP", "eobi.dscp",
3915
14
                FT_UINT8, BASE_HEX, NULL, 0x0,
3916
14
                NULL, HFILL }
3917
14
          }
3918
14
        , { &hf_eobi[DISPLAYQTY_FH_IDX],
3919
14
              { "DisplayQty", "eobi.displayqty",
3920
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3921
14
                NULL, HFILL }
3922
14
          }
3923
14
        , { &hf_eobi[EXECID_FH_IDX],
3924
14
              { "ExecID", "eobi.execid",
3925
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
3926
14
                NULL, HFILL }
3927
14
          }
3928
14
        , { &hf_eobi[FASTMARKETINDICATOR_FH_IDX],
3929
14
              { "FastMarketIndicator", "eobi.fastmarketindicator",
3930
14
                FT_UINT8, BASE_DEC, VALS(fast_market_indicator_vals), 0x0,
3931
14
                NULL, HFILL }
3932
14
          }
3933
14
        , { &hf_eobi[HIGHPX_FH_IDX],
3934
14
              { "HighPx", "eobi.highpx",
3935
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3936
14
                NULL, HFILL }
3937
14
          }
3938
14
        , { &hf_eobi[IMBALANCEQTY_FH_IDX],
3939
14
              { "ImbalanceQty", "eobi.imbalanceqty",
3940
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3941
14
                NULL, HFILL }
3942
14
          }
3943
14
        , { &hf_eobi[IMPLIEDMARKETINDICATOR_FH_IDX],
3944
14
              { "ImpliedMarketIndicator", "eobi.impliedmarketindicator",
3945
14
                FT_UINT8, BASE_DEC, VALS(implied_market_indicator_vals), 0x0,
3946
14
                NULL, HFILL }
3947
14
          }
3948
14
        , { &hf_eobi[INPUTSOURCE_FH_IDX],
3949
14
              { "InputSource", "eobi.inputsource",
3950
14
                FT_UINT8, BASE_DEC, VALS(input_source_vals), 0x0,
3951
14
                NULL, HFILL }
3952
14
          }
3953
14
        , { &hf_eobi[INSTRUMENTSCOPEPRODUCTCOMPLEX_FH_IDX],
3954
14
              { "InstrumentScopeProductComplex", "eobi.instrumentscopeproductcomplex",
3955
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &instrument_scope_product_complex_vals_ext, 0x0,
3956
14
                NULL, HFILL }
3957
14
          }
3958
14
        , { &hf_eobi[LASTFRAGMENT_FH_IDX],
3959
14
              { "LastFragment", "eobi.lastfragment",
3960
14
                FT_UINT8, BASE_DEC, VALS(last_fragment_vals), 0x0,
3961
14
                NULL, HFILL }
3962
14
          }
3963
14
        , { &hf_eobi[LASTMSGSEQNUMPROCESSED_FH_IDX],
3964
14
              { "LastMsgSeqNumProcessed", "eobi.lastmsgseqnumprocessed",
3965
14
                FT_UINT32, BASE_DEC, NULL, 0x0,
3966
14
                NULL, HFILL }
3967
14
          }
3968
14
        , { &hf_eobi[LASTPX_FH_IDX],
3969
14
              { "LastPx", "eobi.lastpx",
3970
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3971
14
                NULL, HFILL }
3972
14
          }
3973
14
        , { &hf_eobi[LASTQTY_FH_IDX],
3974
14
              { "LastQty", "eobi.lastqty",
3975
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3976
14
                NULL, HFILL }
3977
14
          }
3978
14
        , { &hf_eobi[LASTUPDATETIME_FH_IDX],
3979
14
              { "LastUpdateTime", "eobi.lastupdatetime",
3980
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
3981
14
                NULL, HFILL }
3982
14
          }
3983
14
        , { &hf_eobi[LEGPRICE_FH_IDX],
3984
14
              { "LegPrice", "eobi.legprice",
3985
14
                FT_INT64, BASE_DEC, NULL, 0x0,
3986
14
                NULL, HFILL }
3987
14
          }
3988
14
        , { &hf_eobi[LEGRATIOMULTIPLIER_FH_IDX],
3989
14
              { "LegRatioMultiplier", "eobi.legratiomultiplier",
3990
14
                FT_UINT32, BASE_DEC, NULL, 0x0,
3991
14
                NULL, HFILL }
3992
14
          }
3993
14
        , { &hf_eobi[LEGRATIOQTY_FH_IDX],
3994
14
              { "LegRatioQty", "eobi.legratioqty",
3995
14
                FT_INT32, BASE_DEC, NULL, 0x0,
3996
14
                NULL, HFILL }
3997
14
          }
3998
14
        , { &hf_eobi[LEGSECURITYID_FH_IDX],
3999
14
              { "LegSecurityID", "eobi.legsecurityid",
4000
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4001
14
                NULL, HFILL }
4002
14
          }
4003
14
        , { &hf_eobi[LEGSECURITYTYPE_FH_IDX],
4004
14
              { "LegSecurityType", "eobi.legsecuritytype",
4005
14
                FT_UINT8, BASE_DEC, VALS(leg_security_type_vals), 0x0,
4006
14
                NULL, HFILL }
4007
14
          }
4008
14
        , { &hf_eobi[LEGSIDE_FH_IDX],
4009
14
              { "LegSide", "eobi.legside",
4010
14
                FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
4011
14
                NULL, HFILL }
4012
14
          }
4013
14
        , { &hf_eobi[LEGSYMBOL_FH_IDX],
4014
14
              { "LegSymbol", "eobi.legsymbol",
4015
14
                FT_INT32, BASE_DEC, NULL, 0x0,
4016
14
                NULL, HFILL }
4017
14
          }
4018
14
        , { &hf_eobi[LOWPX_FH_IDX],
4019
14
              { "LowPx", "eobi.lowpx",
4020
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4021
14
                NULL, HFILL }
4022
14
          }
4023
14
        , { &hf_eobi[MDENTRYPX_FH_IDX],
4024
14
              { "MDEntryPx", "eobi.mdentrypx",
4025
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4026
14
                NULL, HFILL }
4027
14
          }
4028
14
        , { &hf_eobi[MDENTRYSIZE_FH_IDX],
4029
14
              { "MDEntrySize", "eobi.mdentrysize",
4030
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4031
14
                NULL, HFILL }
4032
14
          }
4033
14
        , { &hf_eobi[MDENTRYTYPE_FH_IDX],
4034
14
              { "MDEntryType", "eobi.mdentrytype",
4035
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &mdentry_type_vals_ext, 0x0,
4036
14
                NULL, HFILL }
4037
14
          }
4038
14
        , { &hf_eobi[MARKETCONDITION_FH_IDX],
4039
14
              { "MarketCondition", "eobi.marketcondition",
4040
14
                FT_UINT8, BASE_DEC, VALS(market_condition_vals), 0x0,
4041
14
                NULL, HFILL }
4042
14
          }
4043
14
        , { &hf_eobi[MARKETSEGMENTID_FH_IDX],
4044
14
              { "MarketSegmentID", "eobi.marketsegmentid",
4045
14
                FT_INT32, BASE_DEC, NULL, 0x0,
4046
14
                NULL, HFILL }
4047
14
          }
4048
14
        , { &hf_eobi[MASSMARKETCONDITION_FH_IDX],
4049
14
              { "MassMarketCondition", "eobi.massmarketcondition",
4050
14
                FT_UINT8, BASE_DEC, VALS(market_condition_vals), 0x0,
4051
14
                NULL, HFILL }
4052
14
          }
4053
14
        , { &hf_eobi[MASSSOLDOUTINDICATOR_FH_IDX],
4054
14
              { "MassSoldOutIndicator", "eobi.masssoldoutindicator",
4055
14
                FT_UINT8, BASE_DEC, VALS(mass_sold_out_indicator_vals), 0x0,
4056
14
                NULL, HFILL }
4057
14
          }
4058
14
        , { &hf_eobi[MATCHSUBTYPE_FH_IDX],
4059
14
              { "MatchSubType", "eobi.matchsubtype",
4060
14
                FT_UINT8, BASE_DEC, VALS(match_sub_type_vals), 0x0,
4061
14
                NULL, HFILL }
4062
14
          }
4063
14
        , { &hf_eobi[MATCHTYPE_FH_IDX],
4064
14
              { "MatchType", "eobi.matchtype",
4065
14
                FT_UINT8, BASE_DEC, VALS(match_type_vals), 0x0,
4066
14
                NULL, HFILL }
4067
14
          }
4068
14
        , { &hf_eobi[MSGSEQNUM_FH_IDX],
4069
14
              { "MsgSeqNum", "eobi.msgseqnum",
4070
14
                FT_UINT32, BASE_DEC, NULL, 0x0,
4071
14
                NULL, HFILL }
4072
14
          }
4073
14
        , { &hf_eobi[NOLEGS_FH_IDX],
4074
14
              { "NoLegs", "eobi.nolegs",
4075
14
                FT_UINT8, BASE_DEC, NULL, 0x0,
4076
14
                NULL, HFILL }
4077
14
          }
4078
14
        , { &hf_eobi[NOMDENTRIES_FH_IDX],
4079
14
              { "NoMDEntries", "eobi.nomdentries",
4080
14
                FT_UINT8, BASE_DEC, NULL, 0x0,
4081
14
                NULL, HFILL }
4082
14
          }
4083
14
        , { &hf_eobi[NORELATEDSYM_FH_IDX],
4084
14
              { "NoRelatedSym", "eobi.norelatedsym",
4085
14
                FT_UINT8, BASE_DEC, NULL, 0x0,
4086
14
                NULL, HFILL }
4087
14
          }
4088
14
        , { &hf_eobi[NUMBEROFBUYORDERS_FH_IDX],
4089
14
              { "NumberOfBuyOrders", "eobi.numberofbuyorders",
4090
14
                FT_UINT16, BASE_DEC, NULL, 0x0,
4091
14
                NULL, HFILL }
4092
14
          }
4093
14
        , { &hf_eobi[NUMBEROFSELLORDERS_FH_IDX],
4094
14
              { "NumberOfSellOrders", "eobi.numberofsellorders",
4095
14
                FT_UINT16, BASE_DEC, NULL, 0x0,
4096
14
                NULL, HFILL }
4097
14
          }
4098
14
        , { &hf_eobi[OFFERORDTYPE_FH_IDX],
4099
14
              { "OfferOrdType", "eobi.offerordtype",
4100
14
                FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
4101
14
                NULL, HFILL }
4102
14
          }
4103
14
        , { &hf_eobi[OFFERPX_FH_IDX],
4104
14
              { "OfferPx", "eobi.offerpx",
4105
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4106
14
                NULL, HFILL }
4107
14
          }
4108
14
        , { &hf_eobi[OFFERSIZE_FH_IDX],
4109
14
              { "OfferSize", "eobi.offersize",
4110
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4111
14
                NULL, HFILL }
4112
14
          }
4113
14
        , { &hf_eobi[ORDTYPE_FH_IDX],
4114
14
              { "OrdType", "eobi.ordtype",
4115
14
                FT_UINT8, BASE_DEC, VALS(bid_ord_type_vals), 0x0,
4116
14
                NULL, HFILL }
4117
14
          }
4118
14
        , { &hf_eobi[PARTITIONID_FH_IDX],
4119
14
              { "PartitionID", "eobi.partitionid",
4120
14
                FT_UINT8, BASE_DEC, NULL, 0x0,
4121
14
                NULL, HFILL }
4122
14
          }
4123
14
        , { &hf_eobi[POTENTIALSECURITYTRADINGEVENT_FH_IDX],
4124
14
              { "PotentialSecurityTradingEvent", "eobi.potentialsecuritytradingevent",
4125
14
                FT_UINT8, BASE_DEC, VALS(potential_security_trading_event_vals), 0x0,
4126
14
                NULL, HFILL }
4127
14
          }
4128
14
        , { &hf_eobi[PREVDISPLAYQTY_FH_IDX],
4129
14
              { "PrevDisplayQty", "eobi.prevdisplayqty",
4130
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4131
14
                NULL, HFILL }
4132
14
          }
4133
14
        , { &hf_eobi[PREVPRICE_FH_IDX],
4134
14
              { "PrevPrice", "eobi.prevprice",
4135
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4136
14
                NULL, HFILL }
4137
14
          }
4138
14
        , { &hf_eobi[PRICE_FH_IDX],
4139
14
              { "Price", "eobi.price",
4140
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4141
14
                NULL, HFILL }
4142
14
          }
4143
14
        , { &hf_eobi[PRODUCTCOMPLEX_FH_IDX],
4144
14
              { "ProductComplex", "eobi.productcomplex",
4145
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &instrument_scope_product_complex_vals_ext, 0x0,
4146
14
                NULL, HFILL }
4147
14
          }
4148
14
        , { &hf_eobi[REQUESTTIME_FH_IDX],
4149
14
              { "RequestTime", "eobi.requesttime",
4150
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4151
14
                NULL, HFILL }
4152
14
          }
4153
14
        , { &hf_eobi[RESTINGCXLQTY_FH_IDX],
4154
14
              { "RestingCxlQty", "eobi.restingcxlqty",
4155
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4156
14
                NULL, HFILL }
4157
14
          }
4158
14
        , { &hf_eobi[RESTINGHIDDENQTY_FH_IDX],
4159
14
              { "RestingHiddenQty", "eobi.restinghiddenqty",
4160
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4161
14
                NULL, HFILL }
4162
14
          }
4163
14
        , { &hf_eobi[SECURITYID_FH_IDX],
4164
14
              { "SecurityID", "eobi.securityid",
4165
14
                FT_INT64, BASE_DEC, NULL, 0x0,
4166
14
                NULL, HFILL }
4167
14
          }
4168
14
        , { &hf_eobi[SECURITYMASSSTATUS_FH_IDX],
4169
14
              { "SecurityMassStatus", "eobi.securitymassstatus",
4170
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_status_vals_ext, 0x0,
4171
14
                NULL, HFILL }
4172
14
          }
4173
14
        , { &hf_eobi[SECURITYMASSTRADINGEVENT_FH_IDX],
4174
14
              { "SecurityMassTradingEvent", "eobi.securitymasstradingevent",
4175
14
                FT_UINT8, BASE_DEC, VALS(security_mass_trading_event_vals), 0x0,
4176
14
                NULL, HFILL }
4177
14
          }
4178
14
        , { &hf_eobi[SECURITYMASSTRADINGSTATUS_FH_IDX],
4179
14
              { "SecurityMassTradingStatus", "eobi.securitymasstradingstatus",
4180
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_trading_status_vals_ext, 0x0,
4181
14
                NULL, HFILL }
4182
14
          }
4183
14
        , { &hf_eobi[SECURITYSTATUS_FH_IDX],
4184
14
              { "SecurityStatus", "eobi.securitystatus",
4185
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_status_vals_ext, 0x0,
4186
14
                NULL, HFILL }
4187
14
          }
4188
14
        , { &hf_eobi[SECURITYSUBTYPE_FH_IDX],
4189
14
              { "SecuritySubType", "eobi.securitysubtype",
4190
14
                FT_INT32, BASE_DEC, NULL, 0x0,
4191
14
                NULL, HFILL }
4192
14
          }
4193
14
        , { &hf_eobi[SECURITYTRADINGEVENT_FH_IDX],
4194
14
              { "SecurityTradingEvent", "eobi.securitytradingevent",
4195
14
                FT_UINT8, BASE_DEC, VALS(security_mass_trading_event_vals), 0x0,
4196
14
                NULL, HFILL }
4197
14
          }
4198
14
        , { &hf_eobi[SECURITYTRADINGSTATUS_FH_IDX],
4199
14
              { "SecurityTradingStatus", "eobi.securitytradingstatus",
4200
14
                FT_UINT8, BASE_DEC| BASE_EXT_STRING, &security_mass_trading_status_vals_ext, 0x0,
4201
14
                NULL, HFILL }
4202
14
          }
4203
14
        , { &hf_eobi[SIDE_FH_IDX],
4204
14
              { "Side", "eobi.side",
4205
14
                FT_UINT8, BASE_DEC, VALS(aggressor_side_vals), 0x0,
4206
14
                NULL, HFILL }
4207
14
          }
4208
14
        , { &hf_eobi[SOLDOUTINDICATOR_FH_IDX],
4209
14
              { "SoldOutIndicator", "eobi.soldoutindicator",
4210
14
                FT_UINT8, BASE_DEC, VALS(mass_sold_out_indicator_vals), 0x0,
4211
14
                NULL, HFILL }
4212
14
          }
4213
14
        , { &hf_eobi[TEMPLATEID_FH_IDX],
4214
14
              { "TemplateID", "eobi.templateid",
4215
14
                FT_UINT16, BASE_DEC, NULL, 0x0,
4216
14
                NULL, HFILL }
4217
14
          }
4218
14
        , { &hf_eobi[TOTNOORDERS_FH_IDX],
4219
14
              { "TotNoOrders", "eobi.totnoorders",
4220
14
                FT_UINT16, BASE_DEC, NULL, 0x0,
4221
14
                NULL, HFILL }
4222
14
          }
4223
14
        , { &hf_eobi[TRADSESSTATUS_FH_IDX],
4224
14
              { "TradSesStatus", "eobi.tradsesstatus",
4225
14
                FT_UINT8, BASE_DEC, VALS(trad_ses_status_vals), 0x0,
4226
14
                NULL, HFILL }
4227
14
          }
4228
14
        , { &hf_eobi[TRADECONDITION_FH_IDX],
4229
14
              { "TradeCondition", "eobi.tradecondition",
4230
14
                FT_UINT16, BASE_DEC, VALS(trade_condition_vals), 0x0,
4231
14
                NULL, HFILL }
4232
14
          }
4233
14
        , { &hf_eobi[TRADINGSESSIONID_FH_IDX],
4234
14
              { "TradingSessionID", "eobi.tradingsessionid",
4235
14
                FT_UINT8, BASE_DEC, VALS(trading_session_id_vals), 0x0,
4236
14
                NULL, HFILL }
4237
14
          }
4238
14
        , { &hf_eobi[TRADINGSESSIONSUBID_FH_IDX],
4239
14
              { "TradingSessionSubID", "eobi.tradingsessionsubid",
4240
14
                FT_UINT8, BASE_DEC, VALS(trading_session_sub_id_vals), 0x0,
4241
14
                NULL, HFILL }
4242
14
          }
4243
14
        , { &hf_eobi[TRANSACTTIME_FH_IDX],
4244
14
              { "TransactTime", "eobi.transacttime",
4245
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4246
14
                NULL, HFILL }
4247
14
          }
4248
14
        , { &hf_eobi[TRDMATCHID_FH_IDX],
4249
14
              { "TrdMatchID", "eobi.trdmatchid",
4250
14
                FT_UINT32, BASE_DEC, NULL, 0x0,
4251
14
                NULL, HFILL }
4252
14
          }
4253
14
        , { &hf_eobi[TRDREGTSEXECUTIONTIME_FH_IDX],
4254
14
              { "TrdRegTSExecutionTime", "eobi.trdregtsexecutiontime",
4255
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4256
14
                NULL, HFILL }
4257
14
          }
4258
14
        , { &hf_eobi[TRDREGTSPREVTIMEPRIORITY_FH_IDX],
4259
14
              { "TrdRegTSPrevTimePriority", "eobi.trdregtsprevtimepriority",
4260
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4261
14
                NULL, HFILL }
4262
14
          }
4263
14
        , { &hf_eobi[TRDREGTSTIMEIN_FH_IDX],
4264
14
              { "TrdRegTSTimeIn", "eobi.trdregtstimein",
4265
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4266
14
                NULL, HFILL }
4267
14
          }
4268
14
        , { &hf_eobi[TRDREGTSTIMEPRIORITY_FH_IDX],
4269
14
              { "TrdRegTSTimePriority", "eobi.trdregtstimepriority",
4270
14
                FT_ABSOLUTE_TIME, ABSOLUTE_TIME_UTC, NULL, 0x0,
4271
14
                NULL, HFILL }
4272
14
          }
4273
14
        , { &hf_eobi_dscp_exec_summary,
4274
14
              { "DSCP_ExecSummary", "eobi.dscp_execsummary",
4275
14
                FT_BOOLEAN, 8, NULL, 0x10,
4276
14
                NULL, HFILL }
4277
14
          }
4278
14
        , { &hf_eobi_dscp_improved,
4279
14
              { "DSCP_Improved", "eobi.dscp_improved",
4280
14
                FT_BOOLEAN, 8, NULL, 0x20,
4281
14
                NULL, HFILL }
4282
14
          }
4283
14
        , { &hf_eobi_dscp_widened,
4284
14
              { "DSCP_Widened", "eobi.dscp_widened",
4285
14
                FT_BOOLEAN, 8, NULL, 0x40,
4286
14
                NULL, HFILL }
4287
14
          }
4288
14
    };
4289
14
    static ei_register_info ei[] = {
4290
14
        {
4291
14
            &ei_eobi_counter_overflow,
4292
14
            { "eobi.counter_overflow", PI_PROTOCOL, PI_WARN, "Counter Overflow", EXPFILL }
4293
14
        },
4294
14
        {
4295
14
            &ei_eobi_invalid_template,
4296
14
            { "eobi.invalid_template", PI_PROTOCOL, PI_ERROR, "Invalid Template ID", EXPFILL }
4297
14
        },
4298
14
        {
4299
14
            &ei_eobi_invalid_length,
4300
14
            { "eobi.invalid_length", PI_PROTOCOL, PI_ERROR, "Invalid Body Length", EXPFILL }
4301
14
        },
4302
14
        {
4303
14
            &ei_eobi_missing,
4304
14
            { "eobi.missing", PI_PROTOCOL, PI_WARN, "A required value is missing", EXPFILL }
4305
14
        },
4306
14
        {
4307
14
            &ei_eobi_overused,
4308
14
            { "eobi.overused", PI_PROTOCOL, PI_WARN, "An unused value is set", EXPFILL }
4309
14
        }
4310
14
    };
4311
14
    proto_eobi = proto_register_protocol("Enhanced Order Book Interface 10.0",
4312
14
            "EOBI", "eobi");
4313
14
    expert_module_t *expert_eobi = expert_register_protocol(proto_eobi);
4314
14
    expert_register_field_array(expert_eobi, ei, array_length(ei));
4315
14
    proto_register_field_array(proto_eobi, hf, array_length(hf));
4316
14
    static int * 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 };
4317
14
    proto_register_subtree_array(ett, array_length(ett));
4318
14
    proto_disable_by_default(proto_eobi);
4319
4320
14
    eobi_handle = register_dissector("eobi", dissect_eobi, proto_eobi);
4321
14
}
4322
4323
void
4324
proto_reg_handoff_eobi(void)
4325
14
{
4326
    // cf. N7 Network Access Guide, e.g.
4327
    // https://www.xetra.com/xetra-en/technology/t7/system-documentation/release10-0/Release-10.0-2692700?frag=2692724
4328
    // https://www.xetra.com/resource/blob/2762078/388b727972b5122945eedf0e63c36920/data/N7-Network-Access-Guide-v2.0.59.pdf
4329
4330
4331
14
    static const int ports[] = {
4332
14
        59000, // Snapshot    EUREX US-allowed    PROD
4333
14
        59001, // Incremental EUREX US-allowed    PROD
4334
14
        59032, // Snapshot    EUREX US-restricted PROD
4335
14
        59033, // Incremental EUREX US-restricted PROD
4336
14
        59500, // Snapshot    EUREX US-allowed    SIMU
4337
14
        59501, // Incremental EUREX US-allowed    SIMU
4338
14
        59532, // Snapshot    EUREX US-restricted SIMU
4339
14
        59533, // Incremental EUREX US-restricted SIMU
4340
4341
14
        57000, // Snapshot    FX US-allowed    PROD
4342
14
        57001, // Incremental FX US-allowed    PROD
4343
14
        57032, // Snapshot    FX US-restricted PROD
4344
14
        57033, // Incremental FX US-restricted PROD
4345
14
        57500, // Snapshot    FX US-allowed    SIMU
4346
14
        57501, // Incremental FX US-allowed    SIMU
4347
14
        57532, // Snapshot    FX US-restricted SIMU
4348
14
        57533, // Incremental FX US-restricted SIMU
4349
4350
14
        59000, // Snapshot    Xetra PROD
4351
14
        59001, // Incremental Xetra PROD
4352
14
        59500, // Snapshot    Xetra SIMU
4353
14
        59501, // Incremental Xetra SIMU
4354
4355
14
        56000, // Snapshot    Boerse Frankfurt PROD
4356
14
        56001, // Incremental Boerse Frankfurt PROD
4357
14
        56500, // Snapshot    Boerse Frankfurt SIMU
4358
14
        56501  // Incremental Boerse Frankfurt SIMU
4359
14
    };
4360
350
    for (unsigned i = 0; i < array_length(ports); ++i)
4361
336
        dissector_add_uint("udp.port", ports[i], eobi_handle);
4362
14
}