Coverage Report

Created: 2026-01-02 06:13

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/wireshark/epan/dissectors/packet-mq.c
Line
Count
Source
1
/* packet-mq.c
2
 * Routines for IBM WebSphere MQ packet dissection
3
 *
4
 * metatech <metatechbe@gmail.com>
5
 * Robert Grange <robionekenobi@bluewin.ch>
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
 /*  WebSphere MQ in a nutshell
15
  *
16
  *   IBM WebSphere MQ (formerly IBM MQSeries) is an asynchronous proprietary messaging middleware that is
17
  *    based on message queues.
18
  *   MQ can run on more than 35 platforms, amongst which UNIX, Windows and mainframes.
19
  *   MQ can be transported on top of TCP, UDP, HTTP, NetBIOS, SPX, SNA LU 6.2, DECnet.
20
  *   MQ has language bindings for C, C++, Java, .NET, COBOL, PL/I, OS/390 assembler, TAL, Visual Basic.
21
  *
22
  *   The basic MQ topology is on one side the queue manager which hosts the queues.  On the other side the
23
  *   applications connect to the queue manager, open a queue, and put or get messages to/from that queue.
24
  *
25
  *   The MQ middleware allows very generic operations (send, receive) and can be compared to the
26
  *   socket API in terms of genericity, but it is more abstract and offers higher-level functionalities
27
  *   (eg transactions, ...)
28
  *
29
  *   The MQ middleware is not really intended to be run over public networks between parties
30
  *   that do not know each other in advance, but is rather used on private corporate networks
31
  *   between business applications (it can be compared to a database server for that aspect).
32
  *
33
  *   The wire format of an MQ segment is a sequence of structures.
34
  *   Most structures start with a 4-letter struct identifier.
35
  *   MQ is a fixed-sized format, most fields have maximum lengths defined in the MQ API.
36
  *   MQ is popular on mainframes because it was available before TCP/IP.
37
  *   MQ supports both ASCII-based and EBCDIC-based character sets.
38
  *
39
  *   MQ API documentation is called "WebSphere MQ Application Programming
40
  *   Reference"
41
  *
42
  *   See:
43
  *
44
  *       https://www.ibm.com/docs/en/ibm-mq/7.5?topic=structure-application-programming-reference
45
  *
46
  *   Possible structures combinations :
47
  *   TSH [ ID ^ UID ^ CONN ^ INQ ^ OD ]
48
  *   TSH MSH XQH MD [ PAYLOAD ]
49
  *   TSH [OD] MD [ GMO ^ PMO ] [ [XQH MD] PAYLOAD ]
50
  *   TSH [ SPQU ^ SPPU ^ SPGU ^ SPAU [ SPQI ^ SPQO ^ SPPI ^ SPPO ^ SPGI ^ SPGO ^ SPAI ^ SPAO]]
51
  *   TSH [ XA ] [ XINFO | XID ]
52
  *   where PAYLOAD = [ DH ] [ DLH ] [ MDE ] BUFF
53
  *
54
  *   This dissector is a beta version.  To be improved
55
  *   - Translate the integers/flags into their descriptions
56
  *   - Find the semantics of the unknown fields
57
  *   - Display EBCDIC strings as ASCII
58
  *   - Packets which structures built on different platforms
59
  */
60
61
#include "config.h"
62
63
#include <epan/packet.h>
64
#include <epan/ptvcursor.h>
65
#include <epan/reassemble.h>
66
#include <epan/expert.h>
67
#include <epan/prefs.h>
68
#include <epan/strutil.h>
69
#include <epan/tfs.h>
70
#include <wsutil/array.h>
71
72
#include <wsutil/ws_roundup.h>
73
74
#include "packet-windows-common.h"
75
#include "packet-tcp.h"
76
#include "packet-tls.h"
77
78
#include "packet-mq.h"
79
80
void proto_register_mq(void);
81
void proto_reg_handoff_mq(void);
82
83
static int proto_mq;
84
static int hf_mq_tsh_StructID;
85
static int hf_mq_tsh_mqseglen;
86
static int hf_mq_tsh_convid;
87
static int hf_mq_tsh_requestid;
88
static int hf_mq_tsh_byteorder;
89
static int hf_mq_tsh_opcode;
90
static int hf_mq_tsh_ctlflgs1;
91
92
static int hf_mq_tsh_ctlflgs2;
93
static int hf_mq_tsh_luwid;
94
static int hf_mq_tsh_encoding;
95
96
static int hf_mq_tsh_ccsid;
97
static int hf_mq_tsh_reserved;
98
99
/* Transmission Segment Control Flags 1 */
100
static int hf_mq_tsh_tcf_confirmreq;
101
static int hf_mq_tsh_tcf_error;
102
static int hf_mq_tsh_tcf_reqclose;
103
static int hf_mq_tsh_tcf_closechann;
104
static int hf_mq_tsh_tcf_first;
105
static int hf_mq_tsh_tcf_last;
106
static int hf_mq_tsh_tcf_reqacc;
107
static int hf_mq_tsh_tcf_dlq;
108
static int* const pf_flds_tcf[] =
109
{
110
    &hf_mq_tsh_tcf_dlq,
111
    &hf_mq_tsh_tcf_reqacc,
112
    &hf_mq_tsh_tcf_last,
113
    &hf_mq_tsh_tcf_first,
114
    &hf_mq_tsh_tcf_closechann,
115
    &hf_mq_tsh_tcf_reqclose,
116
    &hf_mq_tsh_tcf_error,
117
    &hf_mq_tsh_tcf_confirmreq,
118
    NULL
119
};
120
121
/* Transmission Segment Control Flags 2 */
122
static int hf_mq_tsh_tcf2_HdrComp;
123
static int hf_mq_tsh_tcf2_MsgComp;
124
static int hf_mq_tsh_tcf2_CSH;
125
static int hf_mq_tsh_tcf2_CmitIntv;
126
static int* const pf_flds_tcf2[] =
127
{
128
    &hf_mq_tsh_tcf2_CmitIntv,
129
    &hf_mq_tsh_tcf2_CSH,
130
    &hf_mq_tsh_tcf2_MsgComp,
131
    &hf_mq_tsh_tcf2_HdrComp,
132
    NULL
133
};
134
135
static int hf_mq_api_replylen;
136
static int hf_mq_api_compcode;
137
static int hf_mq_api_reascode;
138
static int hf_mq_api_objecthdl;
139
static int hf_mq_socket_conversid;
140
static int hf_mq_socket_requestid;
141
static int hf_mq_socket_type;
142
static int hf_mq_socket_parm1;
143
static int hf_mq_socket_parm2;
144
static int hf_mq_msh_StructID;
145
static int hf_mq_msh_seqnum;
146
static int hf_mq_msh_datalength;
147
static int hf_mq_msh_unknown1;
148
static int hf_mq_msh_msglength;
149
static int hf_mq_xqh_StructID;
150
static int hf_mq_xqh_version;
151
static int hf_mq_xqh_remoteq;
152
static int hf_mq_xqh_remoteqmgr;
153
154
static int hf_mq_id_StructID;
155
static int hf_mq_id_FapLevel;
156
static int hf_mq_id_cf1;
157
static int hf_mq_id_ecf1;
158
static int hf_mq_id_ief1;
159
static int hf_mq_id_Reserved;
160
static int hf_mq_id_MaxMsgBatch;
161
static int hf_mq_id_MaxTrSize;
162
static int hf_mq_id_MaxMsgSize;
163
static int hf_mq_id_SeqWrapVal;
164
static int hf_mq_id_channel;
165
static int hf_mq_id_cf2;
166
static int hf_mq_id_ecf2;
167
static int hf_mq_id_ccsid;
168
static int hf_mq_id_qmgrname;
169
static int hf_mq_id_HBInterval;
170
static int hf_mq_id_EFLLength;
171
static int hf_mq_id_ief2;
172
static int hf_mq_id_Reserved1;
173
static int hf_mq_id_HdrCprsLst;
174
static int hf_mq_id_MsgCprsLst;
175
static int hf_mq_id_Reserved2;
176
static int hf_mq_id_SSLKeyRst;
177
static int hf_mq_id_ConvBySkt;
178
static int hf_mq_id_cf3;
179
static int hf_mq_id_ecf3;
180
static int hf_mq_id_Reserved3;
181
static int hf_mq_id_ProcessId;
182
static int hf_mq_id_ThreadId;
183
static int hf_mq_id_TraceId;
184
static int hf_mq_id_ProdId;
185
static int hf_mq_id_mqmid;
186
static int hf_mq_id_pal;
187
static int hf_mq_id_r;
188
189
/* Initial Data - Capability Flag 1 */
190
static int hf_mq_id_cf1_msgseq;
191
static int hf_mq_id_cf1_convcap;
192
static int hf_mq_id_cf1_splitmsg;
193
static int hf_mq_id_cf1_RqstInit;
194
static int hf_mq_id_cf1_RqstSecu;
195
static int hf_mq_id_cf1_mqreq;
196
static int hf_mq_id_cf1_svrsec;
197
static int hf_mq_id_cf1_runtime;
198
static int* const pf_flds_cf1[] =
199
{
200
    &hf_mq_id_cf1_runtime,
201
    &hf_mq_id_cf1_svrsec,
202
    &hf_mq_id_cf1_mqreq,
203
    &hf_mq_id_cf1_RqstSecu,
204
    &hf_mq_id_cf1_RqstInit,
205
    &hf_mq_id_cf1_splitmsg,
206
    &hf_mq_id_cf1_convcap,
207
    &hf_mq_id_cf1_msgseq,
208
    NULL
209
};
210
211
/* Initial Data - Init Error Flag 1 */
212
static int hf_mq_id_ief1_ccsid;
213
static int hf_mq_id_ief1_enc;
214
static int hf_mq_id_ief1_mxtrsz;
215
static int hf_mq_id_ief1_fap;
216
static int hf_mq_id_ief1_mxmsgsz;
217
static int hf_mq_id_ief1_mxmsgpb;
218
static int hf_mq_id_ief1_seqwrap;
219
static int hf_mq_id_ief1_hbint;
220
static int* const pf_flds_ef1[] =
221
{
222
    &hf_mq_id_ief1_hbint,
223
    &hf_mq_id_ief1_seqwrap,
224
    &hf_mq_id_ief1_mxmsgpb,
225
    &hf_mq_id_ief1_mxmsgsz,
226
    &hf_mq_id_ief1_fap,
227
    &hf_mq_id_ief1_mxtrsz,
228
    &hf_mq_id_ief1_enc,
229
    &hf_mq_id_ief1_ccsid,
230
    NULL
231
};
232
233
/* Initial Data - Capability Flag 2 */
234
static int hf_mq_id_cf2_CanDstLst;
235
static int hf_mq_id_cf2_FstMsgReq;
236
static int hf_mq_id_cf2_RespConv;
237
static int hf_mq_id_cf2_XARequest;
238
static int hf_mq_id_cf2_XARunTApp;
239
static int hf_mq_id_cf2_SPIRqst;
240
static int hf_mq_id_cf2_DualUOW;
241
static int hf_mq_id_cf2_CanTrcRte;
242
static int* const pf_flds_cf2[] =
243
{
244
    &hf_mq_id_cf2_CanTrcRte,
245
    &hf_mq_id_cf2_SPIRqst,
246
    &hf_mq_id_cf2_XARunTApp,
247
    &hf_mq_id_cf2_XARequest,
248
    &hf_mq_id_cf2_DualUOW,
249
    &hf_mq_id_cf2_RespConv,
250
    &hf_mq_id_cf2_FstMsgReq,
251
    &hf_mq_id_cf2_CanDstLst,
252
    NULL
253
};
254
255
/* Initial Data - Init Error Flag 2 */
256
static int hf_mq_id_ief2_HdrCmpLst;
257
static int hf_mq_id_ief2_MsgCmpLst;
258
static int hf_mq_id_ief2_SSLReset;
259
static int* const pf_flds_ef2[] =
260
{
261
    &hf_mq_id_ief2_SSLReset,
262
    &hf_mq_id_ief2_MsgCmpLst,
263
    &hf_mq_id_ief2_HdrCmpLst,
264
    NULL
265
};
266
267
/* Initial Data - Capability Flag 3 */
268
static int hf_mq_id_cf3_CanMsgPrp;
269
static int hf_mq_id_cf3_CanMulticast;
270
static int hf_mq_id_cf3_PropIntSep;
271
static int hf_mq_id_cf3_MPlxSyGet;
272
static int hf_mq_id_cf3_ProtAlgorit;
273
static int hf_mq_id_cf3_CanGenConnTag;
274
275
static int* const pf_flds_cf3[] =
276
{
277
    &hf_mq_id_cf3_CanGenConnTag,
278
    &hf_mq_id_cf3_ProtAlgorit,
279
    &hf_mq_id_cf3_MPlxSyGet,
280
    &hf_mq_id_cf3_PropIntSep,
281
    &hf_mq_id_cf3_CanMulticast,
282
    &hf_mq_id_cf3_CanMsgPrp,
283
    NULL
284
};
285
286
static int hf_mq_uid_StructID;
287
static int hf_mq_uid_userid;
288
static int hf_mq_uid_password;
289
static int hf_mq_uid_longuserid;
290
static int hf_mq_sidlen;
291
static int hf_mq_sidtyp;
292
static int hf_mq_securityid;
293
294
static int hf_mq_conn_QMgr;
295
static int hf_mq_conn_appname;
296
static int hf_mq_conn_apptype;
297
static int hf_mq_conn_acttoken;
298
static int hf_mq_conn_Xoptions;
299
static int hf_mq_conn_options;
300
301
/* Version 1 */
302
static int hf_mq_fapmqcno_structid;
303
static int hf_mq_fapmqcno_version;
304
static int hf_mq_fapmqcno_capflags;
305
static int hf_mq_fapmqcno_conntag;
306
/* Version 2 */
307
static int hf_mq_fapmqcno_retconntag;
308
/* Version 3 */
309
static int hf_mq_fapmqcno_type;
310
static int hf_mq_fapmqcno_timeout;
311
static int hf_mq_fapmqcno_balopts;
312
/* Version 4 */
313
314
/* Version 1 */
315
static int hf_mq_fcno_StructID;
316
static int hf_mq_fcno_version;
317
static int hf_mq_fcno_options;
318
319
320
/* FCNO connect options */
321
322
static int hf_mq_fcno_opt_FASTPATH_BINDING;
323
static int hf_mq_fcno_opt_SERIALIZE_CONNTAG_QMGR;
324
static int hf_mq_fcno_opt_SERIALIZE_CONNTAG_QSG;
325
static int hf_mq_fcno_opt_RESTRICT_CONNTAG_QMGR;
326
static int hf_mq_fcno_opt_RESTRICT_CONNTAG_QSG;
327
static int hf_mq_fcno_opt_HANDLE_SHARE_NONE;
328
static int hf_mq_fcno_opt_HANDLE_SHARE_BLOCK;
329
static int hf_mq_fcno_opt_HANDLE_SHARE_NOBLOCK;
330
static int hf_mq_fcno_opt_SHARED_BINDING;
331
static int hf_mq_fcno_opt_ISOLATE_BINDING;
332
static int hf_mq_fcno_opt_LOCAL_BINDING;
333
static int hf_mq_fcno_opt_CLIENT_BINDING;
334
static int hf_mq_fcno_opt_ACCNT_MQI_ENABLED;
335
static int hf_mq_fcno_opt_ACCNT_MQI_DISABLED;
336
static int hf_mq_fcno_opt_ACCNT_Q_ENABLED;
337
static int hf_mq_fcno_opt_ACCNT_Q_DISABLED;
338
static int hf_mq_fcno_opt_NO_CONV_SHARING;
339
static int hf_mq_fcno_opt_ALL_CONVS_SHARE;
340
static int hf_mq_fcno_opt_CD_FOR_OUTPUT_ONLY;
341
static int hf_mq_fcno_opt_USE_CD_SELECTION;
342
static int hf_mq_fcno_opt_GENERATE_CONN_TAG;
343
static int hf_mq_fcno_opt_RECONNECT;
344
static int hf_mq_fcno_opt_RECONNECT_DISABLED;
345
static int hf_mq_fcno_opt_RECONNECT_Q_MGR;
346
static int hf_mq_fcno_opt_ACTIVITY_TRACE_ENABLED;
347
static int hf_mq_fcno_opt_ACTIVITY_TRACE_DISABLED;
348
349
static int* const pf_flds_fcno_opt[] =
350
{
351
    &hf_mq_fcno_opt_ACTIVITY_TRACE_DISABLED,
352
    &hf_mq_fcno_opt_ACTIVITY_TRACE_ENABLED,
353
    &hf_mq_fcno_opt_RECONNECT_Q_MGR,
354
    &hf_mq_fcno_opt_RECONNECT_DISABLED,
355
    &hf_mq_fcno_opt_RECONNECT,
356
    &hf_mq_fcno_opt_GENERATE_CONN_TAG,
357
    &hf_mq_fcno_opt_USE_CD_SELECTION,
358
    &hf_mq_fcno_opt_CD_FOR_OUTPUT_ONLY,
359
    &hf_mq_fcno_opt_ALL_CONVS_SHARE,
360
    &hf_mq_fcno_opt_NO_CONV_SHARING,
361
    &hf_mq_fcno_opt_ACCNT_Q_DISABLED,
362
    &hf_mq_fcno_opt_ACCNT_Q_ENABLED,
363
    &hf_mq_fcno_opt_ACCNT_MQI_DISABLED,
364
    &hf_mq_fcno_opt_ACCNT_MQI_ENABLED,
365
    &hf_mq_fcno_opt_CLIENT_BINDING,
366
    &hf_mq_fcno_opt_LOCAL_BINDING,
367
    &hf_mq_fcno_opt_ISOLATE_BINDING,
368
    &hf_mq_fcno_opt_SHARED_BINDING,
369
    &hf_mq_fcno_opt_HANDLE_SHARE_NOBLOCK,
370
    &hf_mq_fcno_opt_HANDLE_SHARE_BLOCK,
371
    &hf_mq_fcno_opt_HANDLE_SHARE_NONE,
372
    &hf_mq_fcno_opt_RESTRICT_CONNTAG_QSG,
373
    &hf_mq_fcno_opt_RESTRICT_CONNTAG_QMGR,
374
    &hf_mq_fcno_opt_SERIALIZE_CONNTAG_QSG,
375
    &hf_mq_fcno_opt_SERIALIZE_CONNTAG_QMGR,
376
    &hf_mq_fcno_opt_FASTPATH_BINDING,
377
    NULL
378
};
379
380
/* ConTag_xxx */
381
static int hf_mq_fcno_contagsr;
382
383
/* Version 2 */
384
static int hf_mq_fcno_mqcdofs;
385
static int hf_mq_fcno_mqcdptr;
386
static int hf_mq_fcno_mqcdptr64;
387
388
/* Version 3 */
389
static int hf_mq_fcno_conn_tag;
390
391
/* Version 4 */
392
static int hf_mq_fcno_sslcfgofs;
393
static int hf_mq_fcno_sslcfgptr;
394
static int hf_mq_fcno_sslcfgptr64;
395
396
/* Version 5 */
397
static int hf_mq_fcno_connid;
398
static int hf_mq_fcno_secprmofs;
399
static int hf_mq_fcno_secprmptr;
400
static int hf_mq_fcno_secprmptr64;
401
402
/* Version 6 */
403
static int hf_mq_fcno_ccdturlofs;
404
static int hf_mq_fcno_ccdturlptr;
405
static int hf_mq_fcno_ccdturlptr64;
406
static int hf_mq_fcno_ccdturllen;
407
static int hf_mq_fcno_reserved;
408
409
/* Version 7 */
410
static int hf_mq_fcno_applname;
411
static int hf_mq_fcno_reserved2;
412
413
/* Version 8 */
414
static int hf_mq_fcno_balprmofs;
415
static int hf_mq_fcno_balprmptr;
416
static int hf_mq_fcno_balprmptr64;
417
static int hf_mq_fcno_reserved3;
418
419
/* After FCNO structure */
420
static int hf_mq_conn_prodid;
421
static int hf_mq_conn_retconn_tag;
422
static int hf_mq_conn_unknowbyt;
423
static int hf_mq_conn_unknowstr;
424
static int hf_mq_conn_mqmid;
425
426
static int hf_mq_inq_nbsel;
427
static int hf_mq_inq_nbint;
428
static int hf_mq_inq_charlen;
429
static int hf_mq_inq_sel;
430
static int hf_mq_inq_intvalue;
431
static int hf_mq_inq_charvalues;
432
433
static int hf_mq_spi_verb;
434
static int hf_mq_spi_version;
435
static int hf_mq_spi_length;
436
static int hf_mq_spi_base_StructID;
437
static int hf_mq_spi_base_version;
438
static int hf_mq_spi_base_length;
439
static int hf_mq_spi_spqo_nbverb;
440
static int hf_mq_spi_spqo_verbid;
441
static int hf_mq_spi_spqo_maxiover;
442
static int hf_mq_spi_spqo_maxinver;
443
static int hf_mq_spi_spqo_maxouver;
444
static int hf_mq_spi_spqo_flags;
445
static int hf_mq_spi_spai_mode;
446
static int hf_mq_spi_spai_unknown1;
447
static int hf_mq_spi_spai_unknown2;
448
static int hf_mq_spi_spai_msgid;
449
static int hf_mq_spi_spgi_batchsz;
450
static int hf_mq_spi_spgi_batchint;
451
static int hf_mq_spi_spgi_maxmsgsz;
452
static int hf_mq_spi_spgo_options;
453
static int hf_mq_spi_spgo_size;
454
455
static int hf_mq_spi_opt_blank;
456
static int hf_mq_spi_opt_syncp;
457
static int hf_mq_spi_opt_deferred;
458
static int* const pf_flds_spiopt[] =
459
{
460
    &hf_mq_spi_opt_deferred,
461
    &hf_mq_spi_opt_syncp,
462
    &hf_mq_spi_opt_blank,
463
    NULL
464
};
465
466
static int hf_mq_put_length;
467
468
static int hf_mq_close_options;
469
static int hf_mq_close_options_DELETE;
470
static int hf_mq_close_options_DELETE_PURGE;
471
static int hf_mq_close_options_KEEP_SUB;
472
static int hf_mq_close_options_REMOVE_SUB;
473
static int hf_mq_close_options_QUIESCE;
474
static int* const pf_flds_clsopt[] =
475
{
476
    &hf_mq_close_options_QUIESCE,
477
    &hf_mq_close_options_REMOVE_SUB,
478
    &hf_mq_close_options_KEEP_SUB,
479
    &hf_mq_close_options_DELETE_PURGE,
480
    &hf_mq_close_options_DELETE,
481
    NULL
482
};
483
484
static int hf_mq_open_options;
485
static int hf_mq_open_options_INPUT_SHARED;
486
static int hf_mq_open_options_INPUT_AS_Q_DEF;
487
static int hf_mq_open_options_INPUT_EXCLUSIVE;
488
static int hf_mq_open_options_BROWSE;
489
static int hf_mq_open_options_OUTPUT;
490
static int hf_mq_open_options_INQUIRE;
491
static int hf_mq_open_options_SET;
492
static int hf_mq_open_options_SAVE_ALL_CTX;
493
static int hf_mq_open_options_PASS_IDENT_CTX;
494
static int hf_mq_open_options_PASS_ALL_CTX;
495
static int hf_mq_open_options_SET_IDENT_CTX;
496
static int hf_mq_open_options_SET_ALL_CONTEXT;
497
static int hf_mq_open_options_ALT_USER_AUTH;
498
static int hf_mq_open_options_FAIL_IF_QUIESC;
499
static int hf_mq_open_options_BIND_ON_OPEN;
500
static int hf_mq_open_options_BIND_NOT_FIXED;
501
static int hf_mq_open_options_RESOLVE_NAMES;
502
static int hf_mq_open_options_CO_OP;
503
static int hf_mq_open_options_RESOLVE_LOCAL_Q;
504
static int hf_mq_open_options_NO_READ_AHEAD;
505
static int hf_mq_open_options_READ_AHEAD;
506
static int hf_mq_open_options_NO_MULTICAST;
507
static int hf_mq_open_options_BIND_ON_GROUP;
508
static int* const pf_flds_opnopt[] =
509
{
510
    &hf_mq_open_options_BIND_ON_GROUP,
511
    &hf_mq_open_options_NO_MULTICAST,
512
    &hf_mq_open_options_READ_AHEAD,
513
    &hf_mq_open_options_NO_READ_AHEAD,
514
    &hf_mq_open_options_RESOLVE_LOCAL_Q,
515
    &hf_mq_open_options_CO_OP,
516
    &hf_mq_open_options_RESOLVE_NAMES,
517
    &hf_mq_open_options_BIND_NOT_FIXED,
518
    &hf_mq_open_options_BIND_ON_OPEN,
519
    &hf_mq_open_options_FAIL_IF_QUIESC,
520
    &hf_mq_open_options_ALT_USER_AUTH,
521
    &hf_mq_open_options_SET_ALL_CONTEXT,
522
    &hf_mq_open_options_SET_IDENT_CTX,
523
    &hf_mq_open_options_PASS_ALL_CTX,
524
    &hf_mq_open_options_PASS_IDENT_CTX,
525
    &hf_mq_open_options_SAVE_ALL_CTX,
526
    &hf_mq_open_options_SET,
527
    &hf_mq_open_options_INQUIRE,
528
    &hf_mq_open_options_OUTPUT,
529
    &hf_mq_open_options_BROWSE,
530
    &hf_mq_open_options_INPUT_EXCLUSIVE,
531
    &hf_mq_open_options_INPUT_SHARED,
532
    &hf_mq_open_options_INPUT_AS_Q_DEF,
533
    NULL
534
};
535
536
static int hf_mq_fopa_StructID;
537
static int hf_mq_fopa_version;
538
static int hf_mq_fopa_length;
539
static int hf_mq_fopa_DefPersistence;
540
static int hf_mq_fopa_DefPutRespType;
541
static int hf_mq_fopa_DefReadAhead;
542
static int hf_mq_fopa_PropertyControl;
543
static int hf_mq_fopa_Unknown;
544
545
static int hf_mq_fcmi_StructID;
546
static int hf_mq_fcmi_unknown;
547
548
static int hf_mq_ping_length;
549
static int hf_mq_ping_buffer;
550
static int hf_mq_reset_length;
551
static int hf_mq_reset_seqnum;
552
static int hf_mq_status_length;
553
static int hf_mq_status_code;
554
static int hf_mq_status_value;
555
556
static int hf_mq_caut_StructID;
557
static int hf_mq_caut_AuthType;
558
static int hf_mq_caut_UsrMaxLen;
559
static int hf_mq_caut_PwdMaxLen;
560
static int hf_mq_caut_UsrLength;
561
static int hf_mq_caut_PwdLength;
562
static int hf_mq_caut_usr;
563
static int hf_mq_caut_psw;
564
565
static int hf_mq_od_StructID;
566
static int hf_mq_od_version;
567
static int hf_mq_od_objecttype;
568
static int hf_mq_od_objectname;
569
static int hf_mq_od_objqmgrname;
570
static int hf_mq_od_dynqname;
571
static int hf_mq_od_altuserid;
572
static int hf_mq_od_recspresent;
573
static int hf_mq_od_knowndstcnt;
574
static int hf_mq_od_unknowdstcnt;
575
static int hf_mq_od_invaldstcnt;
576
static int hf_mq_od_objrecofs;
577
static int hf_mq_od_resprecofs;
578
static int hf_mq_od_objrecptr;
579
static int hf_mq_od_resprecptr;
580
static int hf_mq_od_altsecurid;
581
static int hf_mq_od_resolvqname;
582
static int hf_mq_od_resolvqmgrnm;
583
static int hf_mq_od_resolvobjtyp;
584
585
static int hf_mq_or_objname;
586
static int hf_mq_or_objqmgrname;
587
static int hf_mq_rr_compcode;
588
static int hf_mq_rr_reascode;
589
static int hf_mq_pmr_msgid;
590
static int hf_mq_pmr_correlid;
591
static int hf_mq_pmr_groupid;
592
static int hf_mq_pmr_feedback;
593
static int hf_mq_pmr_acttoken;
594
static int hf_mq_md_StructID;
595
static int hf_mq_md_version;
596
static int hf_mq_md_report;
597
static int hf_mq_md_msgtype;
598
static int hf_mq_md_expiry;
599
static int hf_mq_md_feedback;
600
static int hf_mq_md_encoding;
601
static int hf_mq_md_ccsid;
602
static int hf_mq_md_format;
603
static int hf_mq_md_priority;
604
static int hf_mq_md_persistence;
605
static int hf_mq_md_msgid;
606
static int hf_mq_md_correlid;
607
static int hf_mq_md_backoutcnt;
608
static int hf_mq_md_replytoq;
609
static int hf_mq_md_replytoqmgr;
610
static int hf_mq_md_userid;
611
static int hf_mq_md_acttoken;
612
static int hf_mq_md_appliddata;
613
static int hf_mq_md_putappltype;
614
static int hf_mq_md_putapplname;
615
static int hf_mq_md_putdate;
616
static int hf_mq_md_puttime;
617
static int hf_mq_md_apporigdata;
618
static int hf_mq_md_groupid;
619
static int hf_mq_md_msgseqnumber;
620
static int hf_mq_md_offset;
621
static int hf_mq_md_msgflags;
622
static int hf_mq_md_origlen;
623
static int hf_mq_dlh_StructID;
624
static int hf_mq_dlh_version;
625
static int hf_mq_dlh_reason;
626
static int hf_mq_dlh_destq;
627
static int hf_mq_dlh_destqmgr;
628
static int hf_mq_dlh_encoding;
629
static int hf_mq_dlh_ccsid;
630
static int hf_mq_dlh_format;
631
static int hf_mq_dlh_putappltype;
632
static int hf_mq_dlh_putapplname;
633
static int hf_mq_dlh_putdate;
634
static int hf_mq_dlh_puttime;
635
636
static int hf_mq_gmo_StructID;
637
static int hf_mq_gmo_version;
638
static int hf_mq_gmo_options;
639
static int hf_mq_gmo_waitinterval;
640
static int hf_mq_gmo_signal1;
641
static int hf_mq_gmo_signal2;
642
static int hf_mq_gmo_resolvqname;
643
static int hf_mq_gmo_matchoptions;
644
static int hf_mq_gmo_groupstatus;
645
static int hf_mq_gmo_segmstatus;
646
static int hf_mq_gmo_segmentation;
647
static int hf_mq_gmo_reserved;
648
static int hf_mq_gmo_msgtoken;
649
static int hf_mq_gmo_returnedlen;
650
static int hf_mq_gmo_reserved2;
651
static int hf_mq_gmo_msghandle;
652
653
static int hf_mq_gmo_options_PROPERTIES_COMPATIBILITY;
654
static int hf_mq_gmo_options_PROPERTIES_IN_HANDLE;
655
static int hf_mq_gmo_options_NO_PROPERTIES;
656
static int hf_mq_gmo_options_PROPERTIES_FORCE_MQRFH2;
657
static int hf_mq_gmo_options_UNMARKED_BROWSE_MSG;
658
static int hf_mq_gmo_options_UNMARK_BROWSE_HANDLE;
659
static int hf_mq_gmo_options_UNMARK_BROWSE_CO_OP;
660
static int hf_mq_gmo_options_MARK_BROWSE_CO_OP;
661
static int hf_mq_gmo_options_MARK_BROWSE_HANDLE;
662
static int hf_mq_gmo_options_ALL_SEGMENTS_AVAILABLE;
663
static int hf_mq_gmo_options_ALL_MSGS_AVAILABLE;
664
static int hf_mq_gmo_options_COMPLETE_MSG;
665
static int hf_mq_gmo_options_LOGICAL_ORDER;
666
static int hf_mq_gmo_options_CONVERT;
667
static int hf_mq_gmo_options_FAIL_IF_QUIESCING;
668
static int hf_mq_gmo_options_SYNCPOINT_IF_PERSISTENT;
669
static int hf_mq_gmo_options_BROWSE_MSG_UNDER_CURSOR;
670
static int hf_mq_gmo_options_UNLOCK;
671
static int hf_mq_gmo_options_LOCK;
672
static int hf_mq_gmo_options_MSG_UNDER_CURSOR;
673
static int hf_mq_gmo_options_MARK_SKIP_BACKOUT;
674
static int hf_mq_gmo_options_ACCEPT_TRUNCATED_MSG;
675
static int hf_mq_gmo_options_BROWSE_NEXT;
676
static int hf_mq_gmo_options_BROWSE_FIRST;
677
static int hf_mq_gmo_options_SET_SIGNAL;
678
static int hf_mq_gmo_options_NO_SYNCPOINT;
679
static int hf_mq_gmo_options_SYNCPOINT;
680
static int hf_mq_gmo_options_WAIT;
681
static int* const pf_flds_gmoopt[] =
682
{
683
    &hf_mq_gmo_options_PROPERTIES_COMPATIBILITY,
684
    &hf_mq_gmo_options_PROPERTIES_IN_HANDLE,
685
    &hf_mq_gmo_options_NO_PROPERTIES,
686
    &hf_mq_gmo_options_PROPERTIES_FORCE_MQRFH2,
687
    &hf_mq_gmo_options_UNMARKED_BROWSE_MSG,
688
    &hf_mq_gmo_options_UNMARK_BROWSE_HANDLE,
689
    &hf_mq_gmo_options_UNMARK_BROWSE_CO_OP,
690
    &hf_mq_gmo_options_MARK_BROWSE_CO_OP,
691
    &hf_mq_gmo_options_MARK_BROWSE_HANDLE,
692
    &hf_mq_gmo_options_ALL_SEGMENTS_AVAILABLE,
693
    &hf_mq_gmo_options_ALL_MSGS_AVAILABLE,
694
    &hf_mq_gmo_options_COMPLETE_MSG,
695
    &hf_mq_gmo_options_LOGICAL_ORDER,
696
    &hf_mq_gmo_options_CONVERT,
697
    &hf_mq_gmo_options_FAIL_IF_QUIESCING,
698
    &hf_mq_gmo_options_SYNCPOINT_IF_PERSISTENT,
699
    &hf_mq_gmo_options_BROWSE_MSG_UNDER_CURSOR,
700
    &hf_mq_gmo_options_UNLOCK,
701
    &hf_mq_gmo_options_LOCK,
702
    &hf_mq_gmo_options_MSG_UNDER_CURSOR,
703
    &hf_mq_gmo_options_MARK_SKIP_BACKOUT,
704
    &hf_mq_gmo_options_ACCEPT_TRUNCATED_MSG,
705
    &hf_mq_gmo_options_BROWSE_NEXT,
706
    &hf_mq_gmo_options_BROWSE_FIRST,
707
    &hf_mq_gmo_options_SET_SIGNAL,
708
    &hf_mq_gmo_options_NO_SYNCPOINT,
709
    &hf_mq_gmo_options_SYNCPOINT,
710
    &hf_mq_gmo_options_WAIT,
711
    NULL
712
};
713
714
static int hf_mq_gmo_matchoptions_MATCH_MSG_TOKEN;
715
static int hf_mq_gmo_matchoptions_MATCH_OFFSET;
716
static int hf_mq_gmo_matchoptions_MATCH_MSG_SEQ_NUMBER;
717
static int hf_mq_gmo_matchoptions_MATCH_GROUP_ID;
718
static int hf_mq_gmo_matchoptions_MATCH_CORREL_ID;
719
static int hf_mq_gmo_matchoptions_MATCH_MSG_ID;
720
static int* const pf_flds_mtchopt[] =
721
{
722
    &hf_mq_gmo_matchoptions_MATCH_MSG_TOKEN,
723
    &hf_mq_gmo_matchoptions_MATCH_OFFSET,
724
    &hf_mq_gmo_matchoptions_MATCH_MSG_SEQ_NUMBER,
725
    &hf_mq_gmo_matchoptions_MATCH_GROUP_ID,
726
    &hf_mq_gmo_matchoptions_MATCH_CORREL_ID,
727
    &hf_mq_gmo_matchoptions_MATCH_MSG_ID,
728
    NULL
729
};
730
731
static int hf_mq_lpoo_StructID;
732
static int hf_mq_lpoo_version;
733
static int hf_mq_lpoo_lpiopts;
734
static int hf_mq_lpoo_defpersist;
735
static int hf_mq_lpoo_defputresptype;
736
static int hf_mq_lpoo_defreadahead;
737
static int hf_mq_lpoo_propertyctl;
738
static int hf_mq_lpoo_qprotect;
739
static int hf_mq_lpoo_qprotect_val1;
740
static int hf_mq_lpoo_qprotect_val2;
741
742
static int hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT;
743
static int hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT;
744
static int hf_mq_lpoo_lpiopts_SAVE_USER_CTXT;
745
static int* const pf_flds_lpooopt[] =
746
{
747
    &hf_mq_lpoo_lpiopts_SAVE_USER_CTXT,
748
    &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT,
749
    &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT,
750
    NULL
751
};
752
753
754
static int hf_mq_charv_vsptr;
755
static int hf_mq_charv_vsoffset;
756
static int hf_mq_charv_vsbufsize;
757
static int hf_mq_charv_vslength;
758
static int hf_mq_charv_vsccsid;
759
static int hf_mq_charv_vsvalue;
760
761
static int hf_mq_pmo_StructID;
762
static int hf_mq_pmo_version;
763
static int hf_mq_pmo_options;
764
static int hf_mq_pmo_timeout;
765
static int hf_mq_pmo_context;
766
static int hf_mq_pmo_knowndstcnt;
767
static int hf_mq_pmo_unkndstcnt;
768
static int hf_mq_pmo_invaldstcnt;
769
static int hf_mq_pmo_resolvqname;
770
static int hf_mq_pmo_resolvqmgr;
771
static int hf_mq_pmo_recspresent;
772
static int hf_mq_pmo_putmsgrecfld;
773
static int hf_mq_pmo_putmsgrecofs;
774
static int hf_mq_pmo_resprecofs;
775
static int hf_mq_pmo_putmsgrecptr;
776
static int hf_mq_pmo_resprecptr;
777
static int hf_mq_pmo_originalmsghandle;
778
static int hf_mq_pmo_newmsghandle;
779
static int hf_mq_pmo_action;
780
static int hf_mq_pmo_publevel;
781
782
static int hf_mq_xa_length;
783
static int hf_mq_xa_returnvalue;
784
static int hf_mq_xa_tmflags;
785
static int hf_mq_xa_rmid;
786
static int hf_mq_xa_count;
787
static int hf_mq_xa_xid_formatid;
788
static int hf_mq_xa_xid_glbxid_len;
789
static int hf_mq_xa_xid_brq_length;
790
static int hf_mq_xa_xid_globalxid;
791
static int hf_mq_xa_xid_brq;
792
static int hf_mq_xa_xainfo_length;
793
static int hf_mq_xa_xainfo_value;
794
795
static int hf_mq_pmo_options_NOT_OWN_SUBS;
796
static int hf_mq_pmo_options_SUPPRESS_REPLYTO;
797
static int hf_mq_pmo_options_SCOPE_QMGR;
798
static int hf_mq_pmo_options_MD_FOR_OUTPUT_ONLY;
799
static int hf_mq_pmo_options_RETAIN;
800
static int hf_mq_pmo_options_WARN_IF_NO_SUBS_MATCHED;
801
static int hf_mq_pmo_options_RESOLVE_LOCAL_Q;
802
static int hf_mq_pmo_options_SYNC_RESPONSE;
803
static int hf_mq_pmo_options_ASYNC_RESPONSE;
804
static int hf_mq_pmo_options_LOGICAL_ORDER;
805
static int hf_mq_pmo_options_NO_CONTEXT;
806
static int hf_mq_pmo_options_FAIL_IF_QUIESCING;
807
static int hf_mq_pmo_options_ALTERNATE_USER_AUTHORITY;
808
static int hf_mq_pmo_options_SET_ALL_CONTEXT;
809
static int hf_mq_pmo_options_SET_IDENTITY_CONTEXT;
810
static int hf_mq_pmo_options_PASS_ALL_CONTEXT;
811
static int hf_mq_pmo_options_PASS_IDENTITY_CONTEXT;
812
static int hf_mq_pmo_options_NEW_CORREL_ID;
813
static int hf_mq_pmo_options_NEW_MSG_ID;
814
static int hf_mq_pmo_options_DEFAULT_CONTEXT;
815
static int hf_mq_pmo_options_NO_SYNCPOINT;
816
static int hf_mq_pmo_options_SYNCPOINT;
817
static int* const pf_flds_pmoopt[] =
818
{
819
    &hf_mq_pmo_options_NOT_OWN_SUBS,
820
    &hf_mq_pmo_options_SUPPRESS_REPLYTO,
821
    &hf_mq_pmo_options_SCOPE_QMGR,
822
    &hf_mq_pmo_options_MD_FOR_OUTPUT_ONLY,
823
    &hf_mq_pmo_options_RETAIN,
824
    &hf_mq_pmo_options_WARN_IF_NO_SUBS_MATCHED,
825
    &hf_mq_pmo_options_RESOLVE_LOCAL_Q,
826
    &hf_mq_pmo_options_SYNC_RESPONSE,
827
    &hf_mq_pmo_options_ASYNC_RESPONSE,
828
    &hf_mq_pmo_options_LOGICAL_ORDER,
829
    &hf_mq_pmo_options_NO_CONTEXT,
830
    &hf_mq_pmo_options_FAIL_IF_QUIESCING,
831
    &hf_mq_pmo_options_ALTERNATE_USER_AUTHORITY,
832
    &hf_mq_pmo_options_SET_ALL_CONTEXT,
833
    &hf_mq_pmo_options_SET_IDENTITY_CONTEXT,
834
    &hf_mq_pmo_options_PASS_ALL_CONTEXT,
835
    &hf_mq_pmo_options_PASS_IDENTITY_CONTEXT,
836
    &hf_mq_pmo_options_NEW_CORREL_ID,
837
    &hf_mq_pmo_options_NEW_MSG_ID,
838
    &hf_mq_pmo_options_DEFAULT_CONTEXT,
839
    &hf_mq_pmo_options_NO_SYNCPOINT,
840
    &hf_mq_pmo_options_SYNCPOINT,
841
    NULL
842
};
843
844
static int hf_mq_xa_tmflags_join;
845
static int hf_mq_xa_tmflags_endrscan;
846
static int hf_mq_xa_tmflags_startrscan;
847
static int hf_mq_xa_tmflags_suspend;
848
static int hf_mq_xa_tmflags_success;
849
static int hf_mq_xa_tmflags_resume;
850
static int hf_mq_xa_tmflags_fail;
851
static int hf_mq_xa_tmflags_onephase;
852
static int* const pf_flds_tmflags[] =
853
{
854
    &hf_mq_xa_tmflags_onephase,
855
    &hf_mq_xa_tmflags_fail,
856
    &hf_mq_xa_tmflags_resume,
857
    &hf_mq_xa_tmflags_success,
858
    &hf_mq_xa_tmflags_suspend,
859
    &hf_mq_xa_tmflags_startrscan,
860
    &hf_mq_xa_tmflags_endrscan,
861
    &hf_mq_xa_tmflags_join,
862
    NULL
863
};
864
865
static int hf_mq_msgreq_version;
866
static int hf_mq_msgreq_handle;
867
static int hf_mq_msgreq_RecvBytes;
868
static int hf_mq_msgreq_RqstBytes;
869
static int hf_mq_msgreq_MaxMsgLen;
870
static int hf_mq_msgreq_WaitIntrv;
871
static int hf_mq_msgreq_QueStatus;
872
static int hf_mq_msgreq_RqstFlags;
873
static int hf_mq_msgreq_GlbMsgIdx;
874
static int hf_mq_msgreq_SelectIdx;
875
static int hf_mq_msgreq_MQMDVers;
876
static int hf_mq_msgreq_ccsid;
877
static int hf_mq_msgreq_encoding;
878
static int hf_mq_msgreq_MsgSeqNum;
879
static int hf_mq_msgreq_offset;
880
static int hf_mq_msgreq_mtchMsgId;
881
static int hf_mq_msgreq_mtchCorId;
882
static int hf_mq_msgreq_mtchGrpid;
883
static int hf_mq_msgreq_mtchMsgTk;
884
885
static int hf_mq_msgreq_flags_selection;
886
static int hf_mq_msgreq_flags_F00000008;
887
static int hf_mq_msgreq_flags_F00000004;
888
static int hf_mq_msgreq_flags_F00000002;
889
static int* const pf_flds_msgreq_flags[] =
890
{
891
    &hf_mq_msgreq_flags_selection,
892
    &hf_mq_msgreq_flags_F00000008,
893
    &hf_mq_msgreq_flags_F00000004,
894
    &hf_mq_msgreq_flags_F00000002,
895
    NULL
896
};
897
898
static int hf_mq_msgasy_version;
899
static int hf_mq_msgasy_handle;
900
static int hf_mq_msgasy_MsgIndex;
901
static int hf_mq_msgasy_GlbMsgIdx;
902
static int hf_mq_msgasy_SegLength;
903
static int hf_mq_msgasy_SeleIndex;
904
static int hf_mq_msgasy_SegmIndex;
905
static int hf_mq_msgasy_ReasonCod;
906
static int hf_mq_msgasy_ActMsgLen;
907
static int hf_mq_msgasy_TotMsgLen;
908
static int hf_mq_msgasy_MsgToken;
909
static int hf_mq_msgasy_Status;
910
static int hf_mq_msgasy_resolQNLn;
911
static int hf_mq_msgasy_resolQNme;
912
static int hf_mq_msgasy_padding;
913
914
static int hf_mq_notif_vers;
915
static int hf_mq_notif_handle;
916
static int hf_mq_notif_code;
917
static int hf_mq_notif_value;
918
919
static int hf_mq_head_StructID;
920
static int hf_mq_head_version;
921
static int hf_mq_head_length;
922
static int hf_mq_head_encoding;
923
static int hf_mq_head_ccsid;
924
static int hf_mq_head_format;
925
static int hf_mq_head_flags;
926
static int hf_mq_head_struct;
927
928
static int hf_mq_dh_flags_newmsgid;
929
static int* const pf_flds_dh_flags[] =
930
{
931
    &hf_mq_dh_flags_newmsgid,
932
    NULL
933
};
934
static int hf_mq_dh_putmsgrecfld;
935
static int hf_mq_dh_recspresent;
936
static int hf_mq_dh_objrecofs;
937
static int hf_mq_dh_putmsgrecofs;
938
939
static int hf_mq_iih_flags_passexpir;
940
static int hf_mq_iih_flags_replyfmtnone;
941
static int hf_mq_iih_flags_ignorepurg;
942
static int hf_mq_iih_flags_cmqrqstresp;
943
static int* const pf_flds_iih_flags[] =
944
{
945
    &hf_mq_iih_flags_cmqrqstresp,
946
    &hf_mq_iih_flags_ignorepurg,
947
    &hf_mq_iih_flags_replyfmtnone,
948
    &hf_mq_iih_flags_passexpir,
949
    NULL
950
};
951
static int hf_mq_iih_ltermoverride;
952
static int hf_mq_iih_mfsmapname;
953
static int hf_mq_iih_replytofmt;
954
static int hf_mq_iih_authenticator;
955
static int hf_mq_iih_transinstid;
956
static int hf_mq_iih_transstate;
957
static int hf_mq_iih_commimode;
958
static int hf_mq_iih_securityscope;
959
static int hf_mq_iih_reserved;
960
961
static int hf_mq_ims_ll;
962
static int hf_mq_ims_zz;
963
static int hf_mq_ims_trx;
964
static int hf_mq_ims_data;
965
966
static int hf_mq_tm_StructID;
967
static int hf_mq_tm_version;
968
static int hf_mq_tm_QName;
969
static int hf_mq_tm_ProcessNme;
970
static int hf_mq_tm_TriggerData;
971
static int hf_mq_tm_ApplType;
972
static int hf_mq_tm_ApplId;
973
static int hf_mq_tm_EnvData;
974
static int hf_mq_tm_UserData;
975
976
static int hf_mq_tmc2_StructID;
977
static int hf_mq_tmc2_version;
978
static int hf_mq_tmc2_QName;
979
static int hf_mq_tmc2_ProcessNme;
980
static int hf_mq_tmc2_TriggerData;
981
static int hf_mq_tmc2_ApplType;
982
static int hf_mq_tmc2_ApplId;
983
static int hf_mq_tmc2_EnvData;
984
static int hf_mq_tmc2_UserData;
985
static int hf_mq_tmc2_QMgrName;
986
987
static int hf_mq_cih_flags_synconret;
988
static int hf_mq_cih_flags_replywonulls;
989
static int hf_mq_cih_flags_passexpir;
990
static int* const pf_flds_cih_flags[] =
991
{
992
    &hf_mq_cih_flags_synconret,
993
    &hf_mq_cih_flags_replywonulls,
994
    &hf_mq_cih_flags_passexpir,
995
    NULL
996
};
997
static int hf_mq_cih_returncode;
998
static int hf_mq_cih_compcode;
999
static int hf_mq_cih_reasoncode;
1000
static int hf_mq_cih_uowcontrols;
1001
static int hf_mq_cih_getwaitintv;
1002
static int hf_mq_cih_linktype;
1003
static int hf_mq_cih_outdatalen;
1004
static int hf_mq_cih_facilkeeptime;
1005
static int hf_mq_cih_adsdescriptor;
1006
static int hf_mq_cih_converstask;
1007
static int hf_mq_cih_taskendstatus;
1008
static int hf_mq_cih_bridgefactokn;
1009
static int hf_mq_cih_function;
1010
static int hf_mq_cih_abendcode;
1011
static int hf_mq_cih_authenticator;
1012
static int hf_mq_cih_reserved;
1013
static int hf_mq_cih_replytofmt;
1014
static int hf_mq_cih_remotesysid;
1015
static int hf_mq_cih_remotetransid;
1016
static int hf_mq_cih_transactionid;
1017
static int hf_mq_cih_facilitylike;
1018
static int hf_mq_cih_attentionid;
1019
static int hf_mq_cih_startcode;
1020
static int hf_mq_cih_cancelcode;
1021
static int hf_mq_cih_nexttransid;
1022
static int hf_mq_cih_reserved2;
1023
static int hf_mq_cih_reserved3;
1024
static int hf_mq_cih_cursorpos;
1025
static int hf_mq_cih_erroroffset;
1026
static int hf_mq_cih_inputitem;
1027
static int hf_mq_cih_reserved4;
1028
1029
static int hf_mq_rfh_ccsid;
1030
static int hf_mq_rfh_length;
1031
static int hf_mq_rfh_string;
1032
1033
static int hf_mq_rmh_flags_last;
1034
static int* const pf_flds_rmh_flags[] =
1035
{
1036
    &hf_mq_rmh_flags_last,
1037
    NULL
1038
};
1039
static int hf_mq_rmh_objecttype;
1040
static int hf_mq_rmh_objectinstid;
1041
static int hf_mq_rmh_srcenvlen;
1042
static int hf_mq_rmh_srcenvofs;
1043
static int hf_mq_rmh_srcnamelen;
1044
static int hf_mq_rmh_srcnameofs;
1045
static int hf_mq_rmh_dstenvlen;
1046
static int hf_mq_rmh_dstenvofs;
1047
static int hf_mq_rmh_dstnamelen;
1048
static int hf_mq_rmh_dstnameofs;
1049
static int hf_mq_rmh_datalogiclen;
1050
static int hf_mq_rmh_datalogicofsl;
1051
static int hf_mq_rmh_datalogicofsh;
1052
1053
static int hf_mq_wih_servicename;
1054
static int hf_mq_wih_servicestep;
1055
static int hf_mq_wih_msgtoken;
1056
static int hf_mq_wih_reserved;
1057
1058
static int ett_mq;
1059
static int ett_mq_tsh;
1060
static int ett_mq_tsh_tcf;
1061
static int ett_mq_tsh_tcf2;
1062
static int ett_mq_api;
1063
static int ett_mq_socket;
1064
static int ett_mq_caut;
1065
static int ett_mq_msh;
1066
static int ett_mq_xqh;
1067
static int ett_mq_id;
1068
static int ett_mq_id_cf1;
1069
static int ett_mq_id_cf2;
1070
static int ett_mq_id_cf3;
1071
static int ett_mq_id_ecf1;
1072
static int ett_mq_id_ecf2;
1073
static int ett_mq_id_ecf3;
1074
static int ett_mq_id_ief1;
1075
static int ett_mq_id_ief2;
1076
static int ett_mq_uid;
1077
static int ett_mq_conn;
1078
static int ett_mq_fcno;
1079
static int ett_mq_fcno_option;
1080
static int ett_mq_msg;
1081
static int ett_mq_inq;
1082
static int ett_mq_spi;
1083
static int ett_mq_spi_base; /* Factorisation of common SPI items */
1084
static int ett_mq_spi_options;
1085
static int ett_mq_put;
1086
static int ett_mq_open;
1087
static int ett_mq_open_option;
1088
static int ett_mq_close_option;
1089
static int ett_mq_fopa;
1090
static int ett_mq_fcmi;
1091
static int ett_mq_ping;
1092
static int ett_mq_reset;
1093
static int ett_mq_status;
1094
static int ett_mq_od;
1095
static int ett_mq_od_objstr;
1096
static int ett_mq_od_selstr;
1097
static int ett_mq_od_resobjstr;
1098
static int ett_mq_or;
1099
static int ett_mq_rr;
1100
static int ett_mq_pmr;
1101
static int ett_mq_md;
1102
static int ett_mq_dlh;
1103
static int ett_mq_dh;
1104
static int ett_mq_gmo;
1105
static int ett_mq_gmo_option;
1106
static int ett_mq_gmo_matchoption;
1107
static int ett_mq_pmo;
1108
static int ett_mq_pmo_option;
1109
static int ett_mq_rfh_ValueName;
1110
static int ett_mq_msgreq_RqstFlags;
1111
1112
static int ett_mq_lpoo;
1113
static int ett_mq_lpoo_lpiopts;
1114
1115
static int ett_mq_head; /* Factorisation of common Header structure items (DH, MDE, CIH, IIH, RFH, RMH, WIH, TM, TMC2 */
1116
static int ett_mq_head_flags;
1117
static int ett_mq_ims;
1118
1119
static int ett_mq_xa;
1120
static int ett_mq_xa_tmflags;
1121
static int ett_mq_xa_xid;
1122
static int ett_mq_xa_info;
1123
static int ett_mq_charv;
1124
static int ett_mq_reassemb;
1125
static int ett_mq_notif;
1126
1127
static int ett_mq_structid;
1128
1129
static expert_field ei_mq_reassembly_error;
1130
1131
static dissector_handle_t mq_handle;
1132
static dissector_handle_t mq_spx_handle;
1133
static dissector_handle_t mqpcf_handle;
1134
1135
static heur_dissector_list_t mq_heur_subdissector_list;
1136
1137
static bool mq_desegment = true;
1138
static bool mq_reassembly = true;
1139
1140
static bool mq_in_reassembly;
1141
1142
static reassembly_table mq_reassembly_table;
1143
1144
static const value_string mq_notifcode_vals[] =
1145
{
1146
/*  1*/ { MQ_NC_GET_INHIBITED, "GET_INHIBITED" },
1147
/*  2*/ { MQ_NC_GET_ALLOWED, "GET_ALLOWED" },
1148
/*  3*/ { MQ_NC_CONN_STATE, "CONN_STATE" },
1149
/*  4*/ { MQ_NC_CONN_STATE_REPLY, "CONN_STATE_REPLY" },
1150
/*  5*/ { MQ_NC_Q_STATE, "Q_STATE" },
1151
/*  6*/ { MQ_NC_Q_STATE_REPLY, "Q_STATE_REPLY" },
1152
/*  7*/ { MQ_NC_QM_QUIESCING, "QM_QUIESCING" },
1153
/*  8*/ { MQ_NC_TXN_ALLOWED, "TXN_ALLOWED" },
1154
/*  9*/ { MQ_NC_TXN_REVOKE, "TXN_REVOKE" },
1155
/* 10*/ { MQ_NC_TXN_REVOKE_REPLY, "TXN_REVOKE_REPLY" },
1156
/* 11*/ { MQ_NC_CHECK_MSG, "CHECK_MSG" },
1157
/* 12*/ { MQ_NC_BROWSE_FIRST, "BROWSE_FIRST" },
1158
/* 13*/ { MQ_NC_MESSAGE_TOO_LARGE, "MESSAGE_TOO_LARGE" },
1159
/* 14*/ { MQ_NC_STREAMING_FAILURE, "STREAMING_FAILURE" },
1160
/* 15*/ { MQ_NC_CLIENT_ASYNC_EMPTY, "CLIENT_ASYNC_EMPTY" },
1161
/* 16*/ { MQ_NC_STREAMING_TXN_PAUSED, "STREAMING_TXN_PAUSED" },
1162
/* 17*/ { MQ_NC_RECONNECTION_COMPLETE, "RECONNECTION_COMPLETE" },
1163
    { 0, NULL }
1164
};
1165
1166
static const value_string mq_spi_verbs_vals[] =
1167
{
1168
/*  1*/ { MQ_SPI_QUERY, "QUERY" },
1169
/*  2*/ { MQ_SPI_PUT, "PUT" },
1170
/*  3*/ { MQ_SPI_GET, "GET" },
1171
/*  4*/ { MQ_SPI_ACTIVATE, "ACTIVATE" },
1172
/*  5*/ { MQ_SPI_SYNCHPOINT, "SYNCHPOINT" },
1173
/*  6*/ { MQ_SPI_RESERVE, "RESERVE" },
1174
/*  7*/ { MQ_SPI_SUBSCRIBE, "SUBSCRIBE" },
1175
/* 11*/ { MQ_SPI_NOTIFY, "NOTIFY" },
1176
/* 12*/ { MQ_SPI_OPEN, "OPEN" },
1177
    { 0, NULL }
1178
};
1179
1180
static const value_string mq_spi_activate_vals[] =
1181
{
1182
/* 1*/ { MQ_SPI_ACTIVATE_ENABLE, "ENABLE" },
1183
/* 2*/ { MQ_SPI_ACTIVATE_DISABLE, "DISABLE" },
1184
    { 0, NULL }
1185
};
1186
1187
static const value_string mq_status_vals[] =
1188
{
1189
/*    1*/ { MQ_STATUS_ERR_NO_CHANNEL, "NO_CHANNEL" },
1190
/*    2*/ { MQ_STATUS_ERR_CHANNEL_WRONG_TYPE, "CHANNEL_WRONG_TYPE" },
1191
/*    3*/ { MQ_STATUS_ERR_QM_UNAVAILABLE, "QM_UNAVAILABLE" },
1192
/*    4*/ { MQ_STATUS_ERR_MSG_SEQUENCE_ERROR, "MSG_SEQUENCE_ERROR" },
1193
/*    5*/ { MQ_STATUS_ERR_QM_TERMINATING, "QM_TERMINATING" },
1194
/*    6*/ { MQ_STATUS_ERR_CAN_NOT_STORE, "CAN_NOT_STORE" },
1195
/*    7*/ { MQ_STATUS_ERR_USER_CLOSED, "USER_CLOSED" },
1196
/*   10*/ { MQ_STATUS_ERR_PROTOCOL_SEGMENT_TYPE, "REMOTE_PROTOCOL_ERROR" },
1197
/*   11*/ { MQ_STATUS_ERR_PROTOCOL_LENGTH_ERROR, "BIND_FAILED" },
1198
/*   12*/ { MQ_STATUS_ERR_PROTOCOL_INVALID_DATA, "MSGWRAP_DIFFERENT" },
1199
/*   14*/ { MQ_STATUS_ERR_PROTOCOL_ID_ERROR, "REMOTE_CHANNEL_UNAVAILABLE" },
1200
/*   15*/ { MQ_STATUS_ERR_PROTOCOL_MSH_ERROR, "TERMINATED_BY_REMOTE_EXIT" },
1201
/*   16*/ { MQ_STATUS_ERR_PROTOCOL_GENERAL, "PROTOCOL_GENERAL" },
1202
/*   17*/ { MQ_STATUS_ERR_BATCH_FAILURE, "BATCH_FAILURE" },
1203
/*   18*/ { MQ_STATUS_ERR_MESSAGE_LENGTH_ERROR, "MESSAGE_LENGTH_ERROR" },
1204
/*   19*/ { MQ_STATUS_ERR_SEGMENT_NUMBER_ERROR, "SEGMENT_NUMBER_ERROR" },
1205
/*   20*/ { MQ_STATUS_ERR_SECURITY_FAILURE, "SECURITY_FAILURE" },
1206
/*   21*/ { MQ_STATUS_ERR_WRAP_VALUE_ERROR, "WRAP_VALUE_ERROR" },
1207
/*   22*/ { MQ_STATUS_ERR_CHANNEL_UNAVAILABLE, "CHANNEL_UNAVAILABLE" },
1208
/*   23*/ { MQ_STATUS_ERR_CLOSED_BY_EXIT, "CLOSED_BY_EXIT" },
1209
/*   24*/ { MQ_STATUS_ERR_CIPHER_SPEC, "CIPHER_SPEC" },
1210
/*   25*/ { MQ_STATUS_ERR_PEER_NAME, "PEER_NAME" },
1211
/*   26*/ { MQ_STATUS_ERR_SSL_CLIENT_CERTIFICATE, "SSL_CLIENT_CERTIFICATE" },
1212
/*   27*/ { MQ_STATUS_ERR_RMT_RSRCS_IN_RECOVERY, "RMT_RSRCS_IN_RECOVERY" },
1213
/*   28*/ { MQ_STATUS_ERR_SSL_REFRESHING, "SSL_REFRESHING" },
1214
/*   29*/ { MQ_STATUS_ERR_INVALID_HOBJ, "INVALID_HOBJ" },
1215
/*   30*/ { MQ_STATUS_ERR_CONV_ID_ERROR, "CONV_ID_ERROR" },
1216
/*   31*/ { MQ_STATUS_ERR_SOCKET_ACTION_TYPE, "SOCKET_ACTION_TYPE" },
1217
/*   32*/ { MQ_STATUS_ERR_STANDBY_Q_MGR, "STANDBY_Q_MGR" },
1218
/*  240*/ { MQ_STATUS_ERR_CCSID_NOT_SUPPORTED, "CCSID_NOT_SUPPORTED" },
1219
/*  241*/ { MQ_STATUS_ERR_ENCODING_INVALID, "ENCODING_INVALID" },
1220
/*  242*/ { MQ_STATUS_ERR_FAP_LEVEL, "FAP_LEVEL" },
1221
/*  243*/ { MQ_STATUS_ERR_NEGOTIATION_FAILED, "NEGOTIATION_FAILED" },
1222
    { 0, NULL }
1223
};
1224
static value_string_ext mq_status_xvals = VALUE_STRING_EXT_INIT(mq_status_vals);
1225
1226
static const value_string mq_opcode_vals[] =
1227
{
1228
/*    1*/ { MQ_TST_INITIAL, "INITIAL_DATA" },
1229
/*    2*/ { MQ_TST_RESYNC, "RESYNC_DATA" },
1230
/*    3*/ { MQ_TST_RESET, "RESET_DATA" },
1231
/*    4*/ { MQ_TST_MESSAGE, "MESSAGE_DATA" },
1232
/*    5*/ { MQ_TST_STATUS, "STATUS_DATA" },
1233
/*    6*/ { MQ_TST_SECURITY, "SECURITY_DATA" },
1234
/*    7*/ { MQ_TST_PING, "PING_DATA" },
1235
/*    8*/ { MQ_TST_USERID, "USERID_DATA" },
1236
/*    9*/ { MQ_TST_HEARTBEAT, "HEARTBEAT" },
1237
/*   10*/ { MQ_TST_CONAUTH_INFO, "CONAUTH_INFO" },
1238
/*   11*/ { MQ_TST_RENEGOTIATE_DATA, "RENEGOTIATE_DATA" },
1239
/*   12*/ { MQ_TST_SOCKET_ACTION, "SOCKET_ACTION" },
1240
/*   13*/ { MQ_TST_ASYNC_MESSAGE, "ASYNC_MESSAGE" },
1241
/*   14*/ { MQ_TST_REQUEST_MSGS, "REQUEST_MSGS" },
1242
/*   15*/ { MQ_TST_NOTIFICATION, "NOTIFICATION" },
1243
/*  129*/ { MQ_TST_MQCONN, "MQCONN" },
1244
/*  130*/ { MQ_TST_MQDISC, "MQDISC" },
1245
/*  131*/ { MQ_TST_MQOPEN, "MQOPEN" },
1246
/*  132*/ { MQ_TST_MQCLOSE, "MQCLOSE" },
1247
/*  133*/ { MQ_TST_MQGET, "MQGET" },
1248
/*  134*/ { MQ_TST_MQPUT, "MQPUT" },
1249
/*  135*/ { MQ_TST_MQPUT1, "MQPUT1" },
1250
/*  136*/ { MQ_TST_MQSET, "MQSET" },
1251
/*  137*/ { MQ_TST_MQINQ, "MQINQ" },
1252
/*  138*/ { MQ_TST_MQCMIT, "MQCMIT" },
1253
/*  139*/ { MQ_TST_MQBACK, "MQBACK" },
1254
/*  140*/ { MQ_TST_SPI, "SPI" },
1255
/*  141*/ { MQ_TST_MQSTAT, "MQSTAT" },
1256
/*  142*/ { MQ_TST_MQSUB, "MQSUB" },
1257
/*  143*/ { MQ_TST_MQSUBRQ, "MQSUBRQ" },
1258
/*  145*/ { MQ_TST_MQCONN_REPLY, "MQCONN_REPLY" },
1259
/*  146*/ { MQ_TST_MQDISC_REPLY, "MQDISC_REPLY" },
1260
/*  147*/ { MQ_TST_MQOPEN_REPLY, "MQOPEN_REPLY" },
1261
/*  148*/ { MQ_TST_MQCLOSE_REPLY, "MQCLOSE_REPLY" },
1262
/*  149*/ { MQ_TST_MQGET_REPLY, "MQGET_REPLY" },
1263
/*  150*/ { MQ_TST_MQPUT_REPLY, "MQPUT_REPLY" },
1264
/*  151*/ { MQ_TST_MQPUT1_REPLY, "MQPUT1_REPLY" },
1265
/*  152*/ { MQ_TST_MQSET_REPLY, "MQSET_REPLY" },
1266
/*  153*/ { MQ_TST_MQINQ_REPLY, "MQINQ_REPLY" },
1267
/*  154*/ { MQ_TST_MQCMIT_REPLY, "MQCMIT_REPLY" },
1268
/*  155*/ { MQ_TST_MQBACK_REPLY, "MQBACK_REPLY" },
1269
/*  156*/ { MQ_TST_SPI_REPLY, "SPI_REPLY" },
1270
/*  157*/ { MQ_TST_MQSTAT_REPLY, "MQSTAT_REPLY" },
1271
/*  158*/ { MQ_TST_MQSUB_REPLY, "MQSUB_REPLY" },
1272
/*  159*/ { MQ_TST_MQSUBRQ_REPLY, "MQSUBRQ_REPLY" },
1273
/*  161*/ { MQ_TST_XA_START, "XA_START" },
1274
/*  162*/ { MQ_TST_XA_END, "XA_END" },
1275
/*  163*/ { MQ_TST_XA_OPEN, "XA_OPEN" },
1276
/*  164*/ { MQ_TST_XA_CLOSE, "XA_CLOSE" },
1277
/*  165*/ { MQ_TST_XA_PREPARE, "XA_PREPARE" },
1278
/*  166*/ { MQ_TST_XA_COMMIT, "XA_COMMIT" },
1279
/*  167*/ { MQ_TST_XA_ROLLBACK, "XA_ROLLBACK" },
1280
/*  168*/ { MQ_TST_XA_FORGET, "XA_FORGET" },
1281
/*  169*/ { MQ_TST_XA_RECOVER, "XA_RECOVER" },
1282
/*  170*/ { MQ_TST_XA_COMPLETE, "XA_COMPLETE" },
1283
/*  177*/ { MQ_TST_XA_START_REPLY, "XA_START_REPLY" },
1284
/*  178*/ { MQ_TST_XA_END_REPLY, "XA_END_REPLY" },
1285
/*  179*/ { MQ_TST_XA_OPEN_REPLY, "XA_OPEN_REPLY" },
1286
/*  180*/ { MQ_TST_XA_CLOSE_REPLY, "XA_CLOSE_REPLY" },
1287
/*  181*/ { MQ_TST_XA_PREPARE_REPLY, "XA_PREPARE_REPLY" },
1288
/*  182*/ { MQ_TST_XA_COMMIT_REPLY, "XA_COMMIT_REPLY" },
1289
/*  183*/ { MQ_TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY" },
1290
/*  184*/ { MQ_TST_XA_FORGET_REPLY, "XA_FORGET_REPLY" },
1291
/*  185*/ { MQ_TST_XA_RECOVER_REPLY, "XA_RECOVER_REPLY" },
1292
/*  186*/ { MQ_TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY" },
1293
    { 0, NULL }
1294
};
1295
static value_string_ext mq_opcode_xvals = VALUE_STRING_EXT_INIT(mq_opcode_vals);
1296
1297
static const value_string mq_xaer_vals[] =
1298
{
1299
/*   0*/ { MQ_XA_OK, "XA_OK" },
1300
/*   3*/ { MQ_XA_RDONLY, "XA_RDONLY" },
1301
/*   4*/ { MQ_XA_RETRY, "XA_RETRY" },
1302
/*   5*/ { MQ_XA_HEURMIX, "XA_HEURMIX" },
1303
/*   6*/ { MQ_XA_HEURRB, "XA_HEURRB" },
1304
/*   7*/ { MQ_XA_HEURCOM, "XA_HEURCOM" },
1305
/*   8*/ { MQ_XA_HEURHAZ, "XA_HEURHAZ" },
1306
/*   9*/ { MQ_XA_NOMIGRATE, "XA_NOMIGRATE" },
1307
/* 100*/ { MQ_XA_RBROLLBACK, "XA_RBROLLBACK" },
1308
/* 101*/ { MQ_XA_RBCOMMFAIL, "XA_RBCOMMFAIL" },
1309
/* 102*/ { MQ_XA_RBDEADLOCK, "XA_RBDEADLOCK" },
1310
/* 103*/ { MQ_XA_RBINTEGRITY, "XA_RBINTEGRITY" },
1311
/* 104*/ { MQ_XA_RBOTHER, "XA_RBOTHER" },
1312
/* 105*/ { MQ_XA_RBPROTO, "XA_RBPROTO" },
1313
/* 106*/ { MQ_XA_RBTIMEOUT, "XA_RBTIMEOUT" },
1314
/* 107*/ { MQ_XA_RBTRANSIENT, "XA_RBTRANSIENT" },
1315
/*  -9*/ { MQ_XAER_OUTSIDE, "XAER_OUTSIDE" },
1316
/*  -8*/ { MQ_XAER_DUPID, "XAER_DUPID" },
1317
/*  -7*/ { MQ_XAER_RMFAIL, "XAER_RMFAIL" },
1318
/*  -6*/ { MQ_XAER_PROTO, "XAER_PROTO" },
1319
/*  -5*/ { MQ_XAER_INVAL, "XAER_INVAL" },
1320
/*  -4*/ { MQ_XAER_NOTA, "XAER_NOTA" },
1321
/*  -3*/ { MQ_XAER_RMERR, "XAER_RMERR" },
1322
/*  -2*/ { MQ_XAER_ASYNC, "XAER_ASYNC" },
1323
    { 0, NULL }
1324
};
1325
1326
static const value_string mq_StructID_vals[] =
1327
{
1328
/* CAUT*/ { MQ_STRUCTID_CAUT, MQ_TEXT_CAUT },
1329
/* CIH */ { MQ_STRUCTID_CIH, MQ_TEXT_CIH },
1330
/* DH  */ { MQ_STRUCTID_DH, MQ_TEXT_DH },
1331
/* DLH */ { MQ_STRUCTID_DLH, MQ_TEXT_DLH },
1332
/* FCNO*/ { MQ_STRUCTID_FCNO, MQ_TEXT_FCNO },
1333
/* FOPA*/ { MQ_STRUCTID_FOPA, MQ_TEXT_FOPA },
1334
/* GMO */ { MQ_STRUCTID_GMO, MQ_TEXT_GMO },
1335
/* ID  */ { MQ_STRUCTID_ID, MQ_TEXT_ID },
1336
/* IIH */ { MQ_STRUCTID_IIH, MQ_TEXT_IIH },
1337
/* LPOO*/ { MQ_STRUCTID_LPOO, MQ_TEXT_LPOO },
1338
/* MD  */ { MQ_STRUCTID_MD, MQ_TEXT_MD },
1339
/* MDE */ { MQ_STRUCTID_MDE, MQ_TEXT_MDE },
1340
/* MSH */ { MQ_STRUCTID_MSH, MQ_TEXT_MSH },
1341
/* OD  */ { MQ_STRUCTID_OD, MQ_TEXT_OD },
1342
/* PMO */ { MQ_STRUCTID_PMO, MQ_TEXT_PMO },
1343
/* RFH */ { MQ_STRUCTID_RFH, MQ_TEXT_RFH },
1344
/* RMH */ { MQ_STRUCTID_RMH, MQ_TEXT_RMH },
1345
/* SPAI*/ { MQ_STRUCTID_SPAI, MQ_TEXT_SPAI },
1346
/* SPAO*/ { MQ_STRUCTID_SPAO, MQ_TEXT_SPAO },
1347
/* SPAU*/ { MQ_STRUCTID_SPAU, MQ_TEXT_SPAU },
1348
/* SPGI*/ { MQ_STRUCTID_SPGI, MQ_TEXT_SPGI },
1349
/* SPGO*/ { MQ_STRUCTID_SPGO, MQ_TEXT_SPGO },
1350
/* SPGU*/ { MQ_STRUCTID_SPGU, MQ_TEXT_SPGU },
1351
/* SPOI*/ { MQ_STRUCTID_SPOI, MQ_TEXT_SPOI },
1352
/* SPOO*/ { MQ_STRUCTID_SPOO, MQ_TEXT_SPOO },
1353
/* SPOU*/ { MQ_STRUCTID_SPOU, MQ_TEXT_SPOU },
1354
/* SPPI*/ { MQ_STRUCTID_SPPI, MQ_TEXT_SPPI },
1355
/* SPPO*/ { MQ_STRUCTID_SPPO, MQ_TEXT_SPPO },
1356
/* SPPU*/ { MQ_STRUCTID_SPPU, MQ_TEXT_SPPU },
1357
/* SPQI*/ { MQ_STRUCTID_SPQI, MQ_TEXT_SPQI },
1358
/* SPQO*/ { MQ_STRUCTID_SPQO, MQ_TEXT_SPQO },
1359
/* SPQU*/ { MQ_STRUCTID_SPQU, MQ_TEXT_SPQU },
1360
/* TM  */ { MQ_STRUCTID_TM, MQ_TEXT_TM },
1361
/* TMC2*/ { MQ_STRUCTID_TMC2, MQ_TEXT_TMC2 },
1362
/* TSH */ { MQ_STRUCTID_TSH, MQ_TEXT_TSH },
1363
/* TSHC*/ { MQ_STRUCTID_TSHC, MQ_TEXT_TSHC },
1364
/* TSHM*/ { MQ_STRUCTID_TSHM, MQ_TEXT_TSHM },
1365
/* UID */ { MQ_STRUCTID_UID, MQ_TEXT_UID },
1366
/* WIH */ { MQ_STRUCTID_WIH, MQ_TEXT_WIH },
1367
/* XQH */ { MQ_STRUCTID_XQH, MQ_TEXT_XQH },
1368
1369
/* CAUT*/ { MQ_STRUCTID_CAUT_EBCDIC, MQ_TEXT_CAUT },
1370
/* CIH */ { MQ_STRUCTID_CIH_EBCDIC, MQ_TEXT_CIH },
1371
/* DH  */ { MQ_STRUCTID_DH_EBCDIC, MQ_TEXT_DH },
1372
/* DLH */ { MQ_STRUCTID_DLH_EBCDIC, MQ_TEXT_DLH },
1373
/* FCNO*/ { MQ_STRUCTID_FCNO_EBCDIC, MQ_TEXT_FCNO },
1374
/* FOPA*/ { MQ_STRUCTID_FOPA_EBCDIC, MQ_TEXT_FOPA },
1375
/* GMO */ { MQ_STRUCTID_GMO_EBCDIC, MQ_TEXT_GMO },
1376
/* ID  */ { MQ_STRUCTID_ID_EBCDIC, MQ_TEXT_ID },
1377
/* IIH */ { MQ_STRUCTID_IIH_EBCDIC, MQ_TEXT_IIH },
1378
/* LPOO*/ { MQ_STRUCTID_LPOO_EBCDIC, MQ_TEXT_LPOO },
1379
/* MD  */ { MQ_STRUCTID_MD_EBCDIC, MQ_TEXT_MD },
1380
/* MDE */ { MQ_STRUCTID_MDE_EBCDIC, MQ_TEXT_MDE },
1381
/* OD  */ { MQ_STRUCTID_OD_EBCDIC, MQ_TEXT_OD },
1382
/* PMO */ { MQ_STRUCTID_PMO_EBCDIC, MQ_TEXT_PMO },
1383
/* RFH */ { MQ_STRUCTID_RFH_EBCDIC, MQ_TEXT_RFH },
1384
/* RMH */ { MQ_STRUCTID_RMH_EBCDIC, MQ_TEXT_RMH },
1385
/* SPAI*/ { MQ_STRUCTID_SPAI_EBCDIC, MQ_TEXT_SPAI },
1386
/* SPAO*/ { MQ_STRUCTID_SPAO_EBCDIC, MQ_TEXT_SPAO },
1387
/* SPAU*/ { MQ_STRUCTID_SPAU_EBCDIC, MQ_TEXT_SPAU },
1388
/* SPGI*/ { MQ_STRUCTID_SPGI_EBCDIC, MQ_TEXT_SPGI },
1389
/* SPGO*/ { MQ_STRUCTID_SPGO_EBCDIC, MQ_TEXT_SPGO },
1390
/* SPGU*/ { MQ_STRUCTID_SPGU_EBCDIC, MQ_TEXT_SPGU },
1391
/* SPOI*/ { MQ_STRUCTID_SPOI_EBCDIC, MQ_TEXT_SPOI },
1392
/* SPOO*/ { MQ_STRUCTID_SPOO_EBCDIC, MQ_TEXT_SPOO },
1393
/* SPOU*/ { MQ_STRUCTID_SPOU_EBCDIC, MQ_TEXT_SPOU },
1394
/* SPPI*/ { MQ_STRUCTID_SPPI_EBCDIC, MQ_TEXT_SPPI },
1395
/* SPPO*/ { MQ_STRUCTID_SPPO_EBCDIC, MQ_TEXT_SPPO },
1396
/* SPPU*/ { MQ_STRUCTID_SPPU_EBCDIC, MQ_TEXT_SPPU },
1397
/* SPQI*/ { MQ_STRUCTID_SPQI_EBCDIC, MQ_TEXT_SPQI },
1398
/* SPQO*/ { MQ_STRUCTID_SPQO_EBCDIC, MQ_TEXT_SPQO },
1399
/* SPQU*/ { MQ_STRUCTID_SPQU_EBCDIC, MQ_TEXT_SPQU },
1400
/* TM  */ { MQ_STRUCTID_TM_EBCDIC, MQ_TEXT_TM },
1401
/* TMC2*/ { MQ_STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2 },
1402
/* TSH */ { MQ_STRUCTID_TSH_EBCDIC, MQ_TEXT_TSH },
1403
/* TSHC*/ { MQ_STRUCTID_TSHC_EBCDIC, MQ_TEXT_TSHC },
1404
/* TSHM*/ { MQ_STRUCTID_TSHM_EBCDIC, MQ_TEXT_TSHM },
1405
/* UID */ { MQ_STRUCTID_UID_EBCDIC, MQ_TEXT_UID },
1406
/* WIH */ { MQ_STRUCTID_WIH_EBCDIC, MQ_TEXT_WIH },
1407
/* XQH */ { MQ_STRUCTID_XQH_EBCDIC, MQ_TEXT_XQH },
1408
    { 0, NULL }
1409
};
1410
static value_string_ext mq_StructID_xvals = VALUE_STRING_EXT_INIT(mq_StructID_vals);
1411
1412
static const value_string mq_byteorder_vals[] =
1413
{
1414
/* 1*/ { MQ_BIG_ENDIAN, "Big endian" },
1415
/* 2*/ { MQ_LITTLE_ENDIAN, "Little endian" },
1416
    { 0, NULL }
1417
};
1418
1419
static const value_string mq_conn_options_vals[] =
1420
{
1421
/* 1*/ { MQ_CONN_OPTION, "MQCONN" },
1422
/* 3*/ { MQ_CONNX_OPTION, "MQCONNX" },
1423
    { 0, NULL }
1424
};
1425
1426
static const value_string mq_sidtype_vals[] =
1427
{
1428
/* 0*/ { MQ_MQSIDT_NONE, "MQSIDT_NONE" },
1429
/* 1*/ { MQ_MQSIDT_NT_SECURITY_ID, "MQSIDT_NT_SECURITY_ID" },
1430
/* 2*/ { MQ_MQSIDT_WAS_SECURITY_ID, "MQSIDT_WAS_SECURITY_ID" },
1431
    { 0, NULL }
1432
};
1433
1434
static bool is_mq_struc_TSH(uint32_t ID)
1435
2.01k
{
1436
2.01k
    switch (ID & MQ_MASK_TSHx)
1437
2.01k
    {
1438
129
    case MQ_STRUCTID_TSHx:
1439
129
    case MQ_STRUCTID_TSHx_EBCDIC:
1440
129
        return true;
1441
1.88k
    default:
1442
1.88k
        return false;
1443
2.01k
    }
1444
2.01k
}
1445
1446
static int dissect_mq_encoding(proto_tree* tree, packet_info* pinfo, int hfindex, tvbuff_t* tvb, const int start, int length, const unsigned encoding)
1447
43
{
1448
43
    unsigned  uEnc;
1449
1450
43
    if (length == 2)
1451
0
    {
1452
0
        uEnc = tvb_get_uint16(tvb, start, encoding);
1453
0
    }
1454
43
    else
1455
43
    {
1456
43
        uEnc = tvb_get_uint32(tvb, start, encoding);
1457
43
    }
1458
1459
43
    proto_tree_add_uint_format_value(tree, hfindex, tvb, start, length, uEnc,
1460
43
        "%8x-%d (%s)", uEnc, uEnc, mqpcf_get_encoding(pinfo->pool, uEnc)->str);
1461
1462
43
    return length;
1463
43
}
1464
1465
static int dissect_mq_MQMO(tvbuff_t* tvb, proto_tree* mq_tree, int offset, int ett_subtree, mq_parm_t* p_mq_parm)
1466
0
{
1467
0
    unsigned     uMoOpt;
1468
1469
0
    uMoOpt = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1470
1471
0
    if (uMoOpt == 0)
1472
0
    {
1473
0
        proto_item* ti;
1474
0
        proto_tree* mq_tree_sub;
1475
0
        ti = proto_tree_add_item(mq_tree, hf_mq_gmo_matchoptions, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */
1476
0
        mq_tree_sub = proto_item_add_subtree(ti, ett_subtree);
1477
0
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQMO_NONE);
1478
0
    }
1479
0
    else
1480
0
    {
1481
0
        proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_gmo_matchoptions, ett_subtree, pf_flds_mtchopt, p_mq_parm->mq_int_enc);
1482
0
    }
1483
0
    return 4;
1484
0
}
1485
static int dissect_mq_LPOO_LPIOPTS(tvbuff_t* tvb, proto_tree* mq_tree, int offset, int ett_subtree, mq_parm_t* p_mq_parm)
1486
0
{
1487
0
    unsigned     uLpiOpts;
1488
1489
0
    uLpiOpts = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1490
1491
0
    if (uLpiOpts == 0)
1492
0
    {
1493
0
        proto_item* ti;
1494
0
        proto_tree* mq_tree_sub;
1495
0
        ti = proto_tree_add_item(mq_tree, hf_mq_lpoo_lpiopts, tvb, offset, 4, p_mq_parm->mq_int_enc);
1496
0
        mq_tree_sub = proto_item_add_subtree(ti, ett_subtree);
1497
0
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_LPOOOPT_NONE);
1498
0
    }
1499
0
    else
1500
0
    {
1501
0
        proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_lpoo_lpiopts, ett_subtree, pf_flds_lpooopt, p_mq_parm->mq_int_enc);
1502
0
    }
1503
0
    return 4;
1504
0
}
1505
static int dissect_mq_MQGMO(tvbuff_t* tvb, proto_tree* mq_tree, int offset, int ett_subtree, mq_parm_t* p_mq_parm)
1506
0
{
1507
0
    unsigned     uGmoOpt;
1508
1509
0
    uGmoOpt = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1510
1511
0
    if (uGmoOpt == 0)
1512
0
    {
1513
0
        proto_item* ti;
1514
0
        proto_tree* mq_tree_sub;
1515
0
        ti = proto_tree_add_item(mq_tree, hf_mq_gmo_options, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */
1516
0
        mq_tree_sub = proto_item_add_subtree(ti, ett_subtree);
1517
0
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQGMO_NONE);
1518
0
    }
1519
0
    else
1520
0
    {
1521
0
        proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_gmo_options, ett_subtree, pf_flds_gmoopt, p_mq_parm->mq_int_enc);
1522
0
    }
1523
0
    return 4;
1524
0
}
1525
1526
static int dissect_mq_MQPMO(tvbuff_t* tvb, proto_tree* mq_tree, int offset, int ett_subtree, mq_parm_t* p_mq_parm)
1527
0
{
1528
0
    unsigned     uPmoOpt;
1529
1530
0
    uPmoOpt = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1531
1532
0
    if (uPmoOpt == 0)
1533
0
    {
1534
0
        proto_item* ti;
1535
0
        proto_tree* mq_tree_sub;
1536
0
        ti = proto_tree_add_item(mq_tree, hf_mq_pmo_options, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */
1537
0
        mq_tree_sub = proto_item_add_subtree(ti, ett_subtree);
1538
0
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQPMO_NONE);
1539
0
    }
1540
0
    else
1541
0
    {
1542
0
        proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_pmo_options, ett_subtree, pf_flds_pmoopt, p_mq_parm->mq_int_enc);
1543
0
    }
1544
0
    return 4;
1545
0
}
1546
1547
static int dissect_mq_MQOO(tvbuff_t* tvb, proto_tree* mq_tree, int offset, int ett_subtree, int hfindex, mq_parm_t* p_mq_parm)
1548
2
{
1549
2
    unsigned     uOpenOpt;
1550
1551
2
    uOpenOpt = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1552
1553
2
    if (uOpenOpt == 0)
1554
0
    {
1555
0
        proto_item* ti;
1556
0
        proto_tree* mq_tree_sub;
1557
0
        ti = proto_tree_add_item(mq_tree, hfindex, tvb, offset, 4, p_mq_parm->mq_int_enc);
1558
0
        mq_tree_sub = proto_item_add_subtree(ti, ett_subtree);
1559
0
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_BIND_READAHEAD_AS_Q_DEF);
1560
0
    }
1561
2
    else
1562
2
    {
1563
2
        proto_tree_add_bitmask(mq_tree, tvb, offset, hfindex, ett_subtree, pf_flds_opnopt, p_mq_parm->mq_int_enc);
1564
2
    }
1565
2
    return 4;
1566
2
}
1567
static int dissect_mq_MQCO(tvbuff_t* tvb, proto_tree* mq_tree, int offset, mq_parm_t* p_mq_parm)
1568
6
{
1569
6
    unsigned     iCloseOpt;
1570
1571
6
    iCloseOpt = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
1572
1573
6
    if (iCloseOpt == 0)
1574
1
    {
1575
1
        proto_item* ti;
1576
1
        proto_tree* mq_tree_sub;
1577
1
        ti = proto_tree_add_item(mq_tree, hf_mq_close_options, tvb, offset, 4, p_mq_parm->mq_int_enc);
1578
1
        mq_tree_sub = proto_item_add_subtree(ti, ett_mq_close_option);
1579
1
        proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_mq_close_option, NULL, MQ_TEXT_IMMEDIATE_NONE);
1580
1
    }
1581
5
    else
1582
5
    {
1583
5
        proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_close_options, ett_mq_close_option, pf_flds_clsopt, p_mq_parm->mq_int_enc);
1584
5
    }
1585
6
    return 4;
1586
6
}
1587
static int dissect_mq_charv(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, int iSize, int idx, const char* pStr, mq_parm_t* p_mq_parm)
1588
0
{
1589
0
    proto_tree* mq_tree_sub;
1590
0
    uint32_t    lStr;
1591
0
    uint32_t    oStr;
1592
0
    int32_t     eStr;
1593
0
    const char* sStr;
1594
1595
0
    lStr = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
1596
0
    oStr = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
1597
0
    eStr = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
1598
0
    if (lStr && oStr)
1599
0
    {
1600
0
        sStr = (const char*)tvb_get_string_enc(pinfo->pool, tvb, oStr, lStr, p_mq_parm->mq_str_enc);
1601
0
    }
1602
0
    else
1603
0
        sStr = NULL;
1604
1605
0
    mq_tree_sub = proto_tree_add_subtree_format(tree, tvb, offset, iSize, idx, NULL, "%s - %s", pStr, (sStr) ? sStr : "[Empty]");
1606
1607
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsptr, tvb, offset, 4, p_mq_parm->mq_int_enc);
1608
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsoffset, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
1609
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsbufsize, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
1610
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vslength, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
1611
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsccsid, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
1612
0
    proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsvalue, tvb, oStr, lStr, IS_EBCDIC(eStr) ? ENC_EBCDIC : ENC_ASCII);
1613
1614
0
    return 20;
1615
0
}
1616
static int dissect_mq_pmr(tvbuff_t* tvb, proto_tree* tree, int offset, int iNbrRecords, int offsetPMR, uint32_t recFlags, mq_parm_t* p_mq_parm)
1617
0
{
1618
0
    int iSizePMR1 = 0;
1619
0
    int iSizePMR = 0;
1620
1621
0
    iSizePMR1 = ((((recFlags & MQ_PMRF_MSG_ID) != 0) * 24)
1622
0
        + (((recFlags & MQ_PMRF_CORREL_ID) != 0) * 24)
1623
0
        + (((recFlags & MQ_PMRF_GROUP_ID) != 0) * 24)
1624
0
        + (((recFlags & MQ_PMRF_FEEDBACK) != 0) * 4)
1625
0
        + (((recFlags & MQ_PMRF_ACCOUNTING_TOKEN) != 0) * 32));
1626
1627
0
    if (offsetPMR != 0 && iSizePMR1 != 0)
1628
0
    {
1629
0
        iSizePMR = iNbrRecords * iSizePMR1;
1630
0
        if (tvb_reported_length_remaining(tvb, offset) >= iSizePMR)
1631
0
        {
1632
0
            int iOffsetPMR = 0;
1633
0
            int iRecord = 0;
1634
0
            for (iRecord = 0; iRecord < iNbrRecords; iRecord++)
1635
0
            {
1636
0
                proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetPMR, iSizePMR1, ett_mq_pmr, NULL, MQ_TEXT_PMR);
1637
0
                if ((recFlags & MQ_PMRF_MSG_ID) != 0)
1638
0
                {
1639
0
                    proto_tree_add_item(mq_tree, hf_mq_pmr_msgid, tvb, offset + iOffsetPMR, 24, ENC_NA);
1640
0
                    iOffsetPMR += 24;
1641
0
                }
1642
0
                if ((recFlags & MQ_PMRF_CORREL_ID) != 0)
1643
0
                {
1644
0
                    proto_tree_add_item(mq_tree, hf_mq_pmr_correlid, tvb, offset + iOffsetPMR, 24, ENC_NA);
1645
0
                    iOffsetPMR += 24;
1646
0
                }
1647
0
                if ((recFlags & MQ_PMRF_GROUP_ID) != 0)
1648
0
                {
1649
0
                    proto_tree_add_item(mq_tree, hf_mq_pmr_groupid, tvb, offset + iOffsetPMR, 24, ENC_NA);
1650
0
                    iOffsetPMR += 24;
1651
0
                }
1652
0
                if ((recFlags & MQ_PMRF_FEEDBACK) != 0)
1653
0
                {
1654
0
                    proto_tree_add_item(mq_tree, hf_mq_pmr_feedback, tvb, offset + iOffsetPMR, 4, p_mq_parm->mq_int_enc);
1655
0
                    iOffsetPMR += 4;
1656
0
                }
1657
0
                if ((recFlags & MQ_PMRF_ACCOUNTING_TOKEN) != 0)
1658
0
                {
1659
0
                    proto_tree_add_item(mq_tree, hf_mq_pmr_acttoken, tvb, offset + iOffsetPMR, 32, ENC_NA);
1660
0
                    iOffsetPMR += 32;
1661
0
                }
1662
0
            }
1663
0
        }
1664
0
        else iSizePMR = 0;
1665
0
    }
1666
0
    return iSizePMR;
1667
0
}
1668
static int dissect_mq_or(tvbuff_t* tvb, proto_tree* tree, int offset, int iNbrRecords, int offsetOR, mq_parm_t* p_mq_parm)
1669
0
{
1670
0
    int iSizeOR = 0;
1671
0
    if (offsetOR != 0)
1672
0
    {
1673
0
        iSizeOR = iNbrRecords * 96;
1674
0
        if (tvb_reported_length_remaining(tvb, offset) >= iSizeOR)
1675
0
        {
1676
0
            int iOffsetOR = 0;
1677
0
            int iRecord = 0;
1678
0
            for (iRecord = 0; iRecord < iNbrRecords; iRecord++)
1679
0
            {
1680
0
                proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetOR, 96, ett_mq_or, NULL, MQ_TEXT_OR);
1681
0
                proto_tree_add_item(mq_tree, hf_mq_or_objname, tvb, offset + iOffsetOR, 48, p_mq_parm->mq_str_enc);
1682
0
                proto_tree_add_item(mq_tree, hf_mq_or_objqmgrname, tvb, offset + iOffsetOR + 48, 48, p_mq_parm->mq_str_enc);
1683
0
                iOffsetOR += 96;
1684
0
            }
1685
0
        }
1686
0
        else iSizeOR = 0;
1687
0
    }
1688
0
    return iSizeOR;
1689
0
}
1690
static int dissect_mq_rr(tvbuff_t* tvb, proto_tree* tree, int offset, int iNbrRecords, int offsetRR, mq_parm_t* p_mq_parm)
1691
0
{
1692
0
    int iSizeRR = 0;
1693
0
    if (offsetRR != 0)
1694
0
    {
1695
0
        iSizeRR = iNbrRecords * 8;
1696
0
        if (tvb_reported_length_remaining(tvb, offset) >= iSizeRR)
1697
0
        {
1698
0
            int iOffsetRR = 0;
1699
0
            int iRecord = 0;
1700
0
            for (iRecord = 0; iRecord < iNbrRecords; iRecord++)
1701
0
            {
1702
0
                proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetRR, 8, ett_mq_rr, NULL, MQ_TEXT_RR);
1703
0
                proto_tree_add_item(mq_tree, hf_mq_rr_compcode, tvb, offset + iOffsetRR, 4, p_mq_parm->mq_int_enc);
1704
0
                proto_tree_add_item(mq_tree, hf_mq_rr_reascode, tvb, offset + iOffsetRR + 4, 4, p_mq_parm->mq_int_enc);
1705
0
                iOffsetRR += 8;
1706
0
            }
1707
0
        }
1708
0
        else iSizeRR = 0;
1709
0
    }
1710
0
    return iSizeRR;
1711
0
}
1712
static int dissect_mq_gmo(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, mq_parm_t* p_mq_parm)
1713
4
{
1714
4
    int iSize = 0;
1715
1716
4
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
1717
4
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_GMO || p_mq_parm->mq_strucID == MQ_STRUCTID_GMO_EBCDIC)
1718
0
    {
1719
0
        uint32_t iVersion = 0;
1720
0
        iVersion = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
1721
        /* Compute length according to version */
1722
0
        switch (iVersion)
1723
0
        {
1724
0
            case 1: iSize = 72; break;
1725
0
            case 2: iSize = 80; break;
1726
0
            case 3: iSize = 100; break;
1727
0
            case 4: iSize = 112; break;
1728
0
        }
1729
1730
0
        if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
1731
0
        {
1732
0
            if (pinfo)
1733
0
            {
1734
0
                uint8_t* sQueue;
1735
0
                sQueue = tvb_get_string_enc(pinfo->pool, tvb, offset + 24, 48, p_mq_parm->mq_str_enc);
1736
0
                if (strip_trailing_blanks(sQueue, 48) > 0)
1737
0
                {
1738
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
1739
0
                }
1740
0
            }
1741
1742
0
            if (tree)
1743
0
            {
1744
0
                proto_tree* mq_tree;
1745
1746
0
                mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_gmo, NULL, MQ_TEXT_GMO);
1747
1748
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
1749
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
1750
1751
0
                dissect_mq_MQGMO(tvb, mq_tree, offset + 8, ett_mq_gmo_option, p_mq_parm);
1752
1753
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_waitinterval, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
1754
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_signal1, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
1755
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_signal2, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
1756
0
                proto_tree_add_item(mq_tree, hf_mq_gmo_resolvqname, tvb, offset + 24, 48, p_mq_parm->mq_str_enc);
1757
1758
0
                if (iVersion >= 2)
1759
0
                {
1760
0
                    dissect_mq_MQMO(tvb, mq_tree, offset + 72, ett_mq_gmo_matchoption, p_mq_parm);
1761
1762
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_groupstatus, tvb, offset + 76, 1, ENC_BIG_ENDIAN);
1763
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_segmstatus, tvb, offset + 77, 1, ENC_BIG_ENDIAN);
1764
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_segmentation, tvb, offset + 78, 1, ENC_BIG_ENDIAN);
1765
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_reserved, tvb, offset + 79, 1, ENC_BIG_ENDIAN);
1766
0
                }
1767
1768
0
                if (iVersion >= 3)
1769
0
                {
1770
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_msgtoken, tvb, offset + 80, 16, ENC_NA);
1771
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_returnedlen, tvb, offset + 96, 4, p_mq_parm->mq_int_enc);
1772
0
                }
1773
0
                if (iVersion >= 4)
1774
0
                {
1775
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_reserved2, tvb, offset + 100, 4, p_mq_parm->mq_int_enc);
1776
0
                    proto_tree_add_item(mq_tree, hf_mq_gmo_msghandle, tvb, offset + 104, 8, p_mq_parm->mq_int_enc);
1777
0
                }
1778
0
            }
1779
0
        }
1780
0
    }
1781
4
    return iSize;
1782
4
}
1783
1784
static int dissect_mq_pmo(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, mq_parm_t* p_mq_parm, int* iDistributionListSize)
1785
11
{
1786
11
    int iSize = 0;
1787
11
    int iPosV2 = offset + 128;
1788
11
    int offsetb = offset;
1789
1790
11
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
1791
11
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_PMO || p_mq_parm->mq_strucID == MQ_STRUCTID_PMO_EBCDIC)
1792
0
    {
1793
0
        uint32_t iVersion = 0;
1794
0
        iVersion = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
1795
        /* Compute length according to version */
1796
0
        switch (iVersion)
1797
0
        {
1798
0
            case 1: iSize = 128; break;
1799
0
            case 2: iSize = 152; break;
1800
0
            case 3: iSize = 176; break;
1801
0
        }
1802
1803
0
        if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
1804
0
        {
1805
0
            if (pinfo)
1806
0
            {
1807
0
                uint8_t* sQueue;
1808
0
                uint8_t* sQueueA;
1809
1810
0
                sQueueA = tvb_get_string_enc(pinfo->pool, tvb, offset + 32, 48, 0);
1811
0
                sQueue = tvb_get_string_enc(pinfo->pool, tvb, offset + 32, 48, p_mq_parm->mq_str_enc);
1812
0
                if (strip_trailing_blanks(sQueue, 48) > 0 && strip_trailing_blanks(sQueueA, 48) > 0)
1813
0
                {
1814
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
1815
0
                }
1816
0
            }
1817
1818
0
            if (tree)
1819
0
            {
1820
0
                proto_tree* mq_tree;
1821
1822
0
                mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_pmo, NULL, MQ_TEXT_PMO);
1823
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
1824
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
1825
1826
0
                dissect_mq_MQPMO(tvb, mq_tree, offset + 8, ett_mq_pmo_option, p_mq_parm);
1827
1828
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_timeout, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
1829
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_context, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
1830
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_knowndstcnt, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
1831
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_unkndstcnt, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
1832
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_invaldstcnt, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
1833
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_resolvqname, tvb, offset + 32, 48, p_mq_parm->mq_str_enc);
1834
0
                proto_tree_add_item(mq_tree, hf_mq_pmo_resolvqmgr, tvb, offset + 80, 48, p_mq_parm->mq_str_enc);
1835
0
                offset += 128;
1836
0
                if (iVersion >= 2)
1837
0
                {
1838
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_recspresent, tvb, offset, 4, p_mq_parm->mq_int_enc);
1839
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecfld, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
1840
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecofs, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
1841
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_resprecofs, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
1842
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecptr, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
1843
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_resprecptr, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
1844
0
                    offset += 24;
1845
0
                }
1846
0
                if (iVersion >= 3)
1847
0
                {
1848
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_originalmsghandle, tvb, offset, 8, p_mq_parm->mq_int_enc);
1849
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_newmsghandle, tvb, offset + 8, 8, p_mq_parm->mq_int_enc);
1850
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_action, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
1851
0
                    proto_tree_add_item(mq_tree, hf_mq_pmo_publevel, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
1852
0
                }
1853
0
            }
1854
0
            if (iVersion >= 2)
1855
0
            {
1856
0
                int iNbrRecords = 0;
1857
0
                uint32_t iRecFlags = 0;
1858
1859
0
                iNbrRecords = tvb_get_uint32(tvb, iPosV2, p_mq_parm->mq_int_enc);
1860
0
                iRecFlags = tvb_get_uint32(tvb, iPosV2 + 4, p_mq_parm->mq_int_enc);
1861
1862
0
                if (iNbrRecords > 0)
1863
0
                {
1864
0
                    int iOffsetPMR = 0;
1865
0
                    int iOffsetRR = 0;
1866
1867
0
                    if (iDistributionListSize)
1868
0
                        *iDistributionListSize = iNbrRecords;
1869
0
                    iOffsetPMR = tvb_get_uint32(tvb, iPosV2 + 8, p_mq_parm->mq_int_enc);
1870
0
                    iOffsetRR = tvb_get_uint32(tvb, iPosV2 + 12, p_mq_parm->mq_int_enc);
1871
0
                    iSize += dissect_mq_pmr(tvb, tree, offsetb + iSize, iNbrRecords, iOffsetPMR, iRecFlags, p_mq_parm);
1872
0
                    iSize += dissect_mq_rr(tvb, tree, offsetb + iSize, iNbrRecords, iOffsetRR, p_mq_parm);
1873
0
                }
1874
0
            }
1875
0
        }
1876
0
    }
1877
11
    return iSize;
1878
11
}
1879
1880
static int dissect_mq_od(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, mq_parm_t* p_mq_parm, int* iDistributionListSize)
1881
45
{
1882
45
    int iSize = 0;
1883
1884
45
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
1885
45
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_OD || p_mq_parm->mq_strucID == MQ_STRUCTID_OD_EBCDIC)
1886
0
    {
1887
        /* The OD struct can be present in several messages at different levels */
1888
0
        uint32_t iVersion = 0;
1889
0
        iVersion = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
1890
        /* Compute length according to version */
1891
0
        switch (iVersion)
1892
0
        {
1893
0
            case 1: iSize = 168; break;
1894
0
            case 2: iSize = 200; break;
1895
0
            case 3: iSize = 336; break;
1896
0
            case 4: iSize = 336 + 3 * 20 + 4; break;
1897
0
        }
1898
1899
0
        if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
1900
0
        {
1901
0
            int      iNbrRecords = 0;
1902
1903
0
            if (iVersion >= 2)
1904
0
                iNbrRecords = tvb_get_uint32(tvb, offset + 168, p_mq_parm->mq_int_enc);
1905
1906
0
            if (pinfo)
1907
0
            {
1908
0
                uint8_t* sObj;
1909
0
                uint32_t uTyp;
1910
1911
0
                uTyp = tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
1912
0
                sObj = tvb_get_string_enc(pinfo->pool, tvb, offset + 12, 48, p_mq_parm->mq_str_enc);
1913
0
                col_append_fstr(pinfo->cinfo, COL_INFO, " Typ=%s", try_val_to_str_ext(uTyp, &mq_MQOT_xvals));
1914
0
                if (strip_trailing_blanks(sObj, 48) > 0)
1915
0
                {
1916
0
                    col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sObj);
1917
0
                }
1918
0
            }
1919
1920
0
            if (tree)
1921
0
            {
1922
0
                proto_tree* mq_tree;
1923
1924
0
                mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_od, NULL, MQ_TEXT_OD);
1925
1926
0
                proto_tree_add_item(mq_tree, hf_mq_od_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
1927
0
                proto_tree_add_item(mq_tree, hf_mq_od_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
1928
0
                proto_tree_add_item(mq_tree, hf_mq_od_objecttype, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
1929
0
                proto_tree_add_item(mq_tree, hf_mq_od_objectname, tvb, offset + 12, 48, p_mq_parm->mq_str_enc);
1930
0
                proto_tree_add_item(mq_tree, hf_mq_od_objqmgrname, tvb, offset + 60, 48, p_mq_parm->mq_str_enc);
1931
0
                proto_tree_add_item(mq_tree, hf_mq_od_dynqname, tvb, offset + 108, 48, p_mq_parm->mq_str_enc);
1932
0
                proto_tree_add_item(mq_tree, hf_mq_od_altuserid, tvb, offset + 156, 12, p_mq_parm->mq_str_enc);
1933
1934
0
                if (iVersion >= 2)
1935
0
                {
1936
0
                    proto_tree_add_item(mq_tree, hf_mq_od_recspresent, tvb, offset + 168, 4, p_mq_parm->mq_int_enc);
1937
0
                    proto_tree_add_item(mq_tree, hf_mq_od_knowndstcnt, tvb, offset + 172, 4, p_mq_parm->mq_int_enc);
1938
0
                    proto_tree_add_item(mq_tree, hf_mq_od_unknowdstcnt, tvb, offset + 176, 4, p_mq_parm->mq_int_enc);
1939
0
                    proto_tree_add_item(mq_tree, hf_mq_od_invaldstcnt, tvb, offset + 180, 4, p_mq_parm->mq_int_enc);
1940
0
                    proto_tree_add_item(mq_tree, hf_mq_od_objrecofs, tvb, offset + 184, 4, p_mq_parm->mq_int_enc);
1941
0
                    proto_tree_add_item(mq_tree, hf_mq_od_resprecofs, tvb, offset + 188, 4, p_mq_parm->mq_int_enc);
1942
0
                    proto_tree_add_item(mq_tree, hf_mq_od_objrecptr, tvb, offset + 192, 4, p_mq_parm->mq_int_enc);
1943
0
                    proto_tree_add_item(mq_tree, hf_mq_od_resprecptr, tvb, offset + 196, 4, p_mq_parm->mq_int_enc);
1944
0
                }
1945
0
                if (iVersion >= 3)
1946
0
                {
1947
0
                    proto_tree_add_item(mq_tree, hf_mq_od_altsecurid, tvb, offset + 200, 40, p_mq_parm->mq_str_enc);
1948
0
                    proto_tree_add_item(mq_tree, hf_mq_od_resolvqname, tvb, offset + 240, 48, p_mq_parm->mq_str_enc);
1949
0
                    proto_tree_add_item(mq_tree, hf_mq_od_resolvqmgrnm, tvb, offset + 288, 48, p_mq_parm->mq_str_enc);
1950
0
                }
1951
0
                if (iVersion >= 4)
1952
0
                {
1953
0
                    dissect_mq_charv(tvb, pinfo, mq_tree, offset + 336, 20, ett_mq_od_objstr, "Object string", p_mq_parm);
1954
0
                    dissect_mq_charv(tvb, pinfo, mq_tree, offset + 356, 20, ett_mq_od_selstr, "Selection string", p_mq_parm);
1955
0
                    dissect_mq_charv(tvb, pinfo, mq_tree, offset + 376, 20, ett_mq_od_resobjstr, "Resolved object string", p_mq_parm);
1956
0
                    proto_tree_add_item(mq_tree, hf_mq_od_resolvobjtyp, tvb, offset + 396, 4, p_mq_parm->mq_int_enc);
1957
0
                }
1958
0
            }
1959
0
            if (iNbrRecords > 0)
1960
0
            {
1961
0
                int iOffsetOR = 0;
1962
0
                int iOffsetRR = 0;
1963
1964
0
                *iDistributionListSize = iNbrRecords;
1965
0
                iOffsetOR = tvb_get_uint32(tvb, offset + 184, p_mq_parm->mq_int_enc);
1966
0
                iOffsetRR = tvb_get_uint32(tvb, offset + 188, p_mq_parm->mq_int_enc);
1967
1968
0
                iSize += dissect_mq_or(tvb, tree, offset, iNbrRecords, iOffsetOR, p_mq_parm);
1969
0
                iSize += dissect_mq_rr(tvb, tree, offset, iNbrRecords, iOffsetRR, p_mq_parm);
1970
0
            }
1971
0
        }
1972
0
    }
1973
45
    return iSize;
1974
45
}
1975
1976
static int dissect_mq_xid(tvbuff_t* tvb, proto_tree* tree, mq_parm_t* p_mq_parm, int offset)
1977
2
{
1978
2
    int iSizeXid = 0;
1979
2
    if (tvb_reported_length_remaining(tvb, offset) >= 6)
1980
2
    {
1981
2
        uint8_t iXidLength = 0;
1982
2
        uint8_t iBqLength = 0;
1983
1984
2
        iXidLength = tvb_get_uint8(tvb, offset + 4);
1985
2
        iBqLength = tvb_get_uint8(tvb, offset + 5);
1986
2
        iSizeXid = 6 + iXidLength + iBqLength;
1987
1988
2
        if (tvb_reported_length_remaining(tvb, offset) >= iSizeXid)
1989
0
        {
1990
0
            proto_tree* mq_tree;
1991
1992
0
            mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSizeXid, ett_mq_xa_xid, NULL, MQ_TEXT_XID);
1993
1994
0
            proto_tree_add_item(mq_tree, hf_mq_xa_xid_formatid, tvb, offset, 4, p_mq_parm->mq_int_enc);
1995
0
            proto_tree_add_item(mq_tree, hf_mq_xa_xid_glbxid_len, tvb, offset + 4, 1, p_mq_parm->mq_int_enc);
1996
0
            proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq_length, tvb, offset + 5, 1, p_mq_parm->mq_int_enc);
1997
0
            proto_tree_add_item(mq_tree, hf_mq_xa_xid_globalxid, tvb, offset + 6, iXidLength, ENC_NA);
1998
0
            proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq, tvb, offset + 6 + iXidLength, iBqLength, ENC_NA);
1999
2000
0
            iSizeXid = WS_ROUNDUP_4(iSizeXid); /* Alignment to 4 byte word boundary */
2001
0
            if (tvb_reported_length_remaining(tvb, offset) < iSizeXid)
2002
0
                iSizeXid = 0;
2003
0
        }
2004
2
        else iSizeXid = 0;
2005
2
    }
2006
2
    return iSizeXid;
2007
2
}
2008
2009
static int dissect_mq_sid(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, mq_parm_t* p_mq_parm, int offset)
2010
0
{
2011
0
    uint8_t iSIDL;
2012
0
    uint8_t iSID;
2013
0
    char* sid_str;
2014
0
    int    bOffset = offset;
2015
2016
0
    iSIDL = tvb_get_uint8(tvb, offset);
2017
0
    proto_tree_add_item(tree, hf_mq_sidlen, tvb, offset, 1, p_mq_parm->mq_int_enc);
2018
0
    offset++;
2019
0
    if (iSIDL > 0)
2020
0
    {
2021
0
        iSID = tvb_get_uint8(tvb, offset);
2022
0
        proto_tree_add_item(tree, hf_mq_sidtyp, tvb, offset, 1, p_mq_parm->mq_int_enc);
2023
0
        offset++;
2024
0
        if (iSID == MQ_MQSIDT_NT_SECURITY_ID)
2025
0
        {
2026
0
            offset = dissect_nt_sid(tvb, pinfo, offset, tree, "SID", &sid_str, -1);
2027
0
        }
2028
0
        else
2029
0
        {
2030
0
            proto_tree_add_item(tree, hf_mq_securityid, tvb, offset, 40, ENC_NA);
2031
0
            offset += 40;
2032
0
        }
2033
0
    }
2034
0
    return offset - bOffset;
2035
0
}
2036
static void dissect_mq_addCR_colinfo(packet_info* pinfo, mq_parm_t* p_mq_parm)
2037
30
{
2038
30
    if (p_mq_parm->mq_convID)
2039
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " C.R=%d.%d", p_mq_parm->mq_convID, p_mq_parm->mq_rqstID);
2040
30
}
2041
static int dissect_mq_id(tvbuff_t* tvb, packet_info* pinfo, proto_tree* mqroot_tree, int offset, mq_parm_t* p_mq_parm)
2042
0
{
2043
0
    uint8_t iFAPLvl;
2044
0
    int    iSize;
2045
0
    int    iPktSz;
2046
2047
0
    iPktSz = tvb_reported_length_remaining(tvb, offset);
2048
0
    iFAPLvl = tvb_get_uint8(tvb, offset + 4);
2049
2050
0
    if (iFAPLvl < 4)
2051
0
        iSize = 44;
2052
0
    else if (iFAPLvl < 9)
2053
0
        iSize = 102;
2054
0
    else if (iFAPLvl < 11)
2055
0
        iSize = 208;
2056
0
    else
2057
0
        iSize = 240;
2058
0
    iSize = MIN(iSize, iPktSz);
2059
2060
0
    if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
2061
0
    {
2062
0
        uint8_t* sChannel;
2063
0
        sChannel = tvb_get_string_enc(pinfo->pool, tvb, offset + 24, 20, p_mq_parm->mq_str_enc);
2064
0
        dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2065
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " FAPLvl=%d", iFAPLvl);
2066
0
        if (strip_trailing_blanks(sChannel, 20) > 0)
2067
0
        {
2068
0
            col_append_fstr(pinfo->cinfo, COL_INFO, ", CHL=%s", sChannel);
2069
0
        }
2070
0
        if (iSize > 48)
2071
0
        {
2072
0
            uint8_t* sQMgr;
2073
0
            sQMgr = tvb_get_string_enc(pinfo->pool, tvb, offset + 48, 48, p_mq_parm->mq_str_enc);
2074
0
            if (strip_trailing_blanks(sQMgr, 48) > 0)
2075
0
            {
2076
0
                col_append_fstr(pinfo->cinfo, COL_INFO, ", QM=%s", sQMgr);
2077
0
            }
2078
0
            p_mq_parm->mq_id_ccsid.ccsid = (uint32_t)tvb_get_uint16(tvb, offset + 46, p_mq_parm->mq_int_enc);
2079
0
        }
2080
0
        if (mqroot_tree)
2081
0
        {
2082
0
            proto_tree* mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_id, NULL, MQ_TEXT_ID);
2083
2084
0
            proto_tree_add_item(mq_tree, hf_mq_id_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
2085
0
            proto_tree_add_item(mq_tree, hf_mq_id_FapLevel, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
2086
2087
            /* ID Capability flags 1 */
2088
0
            proto_tree_add_bitmask(mq_tree, tvb, offset + 5, hf_mq_id_cf1, ett_mq_id_cf1, pf_flds_cf1, ENC_BIG_ENDIAN);
2089
0
            proto_tree_add_bitmask(mq_tree, tvb, offset + 6, hf_mq_id_ecf1, ett_mq_id_ecf1, pf_flds_cf1, ENC_BIG_ENDIAN);
2090
2091
            /* Error flags 1*/
2092
0
            proto_tree_add_bitmask(mq_tree, tvb, offset + 7, hf_mq_id_ief1, ett_mq_id_ief1, pf_flds_ef1, ENC_BIG_ENDIAN);
2093
2094
0
            proto_tree_add_item(mq_tree, hf_mq_id_Reserved, tvb, offset + 8, 2, p_mq_parm->mq_int_enc);
2095
0
            proto_tree_add_item(mq_tree, hf_mq_id_MaxMsgBatch, tvb, offset + 10, 2, p_mq_parm->mq_int_enc);
2096
0
            proto_tree_add_item(mq_tree, hf_mq_id_MaxTrSize, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2097
0
            proto_tree_add_item(mq_tree, hf_mq_id_MaxMsgSize, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2098
0
            proto_tree_add_item(mq_tree, hf_mq_id_SeqWrapVal, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
2099
0
            proto_tree_add_item(mq_tree, hf_mq_id_channel, tvb, offset + 24, 20, p_mq_parm->mq_str_enc);
2100
2101
0
            if (iSize > 44 || (iPktSz > iSize && iPktSz > 44))
2102
0
            {
2103
                /* ID Capability flags 2 */
2104
0
                proto_tree_add_bitmask(mq_tree, tvb, offset + 44, hf_mq_id_cf2, ett_mq_id_cf2, pf_flds_cf2, ENC_BIG_ENDIAN);
2105
0
                proto_tree_add_bitmask(mq_tree, tvb, offset + 45, hf_mq_id_ecf2, ett_mq_id_ecf2, pf_flds_cf2, ENC_BIG_ENDIAN);
2106
2107
0
                proto_tree_add_item(mq_tree, hf_mq_id_ccsid, tvb, offset + 46, 2, p_mq_parm->mq_int_enc);
2108
0
                proto_tree_add_item(mq_tree, hf_mq_id_qmgrname, tvb, offset + 48, 48, p_mq_parm->mq_str_enc);
2109
0
                proto_tree_add_item(mq_tree, hf_mq_id_HBInterval, tvb, offset + 96, 4, p_mq_parm->mq_int_enc);
2110
0
                proto_tree_add_item(mq_tree, hf_mq_id_EFLLength, tvb, offset + 100, 2, p_mq_parm->mq_int_enc);
2111
0
                if (iSize > 102 || (iPktSz > iSize && iPktSz > 102))
2112
0
                {
2113
                    /* Error flags 2*/
2114
0
                    proto_tree_add_bitmask(mq_tree, tvb, offset + 102, hf_mq_id_ief2, ett_mq_id_ief2, pf_flds_ef2, ENC_BIG_ENDIAN);
2115
0
                    proto_tree_add_item(mq_tree, hf_mq_id_Reserved1, tvb, offset + 103, 1, ENC_BIG_ENDIAN);
2116
2117
0
                    if (iSize > 104 || (iPktSz > iSize && iPktSz > 104))
2118
0
                    {
2119
0
                        proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc);
2120
0
                        proto_tree_add_item(mq_tree, hf_mq_id_MsgCprsLst, tvb, offset + 106, 16, p_mq_parm->mq_int_enc);
2121
0
                        proto_tree_add_item(mq_tree, hf_mq_id_Reserved2, tvb, offset + 122, 2, p_mq_parm->mq_int_enc);
2122
0
                        proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst, tvb, offset + 124, 4, p_mq_parm->mq_int_enc);
2123
0
                        if (iSize > 128 || (iPktSz > iSize && iPktSz > 128))
2124
0
                        {
2125
0
                            proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt, tvb, offset + 128, 4, p_mq_parm->mq_int_enc);
2126
2127
                            /* ID Capability flags 3 */
2128
0
                            proto_tree_add_bitmask(mq_tree, tvb, offset + 132, hf_mq_id_cf3, ett_mq_id_cf3, pf_flds_cf3, ENC_BIG_ENDIAN);
2129
0
                            proto_tree_add_bitmask(mq_tree, tvb, offset + 133, hf_mq_id_ecf3, ett_mq_id_ecf3, pf_flds_cf3, ENC_BIG_ENDIAN);
2130
2131
0
                            proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc);
2132
0
                            proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc);
2133
0
                            proto_tree_add_item(mq_tree, hf_mq_id_ThreadId, tvb, offset + 140, 4, p_mq_parm->mq_int_enc);
2134
0
                            proto_tree_add_item(mq_tree, hf_mq_id_TraceId, tvb, offset + 144, 4, p_mq_parm->mq_int_enc);
2135
0
                            proto_tree_add_item(mq_tree, hf_mq_id_ProdId, tvb, offset + 148, 12, p_mq_parm->mq_str_enc);
2136
0
                        }
2137
0
                    }
2138
0
                }
2139
0
                if (iSize > 160 || (iPktSz > iSize && iPktSz > 160))
2140
0
                {
2141
0
                    proto_tree_add_item(mq_tree, hf_mq_id_mqmid, tvb, offset + 160, 48, p_mq_parm->mq_str_enc);
2142
0
                }
2143
0
                if (iSize > 208 || (iPktSz > iSize && iPktSz > 208))
2144
0
                {
2145
0
                    proto_tree_add_item(mq_tree, hf_mq_id_pal, tvb, offset + 208, 20, p_mq_parm->mq_str_enc);
2146
0
                    proto_tree_add_item(mq_tree, hf_mq_id_r, tvb, offset + 228, 12, p_mq_parm->mq_str_enc);
2147
0
                }
2148
0
            }
2149
0
        }
2150
0
    }
2151
0
    return iPktSz;
2152
0
}
2153
static int dissect_mq_md(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, int offset, mq_parm_t* p_mq_parm, bool bDecode)
2154
51
{
2155
51
    int iSize = 0;
2156
2157
51
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2158
51
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_MD || p_mq_parm->mq_strucID == MQ_STRUCTID_MD_EBCDIC)
2159
0
    {
2160
0
        uint32_t iVersion = 0;
2161
0
        iVersion = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2162
        /* Compute length according to version */
2163
0
        switch (iVersion)
2164
0
        {
2165
0
            case 1: iSize = 324; break;
2166
0
            case 2: iSize = 364; break;
2167
0
        }
2168
2169
0
        if (bDecode && iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
2170
0
        {
2171
0
            p_mq_parm->iOfsEnc = offset + 24;
2172
0
            p_mq_parm->iOfsCcs = offset + 28;
2173
0
            p_mq_parm->iOfsFmt = offset + 32;
2174
2175
0
            p_mq_parm->mq_md_ccsid.encod = tvb_get_uint32(tvb, offset + 24, p_mq_parm->mq_int_enc);
2176
0
            p_mq_parm->mq_md_ccsid.ccsid = tvb_get_uint32(tvb, offset + 28, p_mq_parm->mq_int_enc);
2177
0
            if (tree)
2178
0
            {
2179
0
                proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_md, NULL, MQ_TEXT_MD);
2180
2181
0
                proto_tree_add_item(mq_tree, hf_mq_md_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
2182
0
                proto_tree_add_item(mq_tree, hf_mq_md_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2183
0
                proto_tree_add_item(mq_tree, hf_mq_md_report, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2184
0
                proto_tree_add_item(mq_tree, hf_mq_md_msgtype, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2185
0
                proto_tree_add_item(mq_tree, hf_mq_md_expiry, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2186
0
                proto_tree_add_item(mq_tree, hf_mq_md_feedback, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
2187
0
                dissect_mq_encoding(mq_tree, pinfo, hf_mq_md_encoding, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
2188
0
                proto_tree_add_item(mq_tree, hf_mq_md_ccsid, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
2189
0
                proto_tree_add_item(mq_tree, hf_mq_md_format, tvb, offset + 32, 8, p_mq_parm->mq_str_enc);
2190
0
                proto_tree_add_item(mq_tree, hf_mq_md_priority, tvb, offset + 40, 4, p_mq_parm->mq_int_enc);
2191
0
                proto_tree_add_item(mq_tree, hf_mq_md_persistence, tvb, offset + 44, 4, p_mq_parm->mq_int_enc);
2192
0
                proto_tree_add_item(mq_tree, hf_mq_md_msgid, tvb, offset + 48, 24, ENC_NA);
2193
0
                proto_tree_add_item(mq_tree, hf_mq_md_correlid, tvb, offset + 72, 24, ENC_NA);
2194
0
                proto_tree_add_item(mq_tree, hf_mq_md_backoutcnt, tvb, offset + 96, 4, p_mq_parm->mq_int_enc);
2195
0
                proto_tree_add_item(mq_tree, hf_mq_md_replytoq, tvb, offset + 100, 48, p_mq_parm->mq_str_enc);
2196
0
                proto_tree_add_item(mq_tree, hf_mq_md_replytoqmgr, tvb, offset + 148, 48, p_mq_parm->mq_str_enc);
2197
0
                proto_tree_add_item(mq_tree, hf_mq_md_userid, tvb, offset + 196, 12, p_mq_parm->mq_str_enc);
2198
0
                proto_tree_add_item(mq_tree, hf_mq_md_acttoken, tvb, offset + 208, 32, ENC_NA);
2199
0
                proto_tree_add_item(mq_tree, hf_mq_md_appliddata, tvb, offset + 240, 32, p_mq_parm->mq_str_enc);
2200
0
                proto_tree_add_item(mq_tree, hf_mq_md_putappltype, tvb, offset + 272, 4, p_mq_parm->mq_int_enc);
2201
0
                proto_tree_add_item(mq_tree, hf_mq_md_putapplname, tvb, offset + 276, 28, p_mq_parm->mq_str_enc);
2202
0
                proto_tree_add_item(mq_tree, hf_mq_md_putdate, tvb, offset + 304, 8, p_mq_parm->mq_str_enc);
2203
0
                proto_tree_add_item(mq_tree, hf_mq_md_puttime, tvb, offset + 312, 8, p_mq_parm->mq_str_enc);
2204
0
                proto_tree_add_item(mq_tree, hf_mq_md_apporigdata, tvb, offset + 320, 4, p_mq_parm->mq_str_enc);
2205
2206
0
                if (iVersion >= 2)
2207
0
                {
2208
0
                    proto_tree_add_item(mq_tree, hf_mq_md_groupid, tvb, offset + 324, 24, ENC_NA);
2209
0
                    proto_tree_add_item(mq_tree, hf_mq_md_msgseqnumber, tvb, offset + 348, 4, p_mq_parm->mq_int_enc);
2210
0
                    proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 352, 4, p_mq_parm->mq_int_enc);
2211
0
                    proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 356, 4, p_mq_parm->mq_int_enc);
2212
0
                    proto_tree_add_item(mq_tree, hf_mq_md_origlen, tvb, offset + 360, 4, p_mq_parm->mq_int_enc);
2213
0
                }
2214
0
            }
2215
0
        }
2216
0
    }
2217
51
    return iSize;
2218
51
}
2219
static int dissect_mq_fopa(tvbuff_t* tvb, proto_tree* tree, int offset, mq_parm_t* p_mq_parm)
2220
8
{
2221
8
    int iSize = 0;
2222
8
    int iVers = 0;
2223
2224
8
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2225
8
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA || p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA_EBCDIC)
2226
0
    {
2227
0
        iVers = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2228
0
        iSize = tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
2229
0
        if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
2230
0
        {
2231
0
            proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_fopa, NULL, MQ_TEXT_FOPA);
2232
2233
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
2234
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2235
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_length, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2236
2237
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_DefPersistence, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2238
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_DefPutRespType, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2239
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_DefReadAhead, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
2240
0
            proto_tree_add_item(mq_tree, hf_mq_fopa_PropertyControl, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
2241
2242
0
            if ((iVers > 1) && (iSize > 28))
2243
0
                proto_tree_add_item(mq_tree, hf_mq_fopa_Unknown, tvb, offset + 28, iSize - 28, p_mq_parm->mq_int_enc);
2244
0
        }
2245
0
    }
2246
8
    return iSize;
2247
8
}
2248
static int dissect_mq_fcmi(tvbuff_t* tvb, proto_tree* tree, int offset, mq_parm_t* p_mq_parm)
2249
8
{
2250
8
    int iSize = 0;
2251
2252
8
    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2253
8
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_FCMI || p_mq_parm->mq_strucID == MQ_STRUCTID_FCMI_EBCDIC)
2254
0
    {
2255
0
        iSize = 8;
2256
0
        if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
2257
0
        {
2258
0
            proto_tree* mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_fcmi, NULL, MQ_TEXT_FCMI);
2259
2260
0
            proto_tree_add_item(mq_tree, hf_mq_fcmi_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
2261
0
            proto_tree_add_item(mq_tree, hf_mq_fcmi_unknown, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2262
0
        }
2263
0
    }
2264
8
    return iSize;
2265
8
}
2266
static void dissect_mq_pdu(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree)
2267
43
{
2268
43
    int        offset = 0;
2269
43
    uint32_t   iSegmentLength = 0;
2270
43
    uint32_t   iSizePayload = 0;
2271
43
    int        iSizeMD = 0;
2272
43
    bool       bPayload = false;
2273
43
    bool       bEBCDIC = false;
2274
43
    unsigned   strid_enc;
2275
43
    int        iDistributionListSize = 0;
2276
43
    int        capLen;
2277
43
    mq_parm_t* p_mq_parm;
2278
43
    heur_dtbl_entry_t* hdtbl_entry;
2279
2280
43
    p_mq_parm = wmem_new0(pinfo->pool, mq_parm_t);
2281
2282
43
    p_mq_parm->mq_strucID = MQ_STRUCTID_NULL;
2283
43
    p_mq_parm->mq_int_enc = ENC_BIG_ENDIAN;
2284
43
    p_mq_parm->mq_str_enc = ENC_UTF_8 | ENC_NA;
2285
43
    p_mq_parm->iOfsEnc = 0;
2286
43
    p_mq_parm->iOfsFmt = 0;
2287
43
    p_mq_parm->iOfsCcs = 0;
2288
2289
43
    col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
2290
2291
43
    if (tvb_reported_length(tvb) < 4)
2292
0
        return;
2293
2294
43
    p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset);
2295
2296
43
    if (!is_mq_struc_TSH(p_mq_parm->mq_strucID) ||
2297
43
        (tvb_reported_length_remaining(tvb, offset) < 28))
2298
0
    {
2299
        /* This packet is a TCP continuation of a segment (if desegmentation is not enabled) */
2300
0
        col_append_str(pinfo->cinfo, COL_INFO, " [Undesegmented]");
2301
2302
0
        proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA);
2303
0
        call_data_dissector(tvb_new_subset_remaining(tvb, offset), pinfo, tree);
2304
0
        return;
2305
0
    }
2306
2307
43
    proto_tree* mq_tree = NULL;
2308
43
    proto_tree* mqroot_tree = NULL;
2309
43
    proto_item* ti = NULL;
2310
2311
    /* An MQ packet always starts with this structure*/
2312
43
    int iSizeTSH = 28;
2313
43
    int iSizeMPF = 0;  /* Size Of Multiplexed Field */
2314
2315
43
    strid_enc = ENC_ASCII | ENC_NA;
2316
43
    if ((p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC)
2317
0
    {
2318
0
        bEBCDIC = true;
2319
0
        strid_enc = ENC_EBCDIC | ENC_NA;
2320
0
        p_mq_parm->mq_str_enc = ENC_EBCDIC | ENC_NA;
2321
0
    }
2322
2323
43
    iSegmentLength = tvb_get_ntohl(tvb, offset + 4);
2324
2325
43
    if (p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM || p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM_EBCDIC)
2326
0
    {
2327
0
        if (tvb_reported_length_remaining(tvb, offset) < 36)
2328
0
            return;
2329
0
        iSizeMPF += 8;
2330
0
        iSizeTSH += iSizeMPF;
2331
0
        p_mq_parm->mq_convID = tvb_get_ntohl(tvb, offset + 8);
2332
0
        p_mq_parm->mq_rqstID = tvb_get_ntohl(tvb, offset + 12);
2333
0
    }
2334
43
    p_mq_parm->mq_opcode = tvb_get_uint8(tvb, offset + iSizeMPF + 9);
2335
2336
43
    if (p_mq_parm->mq_opcode == MQ_TST_REQUEST_MSGS || p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE)
2337
2
    {
2338
2
        p_mq_parm->iOfsEnc = offset + iSizeMPF + 20;
2339
2
        p_mq_parm->iOfsCcs = offset + iSizeMPF + 24;
2340
2
        p_mq_parm->iOfsFmt = offset;
2341
2
    }
2342
43
    p_mq_parm->mq_int_enc = (tvb_get_uint8(tvb, offset + iSizeMPF + 8) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN);
2343
43
    p_mq_parm->mq_ctlf1 = tvb_get_uint8(tvb, offset + iSizeMPF + 10);
2344
43
    p_mq_parm->mq_ctlf2 = tvb_get_uint8(tvb, offset + iSizeMPF + 11);
2345
2346
43
    p_mq_parm->mq_tsh_ccsid.encod = tvb_get_uint32(tvb, offset + iSizeMPF + 20, p_mq_parm->mq_int_enc);
2347
43
    p_mq_parm->mq_tsh_ccsid.ccsid = tvb_get_uint16(tvb, offset + iSizeMPF + 24, p_mq_parm->mq_int_enc);
2348
2349
43
    if (IS_EBCDIC(p_mq_parm->mq_tsh_ccsid.ccsid) && !bEBCDIC)
2350
0
    {
2351
0
        bEBCDIC = true;
2352
0
        p_mq_parm->mq_str_enc = ENC_EBCDIC | ENC_NA;
2353
0
    }
2354
2355
43
    if (!mq_in_reassembly)
2356
22
    {
2357
22
        col_clear_fence(pinfo->cinfo, COL_INFO);
2358
22
        col_clear(pinfo->cinfo, COL_INFO);
2359
22
        col_add_fstr(pinfo->cinfo, COL_INFO, "%-17s", val_to_str_ext(pinfo->pool, p_mq_parm->mq_opcode, &mq_opcode_xvals, "Unknown (0x%02x)"));
2360
22
    }
2361
2362
43
    if (tree)
2363
43
    {
2364
43
        if (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE)
2365
41
        {
2366
41
            ti = proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA);
2367
41
            proto_item_append_text(ti, " (%s)", val_to_str_ext(pinfo->pool, p_mq_parm->mq_opcode, &mq_opcode_xvals, "Unknown (0x%02x)"));
2368
41
            if (bEBCDIC == true)
2369
0
                proto_item_append_text(ti, " (EBCDIC)");
2370
41
            mqroot_tree = proto_item_add_subtree(ti, ett_mq);
2371
41
        }
2372
2
        else
2373
2
        {
2374
2
            mqroot_tree = tree;
2375
2
        }
2376
2377
43
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeTSH, ett_mq_tsh, NULL, MQ_TEXT_TSH);
2378
2379
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_StructID, tvb, offset + 0, 4, strid_enc);
2380
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_mqseglen, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
2381
2382
43
        if (iSizeTSH == 36)
2383
0
        {
2384
0
            proto_tree_add_item(mq_tree, hf_mq_tsh_convid, tvb, offset + 8, 4, ENC_BIG_ENDIAN);
2385
0
            proto_tree_add_item(mq_tree, hf_mq_tsh_requestid, tvb, offset + 12, 4, ENC_BIG_ENDIAN);
2386
0
        }
2387
2388
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_byteorder, tvb, offset + iSizeMPF + 8, 1, ENC_BIG_ENDIAN);
2389
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_opcode, tvb, offset + iSizeMPF + 9, 1, ENC_BIG_ENDIAN);
2390
2391
43
        proto_tree_add_bitmask(mq_tree, tvb, offset + iSizeMPF + 10, hf_mq_tsh_ctlflgs1, ett_mq_tsh_tcf, pf_flds_tcf, ENC_BIG_ENDIAN);
2392
43
        proto_tree_add_bitmask(mq_tree, tvb, offset + iSizeMPF + 11, hf_mq_tsh_ctlflgs2, ett_mq_tsh_tcf2, pf_flds_tcf2, ENC_BIG_ENDIAN);
2393
2394
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_luwid, tvb, offset + iSizeMPF + 12, 8, ENC_NA);
2395
43
        dissect_mq_encoding(mq_tree, pinfo, hf_mq_tsh_encoding, tvb, offset + iSizeMPF + 20, 4, p_mq_parm->mq_int_enc);
2396
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_ccsid, tvb, offset + iSizeMPF + 24, 2, p_mq_parm->mq_int_enc);
2397
43
        proto_tree_add_item(mq_tree, hf_mq_tsh_reserved, tvb, offset + iSizeMPF + 26, 2, p_mq_parm->mq_int_enc);
2398
43
    }
2399
43
    offset += iSizeTSH;
2400
2401
43
    if (tvb_reported_length_remaining(tvb, offset) < 4)
2402
2
        return;
2403
2404
    /* Now dissect the embedded structures */
2405
41
    p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset);
2406
41
    if (((p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST) == 0) && p_mq_parm->mq_opcode >= 0x80)
2407
4
    {
2408
        /* This is a MQ segment continuation (if MQ reassembly is not enabled) */
2409
4
        if (!mq_in_reassembly)
2410
0
            col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]");
2411
4
        call_data_dissector(tvb_new_subset_remaining(tvb, offset), pinfo, (mqroot_tree) ? mqroot_tree : tree);
2412
4
        return;
2413
4
    }
2414
2415
    /* First MQ segment (opcodes below 0x80 never span several TSH) */
2416
37
    int iSizeAPI = 16;
2417
37
    if (p_mq_parm->mq_opcode >= 0x80 && p_mq_parm->mq_opcode <= 0x9F && tvb_reported_length_remaining(tvb, offset) >= 16)
2418
22
    {
2419
22
        uint32_t iReturnCode = 0;
2420
22
        uint32_t iHdl = 0;
2421
22
        iReturnCode = tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
2422
22
        iHdl = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
2423
22
        if (!mq_in_reassembly)
2424
9
            dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2425
22
        if (iHdl != 0 && iHdl != 0xffffffff && !mq_in_reassembly)
2426
7
            col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x", iHdl);
2427
22
        if (iReturnCode != 0)
2428
20
            col_append_fstr(pinfo->cinfo, COL_INFO, " [RC=%d]", iReturnCode);
2429
2430
22
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeAPI, ett_mq_api, NULL, MQ_TEXT_API);
2431
2432
22
        proto_tree_add_item(mq_tree, hf_mq_api_replylen, tvb, offset, 4, ENC_BIG_ENDIAN);
2433
22
        proto_tree_add_item(mq_tree, hf_mq_api_compcode, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2434
22
        proto_tree_add_item(mq_tree, hf_mq_api_reascode, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2435
22
        proto_tree_add_item(mq_tree, hf_mq_api_objecthdl, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2436
2437
22
        offset += iSizeAPI;
2438
22
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2439
22
    }
2440
37
    capLen = tvb_reported_length_remaining(tvb, offset);
2441
37
    if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && capLen >= 20)
2442
0
    {
2443
0
        int iSize = 20;
2444
0
        iSizePayload = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
2445
0
        bPayload = true;
2446
2447
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_msh, NULL, MQ_TEXT_MSH);
2448
2449
0
        proto_tree_add_item(mq_tree, hf_mq_msh_StructID, tvb, offset + 0, 4, p_mq_parm->mq_str_enc);
2450
0
        proto_tree_add_item(mq_tree, hf_mq_msh_seqnum, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2451
0
        proto_tree_add_item(mq_tree, hf_mq_msh_datalength, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2452
0
        proto_tree_add_item(mq_tree, hf_mq_msh_unknown1, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2453
0
        proto_tree_add_item(mq_tree, hf_mq_msh_msglength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2454
2455
0
        offset += iSize;
2456
0
    }
2457
37
    else if (p_mq_parm->mq_opcode == MQ_TST_CONAUTH_INFO && capLen >= 20)
2458
0
    {
2459
0
        int iSize = 24;
2460
0
        int iUsr = 0;
2461
0
        int iPsw = 0;
2462
2463
0
        iUsr = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
2464
0
        iPsw = tvb_get_uint32(tvb, offset + 20, p_mq_parm->mq_int_enc);
2465
2466
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_caut, NULL, MQ_TEXT_CAUT);
2467
2468
0
        proto_tree_add_item(mq_tree, hf_mq_caut_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
2469
0
        proto_tree_add_item(mq_tree, hf_mq_caut_AuthType, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2470
0
        proto_tree_add_item(mq_tree, hf_mq_caut_UsrMaxLen, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2471
0
        proto_tree_add_item(mq_tree, hf_mq_caut_PwdMaxLen, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2472
0
        proto_tree_add_item(mq_tree, hf_mq_caut_UsrLength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2473
0
        proto_tree_add_item(mq_tree, hf_mq_caut_PwdLength, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
2474
2475
0
        if (iUsr)
2476
0
            proto_tree_add_item(mq_tree, hf_mq_caut_usr, tvb, offset + 24, iUsr, p_mq_parm->mq_str_enc);
2477
0
        if (iPsw)
2478
0
            proto_tree_add_item(mq_tree, hf_mq_caut_psw, tvb, offset + 24 + iUsr, iPsw, p_mq_parm->mq_str_enc);
2479
2480
0
        offset += iSize + iUsr + iPsw;
2481
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2482
0
    }
2483
37
    else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && capLen >= 20)
2484
0
    {
2485
0
        int iSize = 20;
2486
0
        int iTy;
2487
0
        int iP1;
2488
0
        int iP2;
2489
2490
0
        p_mq_parm->mq_convID = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
2491
0
        p_mq_parm->mq_rqstID = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2492
0
        dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2493
0
        iTy = tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
2494
0
        iP1 = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
2495
0
        iP2 = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
2496
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%d, P1=%d, P2=%d", iTy, iP1, iP2);
2497
2498
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeAPI, ett_mq_socket, NULL, MQ_TEXT_SOCKET);
2499
2500
0
        proto_tree_add_item(mq_tree, hf_mq_socket_conversid, tvb, offset, 4, p_mq_parm->mq_int_enc);
2501
0
        proto_tree_add_item(mq_tree, hf_mq_socket_requestid, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2502
0
        proto_tree_add_item(mq_tree, hf_mq_socket_type, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2503
0
        proto_tree_add_item(mq_tree, hf_mq_socket_parm1, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2504
0
        proto_tree_add_item(mq_tree, hf_mq_socket_parm2, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2505
2506
0
        offset += iSize;
2507
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2508
0
    }
2509
37
    else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && capLen >= 8)
2510
1
    {
2511
        /* Some status are 28 bytes long and some are 36 bytes long */
2512
1
        int iStatus = 0;
2513
1
        int iStatusLength = 0;
2514
2515
1
        iStatus = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2516
1
        iStatusLength = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
2517
2518
1
        if (tvb_reported_length_remaining(tvb, offset) >= iStatusLength)
2519
1
        {
2520
1
            if (iStatus != 0)
2521
0
                col_append_fstr(pinfo->cinfo, COL_INFO, " Code=%s", val_to_str_ext(pinfo->pool, iStatus, &mq_status_xvals, "Unknown (0x%08x)"));
2522
2523
1
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 8, ett_mq_status, NULL, MQ_TEXT_STAT);
2524
2525
1
            proto_tree_add_item(mq_tree, hf_mq_status_length, tvb, offset, 4, p_mq_parm->mq_int_enc);
2526
1
            proto_tree_add_item(mq_tree, hf_mq_status_code, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2527
2528
1
            if (iStatusLength >= 12)
2529
0
                proto_tree_add_item(mq_tree, hf_mq_status_value, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2530
2531
1
            offset += iStatusLength;
2532
1
        }
2533
1
    }
2534
36
    else if (p_mq_parm->mq_opcode == MQ_TST_PING && capLen > 4)
2535
1
    {
2536
1
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_ping, NULL, MQ_TEXT_PING);
2537
2538
1
        proto_tree_add_item(mq_tree, hf_mq_ping_length, tvb, offset, 4, p_mq_parm->mq_int_enc);
2539
1
        proto_tree_add_item(mq_tree, hf_mq_ping_buffer, tvb, offset + 4, -1, ENC_NA);
2540
2541
1
        offset = tvb_reported_length(tvb);
2542
1
    }
2543
35
    else if (p_mq_parm->mq_opcode == MQ_TST_RESET && capLen >= 8)
2544
0
    {
2545
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_reset, NULL, MQ_TEXT_RESET);
2546
2547
0
        proto_tree_add_item(mq_tree, hf_mq_reset_length, tvb, offset, 4, p_mq_parm->mq_int_enc);
2548
0
        proto_tree_add_item(mq_tree, hf_mq_reset_seqnum, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2549
2550
0
        offset = tvb_reported_length(tvb);
2551
0
    }
2552
35
    else if ((p_mq_parm->mq_opcode == MQ_TST_MQOPEN || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE ||
2553
28
        p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY) && capLen >= 4)
2554
8
    {
2555
8
        offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize);
2556
8
        if (tree)
2557
8
        {
2558
8
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 4, ett_mq_open, NULL, MQ_TEXT_OPEN);
2559
8
            if (p_mq_parm->mq_opcode == MQ_TST_MQOPEN || p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY)
2560
2
            {
2561
2
                dissect_mq_MQOO(tvb, mq_tree, offset, ett_mq_open_option, hf_mq_open_options, p_mq_parm);
2562
2
            }
2563
8
            if (p_mq_parm->mq_opcode == MQ_TST_MQCLOSE || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY)
2564
6
            {
2565
6
                dissect_mq_MQCO(tvb, mq_tree, offset, p_mq_parm);
2566
6
            }
2567
8
        }
2568
8
        offset += 4;
2569
8
        offset += dissect_mq_fopa(tvb, mqroot_tree, offset, p_mq_parm);
2570
8
        offset += dissect_mq_fcmi(tvb, mqroot_tree, offset, p_mq_parm);
2571
8
    }
2572
27
    else if ((p_mq_parm->mq_opcode == MQ_TST_MQCONN || p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY) && capLen > 0)
2573
4
    {
2574
4
        int iSizeCONN = 0;
2575
2576
        /*iSizeCONN = ((iVersionID == 4 || iVersionID == 6) ? 120 : 112);*/ /* guess */
2577
        /* The iVersionID is available in the previous ID segment, we should keep a state
2578
        * Instead we rely on the segment length announced in the TSH */
2579
        /* The MQCONN structure is special because it does not start with a structid */
2580
4
        iSizeCONN = iSegmentLength - iSizeTSH - iSizeAPI;
2581
        //if (iSizeCONN != 120 && /*FAPLvl <= 5 - 6 Version 1 */
2582
        //    iSizeCONN != 260 && /*FAPLvl == 7 - 11 Version 1 */
2583
        //    iSizeCONN != 332 && /*FAPLvl == 12 -13 Version 2 */
2584
        //    iSizeCONN != 460 && /*FAPLvl == 14 -16 Version 3 */
2585
        //    iSizeCONN != 472)   /*FAPLvl == 17     Version 4 */
2586
        //    iSizeCONN = 0;
2587
2588
4
        if (iSizeCONN != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeCONN)
2589
4
        {
2590
4
            char* sApplicationName;
2591
4
            char* sQMgr;
2592
4
            uint32_t iEnc;
2593
4
            uint32_t iCod;
2594
4
            char    cChr;
2595
2596
            /*
2597
            We have to handle the ccsid/coding of the MQCONN REPLY
2598
            on z/OS it is always EBCDIC
2599
            integer are always BIG_ENDIAN
2600
2601
            XXX - why can't the values from p_mq_parm always
2602
            be used?
2603
            */
2604
4
            if (p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY)
2605
4
            {
2606
                /*
2607
                Try to guess the byte order.
2608
                Fetch the application type in little-endian
2609
                byte order; if it's > 65536, it's probably
2610
                big-endian, and we fetched it in the wrong
2611
                byte order.
2612
                */
2613
4
                uint32_t iApp;
2614
2615
4
                iApp = tvb_get_letohl(tvb, offset + 48 + 28);
2616
4
                if (iApp <= 65536)
2617
0
                    iCod = ENC_LITTLE_ENDIAN;
2618
4
                else
2619
4
                    iCod = ENC_BIG_ENDIAN;
2620
2621
                /*
2622
                Try to guess whether this is EBCDIC or not.
2623
                */
2624
4
                cChr = tvb_get_uint8(tvb, offset + 48);
2625
4
                if ((cChr >= 'A' && cChr <= 'Z') ||
2626
4
                    (cChr >= 'a' && cChr <= 'z') ||
2627
3
                    (cChr >= '0' && cChr <= '9') ||
2628
3
                    (cChr == '\\'))
2629
1
                {
2630
1
                    iEnc = p_mq_parm->mq_str_enc;
2631
1
                }
2632
3
                else
2633
3
                {
2634
3
                    iEnc = ENC_EBCDIC;
2635
3
                }
2636
4
            }
2637
0
            else
2638
0
            {
2639
0
                iCod = p_mq_parm->mq_int_enc;
2640
0
                iEnc = p_mq_parm->mq_str_enc;
2641
0
            }
2642
2643
4
            sApplicationName = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset + 48, 28, iEnc);
2644
4
            sApplicationName = format_text_chr(pinfo->pool, sApplicationName, strlen(sApplicationName), '.');
2645
4
            if (strip_trailing_blanks((uint8_t*)sApplicationName, (uint32_t)strlen(sApplicationName)) > 0)
2646
1
            {
2647
1
                col_append_fstr(pinfo->cinfo, COL_INFO, " App=%s", sApplicationName);
2648
1
            }
2649
4
            sQMgr = (char*)tvb_get_string_enc(pinfo->pool, tvb, offset, 48, iEnc);
2650
4
            sQMgr = format_text_chr(pinfo->pool, sQMgr, strlen(sQMgr), '.');
2651
4
            if (strip_trailing_blanks((uint8_t*)sQMgr, (uint32_t)strlen(sQMgr)) > 0)
2652
2
            {
2653
2
                col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQMgr);
2654
2
            }
2655
2656
4
            if (tree)
2657
4
            {
2658
4
                ptvcursor_t* cursor;
2659
4
                int tRemain;
2660
4
                proto_tree* mq_tree_sub;
2661
4
                int iOption;
2662
4
                int iVersion;
2663
4
                int nofs;
2664
2665
4
                mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeCONN, ett_mq_conn, NULL, MQ_TEXT_CONN);
2666
2667
4
                cursor = ptvcursor_new(pinfo->pool, mq_tree, tvb, offset);
2668
2669
4
                ptvcursor_add(cursor, hf_mq_conn_QMgr, 48, iEnc);
2670
4
                ptvcursor_add(cursor, hf_mq_conn_appname, 28, iEnc);
2671
4
                ptvcursor_add(cursor, hf_mq_conn_apptype, 4, iCod);
2672
4
                ptvcursor_add(cursor, hf_mq_conn_acttoken, 32, ENC_NA);
2673
2674
4
                ptvcursor_add(cursor, hf_mq_conn_options, 4, iCod);
2675
4
                ptvcursor_add(cursor, hf_mq_conn_Xoptions, 4, iCod);
2676
2677
                /* starting here we must have the MQCNO structure */
2678
2679
4
                nofs = ptvcursor_current_offset(cursor);
2680
4
                tRemain = tvb_reported_length_remaining(tvb, nofs);
2681
2682
4
                iVersion = tvb_get_uint32(tvb, nofs + 4, iCod);
2683
4
                iOption = tvb_get_uint32(tvb, nofs + 8, iCod);
2684
2685
4
                mq_tree_sub = proto_tree_add_subtree(mq_tree, tvb, nofs, tRemain, ett_mq_fcno, NULL, MQ_TEXT_FCNO);
2686
4
                ptvcursor_set_tree(cursor, mq_tree_sub);
2687
4
                if (iVersion >= 1)
2688
3
                {
2689
3
                    ptvcursor_add(cursor, hf_mq_fapmqcno_structid, 4, iEnc);
2690
3
                    ptvcursor_add(cursor, hf_mq_fapmqcno_version, 4, iCod);
2691
3
                    nofs = ptvcursor_current_offset(cursor);
2692
3
                    if (iOption == 0)
2693
0
                    {
2694
0
                        proto_tree_add_item(mq_tree, hf_mq_fapmqcno_capflags, ptvcursor_tvbuff(cursor), nofs, 4, p_mq_parm->mq_int_enc);
2695
0
                        proto_tree_add_subtree_format(mq_tree_sub, ptvcursor_tvbuff(cursor), nofs, 4, ett_mq_fcno_option, NULL, MQ_TEXT_FCNO_OPT_NONE);
2696
0
                        ptvcursor_advance(cursor, 4);
2697
0
                    }
2698
3
                    else
2699
3
                    {
2700
3
                        proto_tree_add_bitmask(mq_tree_sub, ptvcursor_tvbuff(cursor), nofs, hf_mq_fapmqcno_capflags, ett_mq_fcno_option, pf_flds_fcno_opt, p_mq_parm->mq_int_enc);
2701
3
                        ptvcursor_advance(cursor, 4);
2702
3
                    }
2703
3
                    ptvcursor_add(cursor, hf_mq_fapmqcno_conntag, 128, ENC_NA);
2704
3
                }
2705
4
                if (iVersion >= 2 && tvb_reported_length_remaining(tvb, ptvcursor_current_offset(cursor)) > 128)
2706
0
                {
2707
0
                    ptvcursor_add(cursor, hf_mq_fapmqcno_retconntag, 128, ENC_NA);
2708
0
                }
2709
4
                if (iVersion >= 3 && tvb_reported_length_remaining(tvb, ptvcursor_current_offset(cursor)) > 12)
2710
0
                {
2711
0
                    ptvcursor_add(cursor, hf_mq_fapmqcno_type, 4, ENC_NA);
2712
0
                    ptvcursor_add(cursor, hf_mq_fapmqcno_timeout, 4, ENC_NA);
2713
0
                    ptvcursor_add(cursor, hf_mq_fapmqcno_balopts, 4, ENC_NA);
2714
0
                }
2715
4
                ptvcursor_set_tree(cursor, mq_tree);
2716
4
                nofs = ptvcursor_current_offset(cursor);
2717
4
                tRemain = tvb_reported_length_remaining(tvb, nofs);
2718
4
                if (tRemain > 0)
2719
2
                {
2720
2
                    if (tRemain - 48 > 0)
2721
1
                    {
2722
1
                        ptvcursor_add(cursor, hf_mq_conn_unknowbyt, tRemain - 48, iEnc);
2723
1
                        tRemain -= (tRemain - 48);
2724
1
                    }
2725
2
                    if (tRemain >= 48)
2726
1
                    {
2727
1
                        ptvcursor_add(cursor, hf_mq_conn_mqmid, 48, iEnc);
2728
1
                        tRemain -= 48;
2729
1
                    }
2730
2
                    if (tRemain > 0)
2731
1
                    {
2732
1
                        ptvcursor_add(cursor, hf_mq_conn_unknowbyt, tRemain, iEnc);
2733
1
                    }
2734
2
                }
2735
4
                iSizeCONN = ptvcursor_current_offset(cursor) - offset;
2736
4
                ptvcursor_free(cursor);
2737
4
            }
2738
4
            offset += iSizeCONN;
2739
4
        }
2740
4
    }
2741
23
    else if ((p_mq_parm->mq_opcode == MQ_TST_MQINQ || p_mq_parm->mq_opcode == MQ_TST_MQINQ_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQSET) && capLen >= 12)
2742
4
    {
2743
        /* The MQINQ/MQSET structure is special because it does not start with a structid */
2744
4
        uint32_t uNbSelectors;
2745
4
        uint32_t uNbIntegers;
2746
4
        uint32_t uCharLen;
2747
4
        int iOffsetINQ;
2748
2749
4
        int iSizeINQSelectors;
2750
4
        tvbuff_t *INQ_tvb;
2751
2752
4
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_inq, NULL, MQ_TEXT_INQ);
2753
2754
        /* These are MQLONG, so signed, but values < 0 are nonsensical.
2755
         * Note the maximum number of selectors allowed is 256. */
2756
4
        proto_tree_add_item_ret_uint(mq_tree, hf_mq_inq_nbsel, tvb, offset, 4, p_mq_parm->mq_int_enc, &uNbSelectors);
2757
4
        proto_tree_add_item_ret_uint(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, p_mq_parm->mq_int_enc, &uNbIntegers);
2758
4
        proto_tree_add_item_ret_uint(mq_tree, hf_mq_inq_charlen, tvb, offset + 8, 4, p_mq_parm->mq_int_enc, &uCharLen);
2759
2760
4
        offset += 12;
2761
4
        INQ_tvb = tvb_new_subset_remaining(tvb, offset);
2762
4
        iOffsetINQ = 0;
2763
2764
4
        if (!ckd_mul(&iSizeINQSelectors, uNbSelectors, 4) && tvb_reported_length_remaining(INQ_tvb, iOffsetINQ) >= iSizeINQSelectors)
2765
2
        {
2766
2
            const char* _pVal;
2767
2
            uint32_t _lSel;
2768
2
            wmem_array_t *iSelArray = wmem_array_new(pinfo->pool, sizeof(uint32_t));
2769
2
            for (unsigned uSelector = 0; uSelector < uNbSelectors; uSelector++)
2770
0
            {
2771
0
                proto_tree_add_item_ret_uint(mq_tree, hf_mq_inq_sel, INQ_tvb, iOffsetINQ, 4, p_mq_parm->mq_int_enc, &_lSel);
2772
0
                if (_lSel >= MQ_MQIA_FIRST && _lSel <= MQ_MQIA_LAST) {
2773
0
                    wmem_array_append_one(iSelArray, _lSel);
2774
0
                }
2775
0
                iOffsetINQ += 4;
2776
0
            }
2777
2
            if (p_mq_parm->mq_opcode == MQ_TST_MQINQ_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQSET)
2778
2
            {
2779
2
                int iSizeINQValues;
2780
2
                if (!ckd_mul(&iSizeINQValues, uNbIntegers, 4) && !ckd_add(&iSizeINQValues, iSizeINQValues, uCharLen) && tvb_reported_length_remaining(INQ_tvb, iOffsetINQ) >= iSizeINQValues)
2781
1
                {
2782
1
                    unsigned _lVal;
2783
1
                    for (unsigned uInteger = 0; uInteger < uNbIntegers; uInteger++)
2784
0
                    {
2785
0
                        _pVal = NULL;
2786
0
                        if (wmem_array_try_index(iSelArray, uInteger, &_lSel) == 0) {
2787
0
                            _lVal = tvb_get_uint32(INQ_tvb, iOffsetINQ, p_mq_parm->mq_int_enc);
2788
0
                            _pVal = dissect_mqpcf_parm_getintval(_lSel, _lVal);
2789
0
                        }
2790
0
                        if (_pVal) {
2791
0
                            proto_tree_add_uint_format(mq_tree, hf_mq_inq_intvalue, INQ_tvb, iOffsetINQ, 4, _lVal,
2792
0
                                "Integer value...: %s (%d)", _pVal, _lVal);
2793
0
                        } else {
2794
0
                            proto_tree_add_item(mq_tree, hf_mq_inq_intvalue, INQ_tvb, iOffsetINQ, 4, p_mq_parm->mq_int_enc);
2795
0
                        }
2796
0
                        iOffsetINQ += 4;
2797
0
                    }
2798
                    /* TODO: Ideally one would get the string length for each
2799
                     * MQCA_ selector and add separate strings.
2800
                     *
2801
                     * https://www.ibm.com/docs/en/ibm-mq/9.4.x?topic=calls-mqinq-inquire-object-attributes
2802
                     * https://www.ibm.com/docs/en/ibm-mq/9.4.x?topic=constants-mq-string-lengths
2803
                     */
2804
1
                    if (uCharLen != 0)
2805
0
                    {
2806
0
                        proto_tree_add_item(mq_tree, hf_mq_inq_charvalues, INQ_tvb, iOffsetINQ, uCharLen, p_mq_parm->mq_str_enc);
2807
0
                    }
2808
1
                }
2809
2
            }
2810
2
        }
2811
4
        offset += tvb_reported_length(INQ_tvb);
2812
4
    }
2813
19
    else if (p_mq_parm->mq_opcode == MQ_TST_NOTIFICATION)
2814
0
    {
2815
0
        unsigned uHdl;
2816
0
        unsigned uCod;
2817
2818
0
        uHdl = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2819
0
        uCod = tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
2820
2821
0
        dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2822
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x Cod=%s(0x%x)",
2823
0
            uHdl, try_val_to_str(uCod, mq_notifcode_vals), uCod);
2824
2825
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_notif, NULL, MQ_TEXT_NOTIFICATION);
2826
2827
0
        proto_tree_add_item(mq_tree, hf_mq_notif_vers, tvb, offset, 4, p_mq_parm->mq_int_enc);
2828
0
        proto_tree_add_item(mq_tree, hf_mq_notif_handle, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2829
0
        proto_tree_add_item(mq_tree, hf_mq_notif_code, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2830
0
        proto_tree_add_item(mq_tree, hf_mq_notif_value, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2831
2832
0
        offset += 16;
2833
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2834
0
    }
2835
19
    else if (p_mq_parm->mq_opcode == MQ_TST_REQUEST_MSGS)
2836
0
    {
2837
0
        int iHdl;
2838
0
        int iFlags;
2839
0
        int iGlbMsgIdx;
2840
0
        int iMaxMsgLen;
2841
0
        int iOpt;
2842
2843
0
        iHdl = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2844
0
        iMaxMsgLen = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
2845
0
        iFlags = tvb_get_uint32(tvb, offset + 32, p_mq_parm->mq_int_enc);
2846
0
        iGlbMsgIdx = tvb_get_uint32(tvb, offset + 36, p_mq_parm->mq_int_enc);
2847
0
        if (iFlags & MQ_REQUEST_MSG_SELECTION)
2848
0
        {
2849
0
            p_mq_parm->mq_msgreq_ccsid.encod = tvb_get_uint32(tvb, offset + 44, p_mq_parm->mq_int_enc);
2850
0
            p_mq_parm->mq_msgreq_ccsid.ccsid = tvb_get_uint32(tvb, offset + 48, p_mq_parm->mq_int_enc);
2851
0
        }
2852
0
        dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2853
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x RqstFlags=%08x GlbMsgIdx=%d MaxLen=%d ",
2854
0
            iHdl, iFlags, iGlbMsgIdx, iMaxMsgLen);
2855
2856
0
        if (tree)
2857
0
        {
2858
0
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_msg, NULL, MQ_TEXT_REQMSG);
2859
2860
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_version, tvb, offset, 4, p_mq_parm->mq_int_enc);
2861
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_handle, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2862
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_RecvBytes, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2863
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_RqstBytes, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2864
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_MaxMsgLen, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2865
0
            dissect_mq_MQGMO(tvb, mq_tree, offset + 20, ett_mq_gmo_option, p_mq_parm);
2866
2867
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_WaitIntrv, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
2868
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_QueStatus, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
2869
0
            proto_tree_add_bitmask(mq_tree, tvb, offset + 32, hf_mq_msgreq_RqstFlags, ett_mq_msgreq_RqstFlags, pf_flds_msgreq_flags, p_mq_parm->mq_int_enc);
2870
2871
0
            proto_tree_add_item(mq_tree, hf_mq_msgreq_GlbMsgIdx, tvb, offset + 36, 4, p_mq_parm->mq_int_enc);
2872
2873
0
            if (iFlags & MQ_REQUEST_MSG_SELECTION)
2874
0
            {
2875
0
                proto_tree_add_item(mq_tree, hf_mq_msgreq_SelectIdx, tvb, offset + 40, 2, p_mq_parm->mq_int_enc);
2876
0
                proto_tree_add_item(mq_tree, hf_mq_msgreq_MQMDVers, tvb, offset + 42, 2, p_mq_parm->mq_int_enc);
2877
0
                proto_tree_add_item(mq_tree, hf_mq_msgreq_ccsid, tvb, offset + 44, 4, p_mq_parm->mq_int_enc);
2878
0
                dissect_mq_encoding(mq_tree, pinfo, hf_mq_msgreq_encoding, tvb, offset + 48, 4, p_mq_parm->mq_int_enc);
2879
0
                proto_tree_add_item(mq_tree, hf_mq_msgreq_MsgSeqNum, tvb, offset + 52, 4, p_mq_parm->mq_int_enc);
2880
0
                proto_tree_add_item(mq_tree, hf_mq_msgreq_offset, tvb, offset + 56, 4, p_mq_parm->mq_int_enc);
2881
0
                dissect_mq_MQMO(tvb, mq_tree, offset + 60, ett_mq_gmo_matchoption, p_mq_parm);
2882
0
                iOpt = tvb_get_uint32(tvb, offset + 60, p_mq_parm->mq_int_enc);
2883
2884
0
                offset += MQ_REQUEST_MSG_SIZE_V1_SELECTION_FIXED_PART;
2885
0
                if (iOpt & MQ_MQMO_MATCH_MSG_ID)
2886
0
                {
2887
0
                    proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchMsgId, tvb, offset, 24, p_mq_parm->mq_str_enc);
2888
0
                    offset += 24;
2889
0
                }
2890
0
                if (iOpt & MQ_MQMO_MATCH_CORREL_ID)
2891
0
                {
2892
0
                    proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchCorId, tvb, offset, 24, p_mq_parm->mq_str_enc);
2893
0
                    offset += 24;
2894
0
                }
2895
0
                if (iOpt & MQ_MQMO_MATCH_GROUP_ID)
2896
0
                {
2897
0
                    proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchGrpid, tvb, offset, 24, p_mq_parm->mq_str_enc);
2898
0
                    offset += 24;
2899
0
                }
2900
0
                if (iOpt & MQ_MQMO_MATCH_MSG_TOKEN)
2901
0
                {
2902
0
                    proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchMsgTk, tvb, offset, 16, p_mq_parm->mq_str_enc);
2903
0
                    offset += 16;
2904
0
                }
2905
0
            }
2906
0
            else
2907
0
            {
2908
0
                offset += MQ_REQUEST_MSG_SIZE_V1_NO_SELECTION;
2909
0
            }
2910
0
        }
2911
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2912
0
    }
2913
19
    else if (p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE)
2914
2
    {
2915
2
        int   iReasnCode = 0;
2916
2
        int   iSegmIndex;
2917
2
        int   iGlbMsgIdx;
2918
2
        int   iPadLen;
2919
2920
2
        int8_t iStrLen;
2921
2
        int   iHdl;
2922
2
        int   iHdrL;
2923
2924
2
        iHdl = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
2925
2
        iGlbMsgIdx = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
2926
2
        iSegmIndex = tvb_get_uint16(tvb, offset + 20, p_mq_parm->mq_int_enc);
2927
2928
2
        if (p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST)
2929
0
        {
2930
0
            iReasnCode = tvb_get_uint32(tvb, offset + 24, p_mq_parm->mq_int_enc);
2931
0
        }
2932
2933
2
        if (iSegmIndex == 0)
2934
0
        {
2935
0
            iStrLen = tvb_get_uint8(tvb, offset + 54);
2936
0
            iPadLen = (2 + 1 + iStrLen) % 4;
2937
0
            iPadLen = (iPadLen) ? 4 - iPadLen : 0;
2938
0
        }
2939
2
        else
2940
2
        {
2941
2
            iPadLen = 0;
2942
2
            iStrLen = 0;
2943
2
        }
2944
2945
2
        iHdrL = (iSegmIndex == 0) ? (54 + 1 + iStrLen + iPadLen) : 24;
2946
2947
2
        if (!mq_in_reassembly)
2948
0
        {
2949
0
            dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
2950
0
            col_append_fstr(pinfo->cinfo, COL_INFO,
2951
0
                " Hdl=0x%04x GlbMsgIdx=%d, Full Message",
2952
0
                iHdl, iGlbMsgIdx);
2953
0
            if (iReasnCode != MQ_MQRC_NONE)
2954
0
                col_append_fstr(pinfo->cinfo, COL_INFO,
2955
0
                    ", RC=%d(0x%x) - %s",
2956
0
                    iReasnCode, iReasnCode,
2957
0
                    val_to_str_ext(pinfo->pool, iReasnCode, &mq_MQRC_xvals, "Unknown (0x%02x)"));
2958
0
        }
2959
2960
2
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iHdrL, ett_mq_msg, NULL, MQ_TEXT_ASYMSG);
2961
2962
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_version, tvb, offset, 4, p_mq_parm->mq_int_enc);
2963
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_handle, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
2964
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_MsgIndex, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
2965
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_GlbMsgIdx, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
2966
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_SegLength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
2967
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_SegmIndex, tvb, offset + 20, 2, p_mq_parm->mq_int_enc);
2968
2
        proto_tree_add_item(mq_tree, hf_mq_msgasy_SeleIndex, tvb, offset + 22, 2, p_mq_parm->mq_int_enc);
2969
2
        if (p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST)
2970
0
        {
2971
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_ReasonCod, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
2972
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_TotMsgLen, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
2973
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_ActMsgLen, tvb, offset + 32, 4, p_mq_parm->mq_int_enc);
2974
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_MsgToken, tvb, offset + 36, 16, p_mq_parm->mq_int_enc);
2975
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_Status, tvb, offset + 52, 2, p_mq_parm->mq_int_enc);
2976
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_resolQNLn, tvb, offset + 54, 1, ENC_NA);
2977
0
            proto_tree_add_item(mq_tree, hf_mq_msgasy_resolQNme, tvb, offset + 55, iStrLen, p_mq_parm->mq_str_enc);
2978
0
            if (iPadLen)
2979
0
                proto_tree_add_item(mq_tree, hf_mq_msgasy_padding, tvb, offset + 55 + iStrLen, iPadLen, p_mq_parm->mq_str_enc);
2980
0
        }
2981
2
        offset += iHdrL;
2982
2
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
2983
2984
2
        iSizePayload = tvb_reported_length_remaining(tvb, offset);
2985
2
        bPayload = (iSizePayload > 0);
2986
2
    }
2987
17
    else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && capLen >= 12)
2988
0
    {
2989
0
        int     iOffsetSPI = 0;
2990
0
        uint32_t iSpiVerb = 0;
2991
2992
0
        p_mq_parm->iOfsEnc = offset + 12;
2993
0
        p_mq_parm->iOfsCcs = offset + 16;
2994
0
        p_mq_parm->iOfsFmt = offset + 20;
2995
2996
0
        iSpiVerb = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
2997
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", val_to_str(pinfo->pool, iSpiVerb, mq_spi_verbs_vals, "Unknown (0x%08x)"));
2998
2999
0
        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi, NULL, MQ_TEXT_SPI);
3000
3001
0
        proto_tree_add_item(mq_tree, hf_mq_spi_verb, tvb, offset, 4, p_mq_parm->mq_int_enc);
3002
0
        proto_tree_add_item(mq_tree, hf_mq_spi_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3003
0
        proto_tree_add_item(mq_tree, hf_mq_spi_length, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
3004
3005
0
        offset += 12;
3006
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3007
0
        if (((p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU ||
3008
0
            (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU_EBCDIC)
3009
0
            && tvb_reported_length_remaining(tvb, offset) >= 12)
3010
0
        {
3011
0
            int iSizeSPIMD = 0;
3012
0
            uint8_t* sStructId;
3013
3014
0
            if ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx)
3015
0
            {
3016
0
                strid_enc = ENC_ASCII | ENC_NA;
3017
0
            }
3018
0
            else
3019
0
            {
3020
0
                strid_enc = ENC_EBCDIC | ENC_NA;
3021
0
            }
3022
0
            sStructId = tvb_get_string_enc(pinfo->pool, tvb, offset, 4, strid_enc);
3023
0
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi_base, NULL, (const char*)sStructId);
3024
3025
0
            proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, strid_enc);
3026
0
            proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3027
0
            proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
3028
3029
0
            offset += 12;
3030
0
            p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3031
3032
0
            if ((iSizeSPIMD = dissect_mq_md(tvb, pinfo, mqroot_tree, offset, p_mq_parm, true)) != 0)
3033
0
            {
3034
0
                offset += iSizeSPIMD;
3035
0
                offset += dissect_mq_gmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm);
3036
0
                offset += dissect_mq_pmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize);
3037
0
                p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3038
0
            }
3039
3040
0
            offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize);
3041
3042
0
            if (((p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxO ||
3043
0
                (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxO_EBCDIC ||
3044
0
                (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI ||
3045
0
                (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI_EBCDIC)
3046
0
                && tvb_reported_length_remaining(tvb, offset) >= 12)
3047
0
            {
3048
                /* Dissect the common part of these structures */
3049
0
                if ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx)
3050
0
                {
3051
0
                    strid_enc = ENC_ASCII | ENC_NA;
3052
0
                }
3053
0
                else
3054
0
                {
3055
0
                    strid_enc = ENC_EBCDIC | ENC_NA;
3056
0
                }
3057
0
                sStructId = tvb_get_string_enc(pinfo->pool, tvb, offset, 4, strid_enc);
3058
0
                mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_spi_base, NULL, (const char*)sStructId);
3059
3060
0
                proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, strid_enc);
3061
0
                proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3062
0
                proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
3063
3064
0
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO_EBCDIC)
3065
0
                    && tvb_reported_length_remaining(tvb, offset) >= 16)
3066
0
                {
3067
0
                    if (tree)
3068
0
                    {
3069
0
                        int iVerbNumber = 0;
3070
0
                        proto_tree_add_item(mq_tree, hf_mq_spi_spqo_nbverb, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
3071
0
                        iVerbNumber = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
3072
3073
0
                        if (tvb_reported_length_remaining(tvb, offset) >= iVerbNumber * 20 + 16)
3074
0
                        {
3075
0
                            int iVerb = 0;
3076
0
                            iOffsetSPI = offset + 16;
3077
0
                            for (iVerb = 0; iVerb < iVerbNumber; iVerb++)
3078
0
                            {
3079
0
                                proto_tree_add_item(mq_tree, hf_mq_spi_spqo_verbid, tvb, iOffsetSPI, 4, p_mq_parm->mq_int_enc);
3080
0
                                proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxiover, tvb, iOffsetSPI + 4, 4, p_mq_parm->mq_int_enc);
3081
0
                                proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinver, tvb, iOffsetSPI + 8, 4, p_mq_parm->mq_int_enc);
3082
0
                                proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxouver, tvb, iOffsetSPI + 12, 4, p_mq_parm->mq_int_enc);
3083
0
                                proto_tree_add_item(mq_tree, hf_mq_spi_spqo_flags, tvb, iOffsetSPI + 16, 4, p_mq_parm->mq_int_enc);
3084
0
                                iOffsetSPI += 20;
3085
0
                            }
3086
0
                            offset += iVerbNumber * 20 + 16;
3087
0
                        }
3088
0
                    }
3089
0
                }
3090
0
                else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI_EBCDIC)
3091
0
                    && tvb_reported_length_remaining(tvb, offset) >= 136)
3092
0
                {
3093
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spai_mode, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
3094
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown1, tvb, offset + 16, 48, p_mq_parm->mq_str_enc);
3095
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown2, tvb, offset + 64, 48, p_mq_parm->mq_str_enc);
3096
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spai_msgid, tvb, offset + 112, 24, p_mq_parm->mq_str_enc);
3097
0
                    offset += 136;
3098
0
                }
3099
0
                else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI_EBCDIC)
3100
0
                    && tvb_reported_length_remaining(tvb, offset) >= 24)
3101
0
                {
3102
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchsz, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
3103
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchint, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
3104
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spgi_maxmsgsz, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
3105
0
                    offset += 24;
3106
0
                }
3107
0
                else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI ||
3108
0
                    p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI_EBCDIC)
3109
0
                    && tvb_reported_length_remaining(tvb, offset) >= 20)
3110
0
                {
3111
0
                    proto_tree_add_bitmask(mq_tree, tvb, offset + 12, hf_mq_spi_spgo_options, ett_mq_spi_options, pf_flds_spiopt, ENC_BIG_ENDIAN);
3112
0
                    proto_tree_add_item(mq_tree, hf_mq_spi_spgo_size, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
3113
0
                    iSizePayload = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
3114
0
                    offset += 20;
3115
0
                    bPayload = true;
3116
0
                }
3117
0
                else
3118
0
                {
3119
0
                    offset += 12;
3120
0
                }
3121
0
                p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3122
0
            }
3123
0
        }
3124
0
    }
3125
17
    else if ((p_mq_parm->mq_opcode >= 0xA0 && p_mq_parm->mq_opcode <= 0xB9) && capLen >= 16)
3126
5
    {
3127
        /* The XA structures are special because they do not start with a structid */
3128
5
        mq_tree = proto_tree_add_subtree_format(mqroot_tree, tvb, offset, 16, ett_mq_xa, NULL,
3129
5
            "%s (%s)", MQ_TEXT_XA, val_to_str_ext(pinfo->pool, p_mq_parm->mq_opcode, &mq_opcode_xvals, "Unknown (0x%02x)"));
3130
3131
5
        proto_tree_add_item(mq_tree, hf_mq_xa_length, tvb, offset, 4, ENC_BIG_ENDIAN);
3132
5
        proto_tree_add_item(mq_tree, hf_mq_xa_returnvalue, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3133
3134
5
        proto_tree_add_bitmask(mq_tree, tvb, offset + 8, hf_mq_xa_tmflags, ett_mq_xa_tmflags, pf_flds_tmflags, ENC_BIG_ENDIAN);
3135
3136
5
        proto_tree_add_item(mq_tree, hf_mq_xa_rmid, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
3137
5
        offset += 16;
3138
5
        if (p_mq_parm->mq_opcode == MQ_TST_XA_START || p_mq_parm->mq_opcode == MQ_TST_XA_END || p_mq_parm->mq_opcode == MQ_TST_XA_PREPARE
3139
5
            || p_mq_parm->mq_opcode == MQ_TST_XA_COMMIT || p_mq_parm->mq_opcode == MQ_TST_XA_ROLLBACK || p_mq_parm->mq_opcode == MQ_TST_XA_FORGET
3140
5
            || p_mq_parm->mq_opcode == MQ_TST_XA_COMPLETE)
3141
0
        {
3142
0
            int iSizeXid = 0;
3143
0
            if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, p_mq_parm, offset)) != 0)
3144
0
                offset += iSizeXid;
3145
0
        }
3146
5
        else if ((p_mq_parm->mq_opcode == MQ_TST_XA_OPEN || p_mq_parm->mq_opcode == MQ_TST_XA_CLOSE)
3147
0
            && tvb_reported_length_remaining(tvb, offset) >= 1)
3148
0
        {
3149
0
            uint8_t iXAInfoLength = 0;
3150
0
            iXAInfoLength = tvb_get_uint8(tvb, offset);
3151
0
            if (tvb_reported_length_remaining(tvb, offset) >= iXAInfoLength + 1)
3152
0
            {
3153
0
                mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iXAInfoLength + 1, ett_mq_xa_info, NULL, MQ_TEXT_XINF);
3154
3155
0
                proto_tree_add_item(mq_tree, hf_mq_xa_xainfo_length, tvb, offset, 1, ENC_BIG_ENDIAN);
3156
0
                proto_tree_add_item(mq_tree, hf_mq_xa_xainfo_value, tvb, offset + 1, iXAInfoLength, p_mq_parm->mq_str_enc);
3157
0
            }
3158
0
            offset += 1 + iXAInfoLength;
3159
0
        }
3160
5
        else if ((p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER || p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER_REPLY)
3161
3
            && tvb_reported_length_remaining(tvb, offset) >= 4)
3162
3
        {
3163
3
            int iNbXid = 0;
3164
3
            iNbXid = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
3165
3
            proto_tree_add_item(mq_tree, hf_mq_xa_count, tvb, offset, 4, p_mq_parm->mq_int_enc);
3166
3
            offset += 4;
3167
3
            if (p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER_REPLY)
3168
3
            {
3169
3
                int iXid = 0;
3170
3
                for (iXid = 0; iXid < iNbXid; iXid++)
3171
2
                {
3172
2
                    int iSizeXid = 0;
3173
2
                    if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, p_mq_parm, offset)) != 0)
3174
0
                        offset += iSizeXid;
3175
2
                    else
3176
2
                        break;
3177
2
                }
3178
3
            }
3179
3
        }
3180
5
    }
3181
    /* LPOO seems to be a bug for SPOO */
3182
37
    if ((p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO || p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 32)
3183
0
    {
3184
0
        unsigned iVersion;
3185
0
        unsigned iXtraData = 0;
3186
0
        int   iSize = 32;
3187
0
        int   iPos = 0;
3188
0
        int   iSegSize = tvb_reported_length_remaining(tvb, offset);
3189
0
        iVersion = tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
3190
0
        if (iSegSize >= 488)
3191
0
        {
3192
0
            iSize += 56;
3193
0
            iXtraData = tvb_get_uint32(tvb, offset + 84, p_mq_parm->mq_int_enc);
3194
0
        }
3195
3196
0
        if (iSize != 0 && iSegSize >= iSize)
3197
0
        {
3198
0
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_lpoo, NULL, MQ_TEXT_LPOO);
3199
3200
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
3201
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3202
0
            dissect_mq_MQOO(tvb, mq_tree, offset + 8, ett_mq_open_option, hf_mq_open_options, p_mq_parm);
3203
0
            dissect_mq_LPOO_LPIOPTS(tvb, mq_tree, offset + 12, ett_mq_lpoo_lpiopts, p_mq_parm);
3204
3205
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_defpersist, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
3206
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_defputresptype, tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
3207
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_defreadahead, tvb, offset + 24, 4, p_mq_parm->mq_int_enc);
3208
0
            proto_tree_add_item(mq_tree, hf_mq_lpoo_propertyctl, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
3209
0
            iPos += 32;
3210
0
            if (iSize == 88)
3211
0
            {
3212
0
                proto_tree_add_item(mq_tree, hf_mq_lpoo_qprotect, tvb, offset + iPos, 48, p_mq_parm->mq_str_enc);
3213
0
                proto_tree_add_item(mq_tree, hf_mq_lpoo_qprotect_val1, tvb, offset + iPos + 48, 4, p_mq_parm->mq_str_enc);
3214
0
                proto_tree_add_item(mq_tree, hf_mq_lpoo_qprotect_val2, tvb, offset + iPos + 52, 4, p_mq_parm->mq_str_enc);
3215
0
                iPos += 56;
3216
0
            }
3217
0
            if (iVersion >= 1)
3218
0
            {
3219
0
                int iDistributionListSize2;
3220
0
                iSize = dissect_mq_od(tvb, pinfo, mqroot_tree, offset + iPos, p_mq_parm, &iDistributionListSize2);
3221
0
            }
3222
0
            offset += iPos + iSize;
3223
0
            p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3224
0
            if (iXtraData > 0)
3225
0
            {
3226
0
                if (p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY)
3227
0
                {
3228
0
                    bPayload = true;
3229
0
                    iSizePayload = iXtraData;
3230
0
                    p_mq_parm->iOfsFmt = (offset - iSize);
3231
0
                }
3232
0
            }
3233
0
        }
3234
0
    }
3235
37
    if ((p_mq_parm->mq_strucID == MQ_STRUCTID_ID || p_mq_parm->mq_strucID == MQ_STRUCTID_ID_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 5)
3236
0
    {
3237
0
        offset += dissect_mq_id(tvb, pinfo, mqroot_tree, offset, p_mq_parm);
3238
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3239
0
    }
3240
37
    if ((p_mq_parm->mq_strucID == MQ_STRUCTID_UID || p_mq_parm->mq_strucID == MQ_STRUCTID_UID_EBCDIC) && tvb_reported_length_remaining(tvb, offset) > 0)
3241
0
    {
3242
0
        int iSizeUID;
3243
        /* iSizeUID = (iVersionID < 5 ? 28 : 132);  guess */
3244
        /* The iVersionID is available in the previous ID segment, we should keep a state *
3245
            * Instead we rely on the segment length announced in the TSH */
3246
0
        iSizeUID = iSegmentLength - iSizeTSH;
3247
0
        if (iSizeUID != 28 && iSizeUID != 132)
3248
0
            iSizeUID = 0;
3249
3250
0
        if (iSizeUID != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeUID)
3251
0
        {
3252
0
            uint8_t* sUserId;
3253
0
            sUserId = tvb_get_string_enc(pinfo->pool, tvb, offset + 4, 12, p_mq_parm->mq_str_enc);
3254
0
            dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
3255
0
            if (strip_trailing_blanks(sUserId, 12) > 0)
3256
0
            {
3257
0
                col_append_fstr(pinfo->cinfo, COL_INFO, " User=%s", sUserId);
3258
0
            }
3259
3260
0
            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeUID, ett_mq_uid, NULL, MQ_TEXT_UID);
3261
3262
0
            proto_tree_add_item(mq_tree, hf_mq_uid_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
3263
0
            proto_tree_add_item(mq_tree, hf_mq_uid_userid, tvb, offset + 4, 12, p_mq_parm->mq_str_enc);
3264
0
            proto_tree_add_item(mq_tree, hf_mq_uid_password, tvb, offset + 16, 12, p_mq_parm->mq_str_enc);
3265
3266
0
            if (iSizeUID == 132)
3267
0
            {
3268
0
                proto_tree_add_item(mq_tree, hf_mq_uid_longuserid, tvb, offset + 28, 64, p_mq_parm->mq_str_enc);
3269
0
                dissect_mq_sid(tvb, pinfo, mq_tree, p_mq_parm, offset + 92);
3270
0
            }
3271
0
        }
3272
0
        offset += iSizeUID;
3273
0
        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3274
0
    }
3275
3276
37
    offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize);
3277
3278
37
    if ((iSizeMD = dissect_mq_md(tvb, pinfo, mqroot_tree, offset, p_mq_parm, true)) != 0)
3279
0
    {
3280
0
        int iSizeGMO = 0;
3281
0
        int iSizePMO = 0;
3282
0
        offset += iSizeMD;
3283
3284
0
        if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm)) != 0)
3285
0
        {
3286
0
            offset += iSizeGMO;
3287
0
            bPayload = true;
3288
0
        }
3289
0
        else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize)) != 0)
3290
0
        {
3291
0
            offset += iSizePMO;
3292
0
            bPayload = true;
3293
0
        }
3294
0
        if (tvb_reported_length_remaining(tvb, offset) >= 4)
3295
0
        {
3296
0
            if (bPayload == true && (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE))
3297
0
            {
3298
0
                iSizePayload = tvb_get_uint32(tvb, offset, p_mq_parm->mq_int_enc);
3299
0
                if (tree)
3300
0
                {
3301
0
                    mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 4, ett_mq_put, NULL, MQ_TEXT_PUT);
3302
0
                    proto_tree_add_item(mq_tree, hf_mq_put_length, tvb, offset, 4, p_mq_parm->mq_int_enc);
3303
0
                }
3304
0
                offset += 4;
3305
0
            }
3306
0
        }
3307
0
    }
3308
37
    if (iDistributionListSize > 0)
3309
0
    {
3310
0
        col_append_fstr(pinfo->cinfo, COL_INFO, " (Distribution List, Size=%d)", iDistributionListSize);
3311
0
    }
3312
37
    if (bPayload == true)
3313
2
    {
3314
2
        if (iSizePayload != 0 && tvb_reported_length_remaining(tvb, offset) > 0)
3315
2
        {
3316
            /* For the following header structures, each structure has a "format" field
3317
            which announces the type of the following structure.  For dissection we
3318
            do not use it and rely on the structid instead. */
3319
2
            uint32_t iHeadersLength = 0;
3320
2
            if (tvb_reported_length_remaining(tvb, offset) >= 4)
3321
2
            {
3322
2
                int iSizeMD2 = 0;
3323
2
                p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset);
3324
3325
2
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_XQH || p_mq_parm->mq_strucID == MQ_STRUCTID_XQH_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 104)
3326
0
                {
3327
                    /* if MD.format == MQXMIT */
3328
0
                    int iSizeXQH = 104;
3329
0
                    if (tree)
3330
0
                    {
3331
0
                        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeXQH, ett_mq_xqh, NULL, MQ_TEXT_XQH);
3332
3333
0
                        proto_tree_add_item(mq_tree, hf_mq_xqh_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
3334
0
                        proto_tree_add_item(mq_tree, hf_mq_xqh_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3335
0
                        proto_tree_add_item(mq_tree, hf_mq_xqh_remoteq, tvb, offset + 8, 48, p_mq_parm->mq_str_enc);
3336
0
                        proto_tree_add_item(mq_tree, hf_mq_xqh_remoteqmgr, tvb, offset + 56, 48, p_mq_parm->mq_str_enc);
3337
0
                    }
3338
0
                    offset += iSizeXQH;
3339
0
                    iHeadersLength += iSizeXQH;
3340
3341
0
                    if ((iSizeMD2 = dissect_mq_md(tvb, pinfo, mqroot_tree, offset, p_mq_parm, true)) != 0)
3342
0
                    {
3343
0
                        offset += iSizeMD2;
3344
0
                        iHeadersLength += iSizeMD2;
3345
0
                    }
3346
3347
0
                    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3348
0
                }
3349
2
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_DLH || p_mq_parm->mq_strucID == MQ_STRUCTID_DLH_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 172)
3350
0
                {
3351
                    /* if MD.format == MQDEAD */
3352
0
                    int iSizeDLH = 172;
3353
0
                    p_mq_parm->iOfsEnc = offset + 108;
3354
0
                    p_mq_parm->iOfsCcs = offset + 112;
3355
0
                    p_mq_parm->iOfsFmt = offset + 116;
3356
3357
0
                    p_mq_parm->mq_dlh_ccsid.encod = tvb_get_uint32(tvb, offset + 108, p_mq_parm->mq_int_enc);
3358
0
                    p_mq_parm->mq_dlh_ccsid.ccsid = tvb_get_uint32(tvb, offset + 112, p_mq_parm->mq_int_enc);
3359
3360
0
                    if (tree)
3361
0
                    {
3362
0
                        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeDLH, ett_mq_dlh, NULL, MQ_TEXT_DLH);
3363
3364
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
3365
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3366
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_reason, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
3367
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_destq, tvb, offset + 12, 48, p_mq_parm->mq_str_enc);
3368
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_destqmgr, tvb, offset + 60, 48, p_mq_parm->mq_str_enc);
3369
0
                        dissect_mq_encoding(mq_tree, pinfo, hf_mq_dlh_encoding, tvb, offset + 108, 4, p_mq_parm->mq_int_enc);
3370
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_ccsid, tvb, offset + 112, 4, p_mq_parm->mq_int_enc);
3371
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_format, tvb, offset + 116, 8, p_mq_parm->mq_str_enc);
3372
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_putappltype, tvb, offset + 124, 4, p_mq_parm->mq_int_enc);
3373
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_putapplname, tvb, offset + 128, 28, p_mq_parm->mq_str_enc);
3374
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_putdate, tvb, offset + 156, 8, p_mq_parm->mq_str_enc);
3375
0
                        proto_tree_add_item(mq_tree, hf_mq_dlh_puttime, tvb, offset + 164, 8, p_mq_parm->mq_str_enc);
3376
0
                    }
3377
0
                    offset += iSizeDLH;
3378
0
                    iHeadersLength += iSizeDLH;
3379
0
                    p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3380
0
                }
3381
2
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_TM || p_mq_parm->mq_strucID == MQ_STRUCTID_TM_EBCDIC)
3382
0
                    && tvb_reported_length_remaining(tvb, offset) >= 8)
3383
0
                {
3384
3385
0
                    if (tree)
3386
0
                    {
3387
0
                        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_mq_head, NULL,
3388
0
                            val_to_str_ext(pinfo->pool, p_mq_parm->mq_strucID, &mq_StructID_xvals, "Unknown (0x%08x)"));
3389
0
                    }
3390
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_StructID, tvb, offset + 0, 4, p_mq_parm->mq_str_enc);
3391
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3392
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_QName, tvb, offset + 8, 48, p_mq_parm->mq_str_enc);
3393
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_ProcessNme, tvb, offset + 56, 48, p_mq_parm->mq_str_enc);
3394
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_TriggerData, tvb, offset + 104, 64, p_mq_parm->mq_str_enc);
3395
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_ApplType, tvb, offset + 168, 4, p_mq_parm->mq_int_enc);
3396
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_ApplId, tvb, offset + 172, 256, p_mq_parm->mq_str_enc);
3397
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_EnvData, tvb, offset + 428, 128, p_mq_parm->mq_str_enc);
3398
0
                    proto_tree_add_item(mq_tree, hf_mq_tm_UserData, tvb, offset + 556, 128, p_mq_parm->mq_str_enc);
3399
0
                    offset += 684;
3400
0
                }
3401
2
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_TMC2 || p_mq_parm->mq_strucID == MQ_STRUCTID_TMC2_EBCDIC)
3402
0
                    && tvb_reported_length_remaining(tvb, offset) >= 8)
3403
0
                {
3404
0
                    if (tree)
3405
0
                    {
3406
0
                        mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, tvb_reported_length_remaining(tvb, offset), ett_mq_head, NULL,
3407
0
                            val_to_str_ext(pinfo->pool, p_mq_parm->mq_strucID, &mq_StructID_xvals, "Unknown (0x%08x)"));
3408
0
                    }
3409
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_StructID, tvb, offset + 0, 4, p_mq_parm->mq_str_enc);
3410
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_version, tvb, offset + 4, 4, p_mq_parm->mq_str_enc);
3411
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_QName, tvb, offset + 8, 48, p_mq_parm->mq_str_enc);
3412
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_ProcessNme, tvb, offset + 56, 48, p_mq_parm->mq_str_enc);
3413
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_TriggerData, tvb, offset + 104, 64, p_mq_parm->mq_str_enc);
3414
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_ApplType, tvb, offset + 168, 4, p_mq_parm->mq_str_enc);
3415
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_ApplId, tvb, offset + 172, 256, p_mq_parm->mq_str_enc);
3416
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_EnvData, tvb, offset + 428, 128, p_mq_parm->mq_str_enc);
3417
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_UserData, tvb, offset + 556, 128, p_mq_parm->mq_str_enc);
3418
0
                    proto_tree_add_item(mq_tree, hf_mq_tmc2_QMgrName, tvb, offset + 684, 48, p_mq_parm->mq_str_enc);
3419
0
                    offset += 732;
3420
0
                }
3421
2
                if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MDE || p_mq_parm->mq_strucID == MQ_STRUCTID_MDE_EBCDIC
3422
2
                    || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH_EBCDIC
3423
2
                    || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH_EBCDIC
3424
2
                    || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC
3425
2
                    || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH_EBCDIC
3426
2
                    || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH_EBCDIC
3427
2
                    )
3428
0
                    && tvb_reported_length_remaining(tvb, offset) >= 12)
3429
0
                {
3430
                    /* Dissect the generic part of the other pre-defined headers */
3431
                    /* We assume that only one such header is present */
3432
0
                    int iSizeHeader;
3433
0
                    int oIntEnc = p_mq_parm->mq_int_enc;
3434
                    /* Use MD encoding */
3435
0
                    p_mq_parm->mq_int_enc = ((p_mq_parm->mq_md_ccsid.encod & MQ_MQENC_INTEGER_MASK) == MQ_MQENC_INTEGER_NORMAL) ? ENC_BIG_ENDIAN : ENC_LITTLE_ENDIAN;
3436
0
                    iSizeHeader = (int)tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
3437
                    /* XXX - 32 is inferred from the code below.  What's the
3438
                    * correct minimum? */
3439
0
                    if (iSizeHeader <= 32)
3440
0
                        return;
3441
3442
0
                    p_mq_parm->mq_head_ccsid.encod = tvb_get_uint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
3443
0
                    p_mq_parm->mq_head_ccsid.ccsid = tvb_get_uint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
3444
3445
0
                    if (tvb_reported_length_remaining(tvb, offset) >= iSizeHeader)
3446
0
                    {
3447
0
                        int iTmp;
3448
0
                        int iVer;
3449
0
                        int iLen;
3450
0
                        int oStrEnc = p_mq_parm->mq_str_enc;
3451
3452
0
                        p_mq_parm->iOfsEnc = offset + 12;
3453
0
                        p_mq_parm->iOfsCcs = offset + 16;
3454
0
                        p_mq_parm->iOfsFmt = offset + 20;
3455
3456
0
                        iVer = (int)tvb_get_uint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
3457
0
                        iLen = (int)tvb_get_uint32(tvb, offset + 8, p_mq_parm->mq_int_enc);
3458
0
                        iTmp = p_mq_parm->mq_head_ccsid.ccsid;
3459
0
                        if (iTmp == 0)
3460
0
                            iTmp = p_mq_parm->mq_md_ccsid.ccsid;
3461
3462
0
                        if (IS_EBCDIC(iTmp))
3463
0
                            p_mq_parm->mq_str_enc = ENC_EBCDIC | ENC_NA;
3464
0
                        else
3465
0
                            p_mq_parm->mq_str_enc = ENC_UTF_8 | ENC_NA;
3466
3467
0
                        if (tree)
3468
0
                        {
3469
0
                            mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeHeader, ett_mq_head, NULL,
3470
0
                                val_to_str_ext(pinfo->pool, p_mq_parm->mq_strucID, &mq_StructID_xvals, "Unknown (0x%08x)"));
3471
3472
0
                            proto_tree_add_item(mq_tree, hf_mq_head_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc);
3473
0
                            proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc);
3474
0
                            proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, p_mq_parm->mq_int_enc);
3475
0
                            dissect_mq_encoding(mq_tree, pinfo, hf_mq_head_encoding, tvb, offset + 12, 4, p_mq_parm->mq_int_enc);
3476
0
                            proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, p_mq_parm->mq_int_enc);
3477
0
                            proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, p_mq_parm->mq_str_enc);
3478
3479
0
                            if (p_mq_parm->mq_strucID == MQ_STRUCTID_DH || p_mq_parm->mq_strucID == MQ_STRUCTID_DH_EBCDIC)
3480
0
                            {
3481
0
                                int iRec;
3482
0
                                iRec = tvb_get_uint32(tvb, offset + 36, p_mq_parm->mq_int_enc);
3483
3484
0
                                proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_dh_flags, ENC_BIG_ENDIAN);
3485
0
                                proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecfld, tvb, offset + 32, 4, p_mq_parm->mq_int_enc);
3486
0
                                proto_tree_add_item(mq_tree, hf_mq_dh_recspresent, tvb, offset + 36, 4, p_mq_parm->mq_int_enc);
3487
0
                                proto_tree_add_item(mq_tree, hf_mq_dh_objrecofs, tvb, offset + 40, 4, p_mq_parm->mq_int_enc);
3488
0
                                proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecofs, tvb, offset + 44, 4, p_mq_parm->mq_int_enc);
3489
3490
0
                                if (iRec)
3491
0
                                {
3492
0
                                    int iOfs1;
3493
0
                                    int iOfs2;
3494
0
                                    int iFlgs;
3495
0
                                    int iSize;
3496
3497
0
                                    iFlgs = (int)tvb_get_uint32(tvb, offset + 32, p_mq_parm->mq_int_enc);
3498
0
                                    iOfs1 = (int)tvb_get_uint32(tvb, offset + 40, p_mq_parm->mq_int_enc);
3499
0
                                    iOfs2 = (int)tvb_get_uint32(tvb, offset + 44, p_mq_parm->mq_int_enc);
3500
3501
0
                                    iSize = dissect_mq_or(tvb, mq_tree, offset + 48, iRec, iOfs1, p_mq_parm);
3502
0
                                    /*iSize = */dissect_mq_pmr(tvb, mqroot_tree, offset + 48 + iSize, iRec, iOfs2, iFlgs, p_mq_parm);
3503
0
                                }
3504
0
                            }
3505
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_MDE || p_mq_parm->mq_strucID == MQ_STRUCTID_MDE_EBCDIC)
3506
0
                            {
3507
0
                                proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
3508
0
                                proto_tree_add_item(mq_tree, hf_mq_md_groupid, tvb, offset + 32, 24, ENC_NA);
3509
0
                                proto_tree_add_item(mq_tree, hf_mq_md_msgseqnumber, tvb, offset + 56, 4, p_mq_parm->mq_int_enc);
3510
0
                                proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 60, 4, p_mq_parm->mq_int_enc);
3511
0
                                proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 64, 4, p_mq_parm->mq_int_enc);
3512
0
                                proto_tree_add_item(mq_tree, hf_mq_md_origlen, tvb, offset + 68, 4, p_mq_parm->mq_int_enc);
3513
0
                            }
3514
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_IIH || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH_EBCDIC)
3515
0
                            {
3516
0
                                int16_t sLen;
3517
0
                                int32_t iPos;
3518
0
                                proto_tree* mq_ims;
3519
3520
0
                                proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_iih_flags, ENC_BIG_ENDIAN);
3521
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_ltermoverride, tvb, offset + 32, 8, p_mq_parm->mq_str_enc);
3522
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_mfsmapname, tvb, offset + 40, 8, p_mq_parm->mq_str_enc);
3523
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_replytofmt, tvb, offset + 48, 8, p_mq_parm->mq_str_enc);
3524
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_authenticator, tvb, offset + 56, 8, p_mq_parm->mq_str_enc);
3525
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_transinstid, tvb, offset + 64, 16, ENC_NA);
3526
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_transstate, tvb, offset + 80, 1, p_mq_parm->mq_str_enc);
3527
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_commimode, tvb, offset + 81, 1, p_mq_parm->mq_str_enc);
3528
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_securityscope, tvb, offset + 82, 1, p_mq_parm->mq_str_enc);
3529
0
                                proto_tree_add_item(mq_tree, hf_mq_iih_reserved, tvb, offset + 83, 1, p_mq_parm->mq_str_enc);
3530
3531
0
                                iPos = offset + iSizeHeader;
3532
0
                                sLen = tvb_get_uint16(tvb, iPos, p_mq_parm->mq_int_enc);
3533
0
                                mq_ims = proto_tree_add_subtree(mq_tree, tvb, iPos, sLen, ett_mq_ims, NULL, "IMS Message");
3534
0
                                proto_tree_add_item(mq_ims, hf_mq_ims_ll, tvb, iPos + 0, 2, p_mq_parm->mq_int_enc);
3535
0
                                proto_tree_add_item(mq_ims, hf_mq_ims_zz, tvb, iPos + 2, 2, p_mq_parm->mq_int_enc);
3536
0
                                proto_tree_add_item(mq_ims, hf_mq_ims_trx, tvb, iPos + 4, 8, p_mq_parm->mq_str_enc);
3537
0
                                proto_tree_add_item(mq_ims, hf_mq_ims_data, tvb, iPos + 12, sLen - 12, ENC_NA);
3538
0
                                offset += sLen;
3539
0
                            }
3540
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_CIH || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH_EBCDIC)
3541
0
                            {
3542
0
                                proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_cih_flags, ENC_BIG_ENDIAN);
3543
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_returncode, tvb, offset + 32, 4, p_mq_parm->mq_int_enc);
3544
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_compcode, tvb, offset + 36, 4, p_mq_parm->mq_int_enc);
3545
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_reasoncode, tvb, offset + 40, 4, p_mq_parm->mq_int_enc);
3546
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_uowcontrols, tvb, offset + 44, 4, p_mq_parm->mq_int_enc);
3547
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_getwaitintv, tvb, offset + 48, 4, p_mq_parm->mq_int_enc);
3548
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_linktype, tvb, offset + 52, 4, p_mq_parm->mq_int_enc);
3549
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_outdatalen, tvb, offset + 56, 4, p_mq_parm->mq_int_enc);
3550
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_facilkeeptime, tvb, offset + 60, 4, p_mq_parm->mq_int_enc);
3551
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_adsdescriptor, tvb, offset + 64, 4, p_mq_parm->mq_int_enc);
3552
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_converstask, tvb, offset + 68, 4, p_mq_parm->mq_int_enc);
3553
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_taskendstatus, tvb, offset + 72, 4, p_mq_parm->mq_int_enc);
3554
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_bridgefactokn, tvb, offset + 76, 8, ENC_NA);
3555
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_function, tvb, offset + 84, 4, p_mq_parm->mq_str_enc);
3556
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_abendcode, tvb, offset + 88, 4, p_mq_parm->mq_str_enc);
3557
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_authenticator, tvb, offset + 92, 8, p_mq_parm->mq_str_enc);
3558
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_reserved, tvb, offset + 100, 8, p_mq_parm->mq_str_enc);
3559
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_replytofmt, tvb, offset + 108, 8, p_mq_parm->mq_str_enc);
3560
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_remotesysid, tvb, offset + 116, 4, p_mq_parm->mq_str_enc);
3561
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_remotetransid, tvb, offset + 120, 4, p_mq_parm->mq_str_enc);
3562
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_transactionid, tvb, offset + 124, 4, p_mq_parm->mq_str_enc);
3563
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_facilitylike, tvb, offset + 128, 4, p_mq_parm->mq_str_enc);
3564
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_attentionid, tvb, offset + 132, 4, p_mq_parm->mq_str_enc);
3565
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_startcode, tvb, offset + 136, 4, p_mq_parm->mq_str_enc);
3566
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_cancelcode, tvb, offset + 140, 4, p_mq_parm->mq_str_enc);
3567
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_nexttransid, tvb, offset + 144, 4, p_mq_parm->mq_str_enc);
3568
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_reserved2, tvb, offset + 148, 8, p_mq_parm->mq_str_enc);
3569
0
                                proto_tree_add_item(mq_tree, hf_mq_cih_reserved3, tvb, offset + 156, 8, p_mq_parm->mq_str_enc);
3570
0
                                if (iVer == 2)
3571
0
                                {
3572
0
                                    proto_tree_add_item(mq_tree, hf_mq_cih_cursorpos, tvb, offset + 164, 4, p_mq_parm->mq_int_enc);
3573
0
                                    proto_tree_add_item(mq_tree, hf_mq_cih_erroroffset, tvb, offset + 168, 4, p_mq_parm->mq_int_enc);
3574
0
                                    proto_tree_add_item(mq_tree, hf_mq_cih_inputitem, tvb, offset + 172, 4, p_mq_parm->mq_int_enc);
3575
0
                                    proto_tree_add_item(mq_tree, hf_mq_cih_reserved4, tvb, offset + 176, 4, p_mq_parm->mq_int_enc);
3576
0
                                }
3577
0
                            }
3578
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_RMH || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH_EBCDIC)
3579
0
                            {
3580
0
                                proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_rmh_flags, ENC_BIG_ENDIAN);
3581
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_objecttype, tvb, offset + 32, 8, p_mq_parm->mq_str_enc);
3582
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_objectinstid, tvb, offset + 36, 24, ENC_NA);
3583
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_srcenvlen, tvb, offset + 60, 4, p_mq_parm->mq_int_enc);
3584
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_srcenvofs, tvb, offset + 64, 4, p_mq_parm->mq_int_enc);
3585
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_srcnamelen, tvb, offset + 68, 4, p_mq_parm->mq_int_enc);
3586
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_srcnameofs, tvb, offset + 72, 4, p_mq_parm->mq_int_enc);
3587
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_dstenvlen, tvb, offset + 76, 4, p_mq_parm->mq_int_enc);
3588
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_dstenvofs, tvb, offset + 80, 4, p_mq_parm->mq_int_enc);
3589
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_dstnamelen, tvb, offset + 84, 4, p_mq_parm->mq_int_enc);
3590
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_dstnameofs, tvb, offset + 88, 4, p_mq_parm->mq_int_enc);
3591
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_datalogiclen, tvb, offset + 92, 4, p_mq_parm->mq_int_enc);
3592
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_datalogicofsl, tvb, offset + 96, 4, p_mq_parm->mq_int_enc);
3593
0
                                proto_tree_add_item(mq_tree, hf_mq_rmh_datalogicofsh, tvb, offset + 100, 4, p_mq_parm->mq_int_enc);
3594
0
                            }
3595
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_WIH || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH_EBCDIC)
3596
0
                            {
3597
0
                                proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
3598
0
                                proto_tree_add_item(mq_tree, hf_mq_wih_servicename, tvb, offset + 32, 32, p_mq_parm->mq_str_enc);
3599
0
                                proto_tree_add_item(mq_tree, hf_mq_wih_servicestep, tvb, offset + 64, 8, p_mq_parm->mq_str_enc);
3600
0
                                proto_tree_add_item(mq_tree, hf_mq_wih_msgtoken, tvb, offset + 72, 16, ENC_NA);
3601
0
                                proto_tree_add_item(mq_tree, hf_mq_wih_reserved, tvb, offset + 88, 32, p_mq_parm->mq_str_enc);
3602
0
                            }
3603
0
                            else if (p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC)
3604
0
                            {
3605
0
                                int iPos, iEnd, iCCSID;
3606
0
                                int iLenStr;
3607
0
                                uint8_t* sStr;
3608
3609
0
                                proto_tree* rfh_tree;
3610
3611
0
                                proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
3612
0
                                iPos = offset + 32;
3613
0
                                iEnd = offset + iLen;
3614
0
                                if (iVer > 1)
3615
0
                                {
3616
0
                                    iCCSID = (int)tvb_get_uint32(tvb, iPos, p_mq_parm->mq_int_enc);
3617
0
                                    proto_tree_add_item(mq_tree, hf_mq_rfh_ccsid, tvb, iPos, 4, p_mq_parm->mq_int_enc);
3618
0
                                    iPos += 4;
3619
0
                                }
3620
0
                                else
3621
0
                                    iCCSID = iTmp;
3622
3623
0
                                while (iPos < iEnd)
3624
0
                                {
3625
0
                                    iLenStr = (int)tvb_get_uint32(tvb, iPos, p_mq_parm->mq_int_enc);
3626
0
                                    sStr = tvb_get_string_enc(pinfo->pool, tvb, iPos + 4, iLenStr, IS_EBCDIC(iCCSID) ? ENC_EBCDIC : ENC_ASCII);
3627
0
                                    if (*sStr)
3628
0
                                        strip_trailing_blanks(sStr, iLenStr);
3629
0
                                    if (*sStr)
3630
0
                                        sStr = (uint8_t*)format_text_chr(pinfo->pool, (const char*)sStr, strlen((const char*)sStr), '.');
3631
3632
0
                                    rfh_tree = proto_tree_add_subtree_format(mq_tree, tvb, iPos, iLenStr + 4, ett_mq_rfh_ValueName, NULL, "NameValue: %s", sStr);
3633
3634
0
                                    proto_tree_add_item(rfh_tree, hf_mq_rfh_length, tvb, iPos, 4, p_mq_parm->mq_int_enc);
3635
0
                                    proto_tree_add_item(rfh_tree, hf_mq_rfh_string, tvb, iPos + 4, iLenStr, p_mq_parm->mq_str_enc);
3636
0
                                    iPos += (iLenStr + 4);
3637
0
                                }
3638
0
                            }
3639
0
                            else
3640
0
                            {
3641
0
                                proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, p_mq_parm->mq_int_enc);
3642
0
                                proto_tree_add_item(mq_tree, hf_mq_head_struct, tvb, offset + 32, iSizeHeader - 32, ENC_NA);
3643
0
                            }
3644
0
                        }
3645
0
                        offset += iSizeHeader;
3646
0
                        iHeadersLength += iSizeHeader;
3647
0
                        p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
3648
0
                        p_mq_parm->mq_str_enc = oStrEnc;
3649
0
                    }
3650
0
                    p_mq_parm->mq_int_enc = oIntEnc;
3651
0
                }
3652
2
            }
3653
3654
2
            if (!mq_in_reassembly)
3655
0
            {
3656
0
                col_append_fstr(pinfo->cinfo, COL_INFO, " (Data %d bytes)", iSizePayload - iHeadersLength);
3657
3658
                /* Call subdissector for the payload */
3659
0
                tvbuff_t* next_tvb;
3660
0
                p_mq_parm->mq_cur_ccsid.encod = tvb_get_uint32(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc);
3661
0
                p_mq_parm->mq_cur_ccsid.ccsid = tvb_get_uint32(tvb, p_mq_parm->iOfsCcs, p_mq_parm->mq_int_enc);
3662
0
                memcpy(p_mq_parm->mq_format,
3663
0
                    tvb_get_string_enc(pinfo->pool, tvb, p_mq_parm->iOfsFmt, sizeof(p_mq_parm->mq_format), p_mq_parm->mq_str_enc),
3664
0
                    sizeof(p_mq_parm->mq_format));
3665
3666
0
                next_tvb = tvb_new_subset_remaining(tvb, offset);
3667
0
                if (!dissector_try_heuristic(mq_heur_subdissector_list, next_tvb, pinfo, mqroot_tree, &hdtbl_entry, p_mq_parm))
3668
0
                    call_data_dissector(next_tvb, pinfo, mqroot_tree);
3669
0
            }
3670
2
            else
3671
2
            {
3672
2
                tvbuff_t* next_tvb;
3673
2
                next_tvb = tvb_new_subset_remaining(tvb, offset);
3674
2
                call_data_dissector(next_tvb, pinfo, mqroot_tree);
3675
2
            }
3676
2
        }
3677
2
        offset = tvb_reported_length(tvb);
3678
2
    }
3679
    /* After all recognised structures have been dissected, process remaining structure*/
3680
37
    if (tvb_reported_length_remaining(tvb, offset) >= 4)
3681
21
    {
3682
21
        p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset);
3683
21
        proto_tree_add_subtree_format(mqroot_tree, tvb, offset, -1, ett_mq_structid, NULL,
3684
21
            "%s", val_to_str_ext(pinfo->pool, p_mq_parm->mq_strucID, &mq_StructID_xvals, "Unknown (0x%08x)"));
3685
21
    }
3686
37
}
3687
3688
static int reassemble_mq(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_)
3689
43
{
3690
43
    mq_parm_t mq_parm;
3691
3692
    /* Reassembly of the MQ messages that span several PDU (several TSH) */
3693
    /* Typically a TCP PDU is 1460 bytes and a MQ PDU is 32766 bytes */
3694
43
    if (tvb_reported_length(tvb) < 28)
3695
0
        return 0;
3696
3697
43
    memset(&mq_parm, 0, sizeof(mq_parm_t));
3698
43
    mq_parm.mq_strucID = tvb_get_ntohl(tvb, 0);
3699
3700
43
    if (!is_mq_struc_TSH(mq_parm.mq_strucID))
3701
0
        return tvb_reported_length(tvb);
3702
3703
43
    uint8_t  iCtlF = 0;
3704
43
    int32_t  iSegL = 0;
3705
43
    int32_t  iBegL = 0;
3706
43
    uint32_t iEnco = 0;
3707
43
    int32_t  iMulS = 0;
3708
43
    int32_t  iHdrL = 0;
3709
43
    int32_t  iNxtP = 0;
3710
43
    uint8_t  iOpcd = 0;
3711
43
    bool bSeg1st = false;
3712
43
    bool bSegLst = false;
3713
43
    bool bMore = false;
3714
3715
43
    int32_t  iHdl = 0;
3716
43
    int32_t  iGlbMsgIdx = 0;
3717
43
    int32_t  iSegLength = 0;
3718
43
    int16_t  iSegmIndex = 0;
3719
3720
43
    uint32_t uStrL = 0;
3721
43
    uint32_t uPadL = 0;
3722
3723
    /* TSHM structure as 8 bytes more after the length (convid/requestid) */
3724
43
    if (mq_parm.mq_strucID == MQ_STRUCTID_TSHM || mq_parm.mq_strucID == MQ_STRUCTID_TSHM_EBCDIC)
3725
0
        iMulS = 8;
3726
3727
    /* Get the Segment Length */
3728
43
    iSegL = tvb_get_ntohl(tvb, 4);
3729
43
    if (iMulS == 8)
3730
0
    {
3731
0
        mq_parm.mq_convID = tvb_get_ntohl(tvb, 8);
3732
0
        mq_parm.mq_rqstID = tvb_get_ntohl(tvb, 12);
3733
0
    }
3734
43
    else
3735
43
    {
3736
43
        mq_parm.mq_convID = 0;
3737
43
        mq_parm.mq_rqstID = 0;
3738
43
    }
3739
3740
    /* Get the Encoding scheme */
3741
43
    iEnco = (tvb_get_uint8(tvb, 8 + iMulS) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN);
3742
43
    mq_parm.mq_int_enc = iEnco;
3743
    /* Get the Operation Code */
3744
43
    iOpcd = tvb_get_uint8(tvb, 9 + iMulS);
3745
43
    mq_parm.mq_opcode = iOpcd;
3746
    /* Get the Control Flag */
3747
43
    iCtlF = tvb_get_uint8(tvb, 10 + iMulS);
3748
43
    mq_parm.mq_ctlf1 = iCtlF;
3749
    /* First Segment ? */
3750
43
    bSeg1st = ((iCtlF & MQ_TCF_FIRST) != 0);
3751
    /* Last Segment */
3752
43
    bSegLst = ((iCtlF & MQ_TCF_LAST) != 0);
3753
3754
43
    mq_in_reassembly = false;
3755
3756
43
    if ((iOpcd > 0x80 && !(bSeg1st && bSegLst)) || iOpcd == MQ_TST_ASYNC_MESSAGE)
3757
21
    {
3758
21
        proto_tree* mq_tree = NULL;
3759
3760
        /* Optimisation : only fragmented segments go through the reassembly process */
3761
        /*
3762
            It seems that after a PUT on a Queue, when doing a GET, MQ first get
3763
            a small part of the response (4096 bytes)
3764
            The response contain the number of bytes returned for this request (ActMsgLen)
3765
            and the total number of bytes of this reply    (TotMsgLen)
3766
3767
            this mean the flow seems to be :
3768
3769
            PUT
3770
            REQUEST_MSG (MaxLen=4096)
3771
            ASYNC_MSG (1st/Lst Segment, ActMsgLen=4096, TotMsgLen=279420)
3772
            as ActMsgLen!=TotMsgLen, this mean the MSG is not complete, we only receive some of 279420 bytes
3773
            REQUEST_MSG (MaxLen=279420)
3774
            ASYNC_MSG (1st Segment, SegIndex=0 ActMsgLen=279420, TotMsgLen=279420)
3775
            ASYNC_MSG (Mid Segment, SegIndex=1)
3776
            ASYNC_MSG (Mid Segment, SegIndex=2)
3777
            .
3778
            ASYNC_MSG (Lst Segment, SegIndex=n)
3779
            End of reassembling (we have 279420 bytes to decode)
3780
3781
            PUT with Reassembly
3782
            GET with Reassembly not using ASYNC_MSG
3783
        */
3784
3785
21
        if (!mq_reassembly)
3786
0
        {
3787
0
            dissect_mq_pdu(tvb, pinfo, tree);
3788
0
            if (bSeg1st)
3789
0
            {
3790
                /* MQ segment is the first of a unreassembled series */
3791
0
                col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]");
3792
0
            }
3793
0
            return tvb_reported_length(tvb);
3794
0
        }
3795
3796
21
        fragment_head* fd_head;
3797
21
        uint32_t iConnectionId = ((pinfo->srcport << 16) + pinfo->destport);
3798
21
        bool reassembly_error = false;
3799
21
        const char* pTmp = "Full";
3800
21
        if (bSeg1st && !bSegLst)
3801
15
            pTmp = "First ";
3802
21
        if (!bSeg1st && bSegLst)
3803
2
            pTmp = "Last  ";
3804
21
        if (!bSeg1st && !bSegLst)
3805
4
            pTmp = "Middle";
3806
3807
21
        iHdrL = 28 + iMulS;
3808
3809
21
        if (iOpcd == MQ_TST_ASYNC_MESSAGE)
3810
2
        {
3811
            /* Get the MQ Handle of the Object */
3812
2
            iHdl = tvb_get_uint32(tvb, iHdrL + 4, iEnco);
3813
            /* Get the Global Message Index */
3814
2
            iGlbMsgIdx = tvb_get_uint32(tvb, iHdrL + 12, iEnco);
3815
            /* Get the Segment Length */
3816
2
            iSegLength = tvb_get_uint32(tvb, iHdrL + 16, iEnco);
3817
            /* Get the Segment Index */
3818
2
            iSegmIndex = tvb_get_uint16(tvb, iHdrL + 20, iEnco);
3819
3820
            /*
3821
                if SegmIndex == 0, it has 54 bytes + the length and padding
3822
                of a variable string at the end of the Header
3823
            */
3824
3825
2
            if (iSegmIndex == 0)
3826
0
            {
3827
0
                mq_parm.mq_AsyMsgRsn = tvb_get_uint32(tvb, iHdrL + 24, iEnco);
3828
0
                mq_parm.mq_MsgActLen = tvb_get_uint32(tvb, iHdrL + 28, iEnco);
3829
0
                mq_parm.mq_MsgTotLen = tvb_get_uint32(tvb, iHdrL + 32, iEnco);
3830
0
                uStrL = tvb_get_uint8(tvb, iHdrL + 54);
3831
0
                uPadL = ((((2 + 1 + uStrL) / 4) + 1) * 4) - (2 + 1 + uStrL);
3832
0
                mq_parm.mq_MsgActLen = iSegL - iHdrL;
3833
0
            }
3834
            /*
3835
                First segment has a longer header
3836
            */
3837
2
            iNxtP = iHdrL + ((bSeg1st) ? (54 + 1 + uStrL + uPadL) : (24));
3838
2
            mq_parm.mq_MsgActLen -= ((bSeg1st) ? (54 + 1 + uStrL + uPadL) : (24));
3839
2
        }
3840
19
        else
3841
19
        {
3842
19
            if (bSeg1st)
3843
15
            {
3844
15
                uStrL = mq_parm.mq_API_Len = tvb_get_uint32(tvb, iHdrL, ENC_BIG_ENDIAN);
3845
15
                mq_parm.mq_API_CC = tvb_get_uint32(tvb, iHdrL + 4, iEnco);
3846
15
                mq_parm.mq_API_RC = tvb_get_uint32(tvb, iHdrL + 8, iEnco);
3847
15
                iHdl = mq_parm.mq_API_Hdl = tvb_get_uint32(tvb, iHdrL + 12, iEnco);
3848
15
                mq_parm.mq_MsgTotLen = uStrL;
3849
15
                mq_parm.mq_MsgActLen = iSegL - iHdrL;
3850
15
                mq_parm.mq_MsgActLen -= 16; /* API */
3851
15
            }
3852
4
            else
3853
4
            {
3854
4
                fragment_head* _head = fragment_get_reassembled_id(&mq_reassembly_table, pinfo, iConnectionId);
3855
4
                if (_head)
3856
0
                {
3857
0
                    uStrL = mq_parm.mq_API_Len = tvb_get_uint32(_head->tvb_data, iHdrL, ENC_BIG_ENDIAN);
3858
0
                    mq_parm.mq_API_CC = tvb_get_uint32(_head->tvb_data, iHdrL + 4, iEnco);
3859
0
                    mq_parm.mq_API_RC = tvb_get_uint32(_head->tvb_data, iHdrL + 8, iEnco);
3860
0
                    iHdl = mq_parm.mq_API_Hdl = tvb_get_uint32(_head->tvb_data, iHdrL + 12, iEnco);
3861
0
                    mq_parm.mq_MsgTotLen = uStrL;
3862
0
                }
3863
4
            }
3864
3865
19
            iNxtP = iHdrL + ((bSeg1st) ? 16 : 0);
3866
19
        }
3867
21
        bMore = !bSegLst;
3868
        /*
3869
            First segment has a longer header (API Header)
3870
3871
            If it is a PUT1 Message Type TSHx + API + OD + MD + PMO
3872
            If it is a PUT  Message Type TSHx + API + MD + PMO
3873
            If it is a GET  Message Type TSHx + API + MD + GMO
3874
        */
3875
21
        if (bSeg1st)
3876
15
        {
3877
15
            uint32_t _iLen;
3878
15
            if (iOpcd == MQ_TST_MQPUT1 || iOpcd == MQ_TST_MQPUT1_REPLY)
3879
1
            {
3880
1
                int iDistributionListSize2;
3881
1
                _iLen = dissect_mq_od(tvb, NULL, NULL, iNxtP, &mq_parm, &iDistributionListSize2);
3882
1
                iNxtP += _iLen;
3883
1
                mq_parm.mq_MsgActLen -= _iLen;
3884
1
            }
3885
3886
15
            _iLen = dissect_mq_md(tvb, pinfo, NULL, iNxtP, &mq_parm, false);
3887
15
            iNxtP += _iLen;
3888
15
            mq_parm.mq_MsgActLen -= _iLen;
3889
3890
15
            if (iOpcd == MQ_TST_MQGET || iOpcd == MQ_TST_MQGET_REPLY)
3891
4
                _iLen = dissect_mq_gmo(tvb, NULL, NULL, iNxtP, &mq_parm);
3892
11
            else
3893
11
                _iLen = dissect_mq_pmo(tvb, NULL, NULL, iNxtP, &mq_parm, NULL);
3894
15
            iNxtP += _iLen;
3895
15
            mq_parm.mq_MsgActLen -= _iLen;
3896
15
        }
3897
3898
        /*
3899
            if it is the 1st Segment, it means we are
3900
            of the beginning of a reassembling. We must take the whole segment (with TSHM, and headers)
3901
        */
3902
21
        iBegL = (bSeg1st) ? 0 : iNxtP;
3903
3904
21
        if (iSegL <= iBegL)
3905
4
        {
3906
            /* negative or null fragment length - something is wrong; skip reassembly */
3907
4
            fd_head = NULL;
3908
4
            reassembly_error = true;
3909
4
        }
3910
17
        else
3911
17
        {
3912
17
            fd_head = fragment_add_seq_next(&mq_reassembly_table,
3913
17
                tvb, iBegL,
3914
17
                pinfo, iConnectionId, NULL,
3915
17
                iSegL - iBegL, bMore);
3916
17
        }
3917
3918
21
        if (tree)
3919
21
        {
3920
21
            proto_item* ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
3921
3922
21
            if (fd_head && !fd_head->next && mq_parm.mq_MsgActLen == mq_parm.mq_MsgTotLen)
3923
0
            {
3924
0
                proto_item_append_text(ti, " %s %s Segment",
3925
0
                    val_to_str_ext(pinfo->pool, iOpcd, &mq_opcode_xvals, "Unknown (0x%02x)"),
3926
0
                    pTmp);
3927
0
                if (mq_parm.mq_API_RC != MQ_MQRC_NONE)
3928
0
                    proto_item_append_text(ti, ", Reason=%d(0x%x) - %s",
3929
0
                        mq_parm.mq_API_RC, mq_parm.mq_API_RC,
3930
0
                        val_to_str_ext(pinfo->pool, mq_parm.mq_API_RC, &mq_MQRC_xvals, "Unknown (0x%02x)"));
3931
0
            }
3932
21
            else
3933
21
            {
3934
21
                proto_item_append_text(ti, " [%s %s Segment]",
3935
21
                    val_to_str_ext(pinfo->pool, iOpcd, &mq_opcode_xvals, "Unknown (0x%02x)"),
3936
21
                    pTmp);
3937
21
            }
3938
21
            if (iOpcd == MQ_TST_ASYNC_MESSAGE)
3939
2
                proto_item_append_text(ti, ", Hdl=0x%04x, GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
3940
2
                    iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
3941
19
            else
3942
19
                proto_item_append_text(ti, ", Hdl=0x%04x, Len=%d",
3943
19
                    mq_parm.mq_API_Hdl, mq_parm.mq_MsgTotLen);
3944
21
            if (reassembly_error)
3945
4
            {
3946
4
                expert_add_info_format(pinfo, ti, &ei_mq_reassembly_error,
3947
4
                    "Wrong fragment length (%d) - skipping reassembly", iSegL - iBegL);
3948
4
            }
3949
21
            mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb);
3950
21
        }
3951
0
        else
3952
0
        {
3953
0
            mq_tree = tree;
3954
0
        }
3955
3956
21
        if (fd_head != NULL && pinfo->num == fd_head->reassembled_in && !bMore)
3957
0
        {
3958
0
            tvbuff_t* next_tvb;
3959
3960
            /* Reassembly finished */
3961
0
            if (fd_head->next != NULL)
3962
0
            {
3963
0
                proto_item* ti;
3964
3965
                /* dissect the last(s) MQ segment received */
3966
                /* Reassembly in progress, so no decode */
3967
3968
0
                mq_in_reassembly = true;
3969
0
                dissect_mq_pdu(tvb, pinfo, mq_tree);
3970
0
                mq_in_reassembly = false;
3971
3972
                /*
3973
                2 or more fragments.
3974
                Build Up the full pdu to be dissected correctly
3975
                */
3976
0
                next_tvb = tvb_new_chain(tvb, fd_head->tvb_data);
3977
0
                add_new_data_source(pinfo, next_tvb, "Reassembled MQ");
3978
3979
                /* Create the tree element for the full reassembled MQ Msg */
3980
0
                ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
3981
0
                proto_item_append_text(ti, " %s Full Segment",
3982
0
                    val_to_str_ext(pinfo->pool, iOpcd, &mq_opcode_xvals, "Unknown (0x%02x)"));
3983
0
                if (iOpcd == MQ_TST_ASYNC_MESSAGE)
3984
0
                {
3985
0
                    proto_item_append_text(ti, ", Hdl=0x%04x, GlbMsgIdx=%d, Len=%d",
3986
0
                        iHdl, iGlbMsgIdx,
3987
0
                        tvb_reported_length_remaining(next_tvb, 0));
3988
0
                    if (mq_parm.mq_AsyMsgRsn != MQ_MQRC_NONE)
3989
0
                        proto_item_append_text(ti, ", Reason=%d(0x%x) - %s",
3990
0
                            mq_parm.mq_AsyMsgRsn, mq_parm.mq_AsyMsgRsn,
3991
0
                            val_to_str_ext(pinfo->pool, mq_parm.mq_AsyMsgRsn, &mq_MQRC_xvals, "Unknown (0x%02x)"));
3992
0
                }
3993
0
                else
3994
0
                {
3995
0
                    proto_item_append_text(ti, ", Hdl=0x%04x, Len=%d",
3996
0
                        mq_parm.mq_API_Hdl,
3997
0
                        tvb_reported_length_remaining(next_tvb, 0));
3998
0
                    if (mq_parm.mq_API_RC != MQ_MQRC_NONE)
3999
0
                        proto_item_append_text(ti, ", RC=%d(0x%x) - %s",
4000
0
                            mq_parm.mq_API_RC, mq_parm.mq_API_RC,
4001
0
                            val_to_str_ext(pinfo->pool, mq_parm.mq_API_RC, &mq_MQRC_xvals, "Unknown (0x%02x)"));
4002
0
                }
4003
0
                mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb);
4004
0
            }
4005
0
            else
4006
0
            {
4007
                /* Only 1 fragment */
4008
0
                next_tvb = tvb;
4009
0
            }
4010
0
            dissect_mq_pdu(next_tvb, pinfo, mq_tree);
4011
0
            return tvb_reported_length(tvb);
4012
0
        }
4013
21
        else
4014
21
        {
4015
21
            mq_in_reassembly = true;
4016
            /* Reassembly in progress */
4017
4018
21
            col_add_fstr(pinfo->cinfo, COL_INFO, "[%s %s Segment]",
4019
21
                val_to_str_ext(pinfo->pool, iOpcd, &mq_opcode_xvals, "Unknown (0x%02x)"),
4020
21
                pTmp);
4021
21
            dissect_mq_addCR_colinfo(pinfo, &mq_parm);
4022
21
            if (iOpcd == MQ_TST_ASYNC_MESSAGE)
4023
2
                col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x, GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
4024
2
                    iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
4025
19
            else
4026
19
                col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x, Len=%d",
4027
19
                    mq_parm.mq_API_Hdl, mq_parm.mq_MsgTotLen);
4028
21
            dissect_mq_pdu(tvb, pinfo, mq_tree);
4029
21
            return tvb_reported_length(tvb);
4030
21
        }
4031
21
    }
4032
    /* Reassembly not enabled or non-fragmented message */
4033
22
    dissect_mq_pdu(tvb, pinfo, tree);
4034
4035
22
    return tvb_reported_length(tvb);
4036
43
}
4037
4038
static unsigned get_mq_pdu_len(packet_info* pinfo _U_, tvbuff_t* tvb,
4039
    int offset, void* data _U_)
4040
0
{
4041
0
    unsigned uLen = tvb_reported_length_remaining(tvb, offset);
4042
0
    if (uLen >= 8)
4043
0
    {
4044
0
        if (is_mq_struc_TSH(tvb_get_ntohl(tvb, offset)))
4045
0
        {
4046
0
            uLen = tvb_get_ntohl(tvb, offset + 4);
4047
0
        }
4048
0
    }
4049
0
    return uLen;
4050
0
}
4051
4052
static int dissect_mq_tcp(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
4053
0
{
4054
0
    tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq, data);
4055
0
    return tvb_captured_length(tvb);
4056
0
}
4057
4058
static int dissect_mq_spx(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_)
4059
0
{
4060
    /* Since SPX has no standard desegmentation, MQ cannot be performed as well */
4061
0
    dissect_mq_pdu(tvb, pinfo, tree);
4062
0
    return tvb_captured_length(tvb);
4063
0
}
4064
4065
static bool dissect_mq_heur(tvbuff_t* tvb, packet_info* pinfo,
4066
    proto_tree* tree, bool is_tcp, dissector_handle_t* ssl_app_handle)
4067
3.85k
{
4068
3.85k
    if ((tvb_captured_length(tvb) >= 4) && (tvb_reported_length(tvb) >= 28))
4069
1.92k
    {
4070
1.92k
        if (is_mq_struc_TSH(tvb_get_ntohl(tvb, 0)))
4071
43
        {
4072
            /* Register this dissector for this conversation */
4073
43
            conversation_t* conversation = find_or_create_conversation(pinfo);
4074
43
            if (is_tcp)
4075
0
                conversation_set_dissector(conversation, mq_handle);
4076
43
            else if (ssl_app_handle)
4077
0
                *ssl_app_handle = mq_handle;
4078
4079
            /* Dissect the packet */
4080
43
            reassemble_mq(tvb, pinfo, tree, NULL);
4081
43
            return true;
4082
43
        }
4083
1.92k
    }
4084
3.81k
    return false;
4085
3.85k
}
4086
4087
static bool    dissect_mq_heur_tcp(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_)
4088
3.23k
{
4089
3.23k
    return dissect_mq_heur(tvb, pinfo, tree, true, NULL);
4090
3.23k
}
4091
4092
static bool    dissect_mq_heur_nontcp(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data _U_)
4093
617
{
4094
617
    return dissect_mq_heur(tvb, pinfo, tree, false, NULL);
4095
617
}
4096
4097
static bool    dissect_mq_heur_ssl(tvbuff_t* tvb, packet_info* pinfo, proto_tree* tree, void* data)
4098
0
{
4099
0
    struct tlsinfo *tlsinfo = (struct tlsinfo*)data;
4100
0
    return dissect_mq_heur(tvb, pinfo, tree, false, tlsinfo->app_handle);
4101
0
}
4102
4103
void proto_register_mq(void)
4104
14
{
4105
14
    static hf_register_info hf[] =
4106
14
    {
4107
14
        {&hf_mq_tsh_StructID, {"StructID..", "mq.tsh.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4108
14
        {&hf_mq_tsh_mqseglen, {"MQSegmLen.", "mq.tsh.seglength", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH MQ Segment length", HFILL}},
4109
14
        {&hf_mq_tsh_convid, {"Convers ID", "mq.tsh.convid", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Conversation ID", HFILL}},
4110
14
        {&hf_mq_tsh_requestid, {"Request ID", "mq.tsh.requestid", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Request ID", HFILL}},
4111
14
        {&hf_mq_tsh_byteorder, {"Byte order", "mq.tsh.byteorder", FT_UINT8, BASE_HEX, VALS(mq_byteorder_vals), 0x0, "TSH Byte order", HFILL}},
4112
14
        {&hf_mq_tsh_opcode, {"SegmType..", "mq.tsh.type", FT_UINT8, BASE_HEX | BASE_EXT_STRING, &mq_opcode_xvals, 0x0, "TSH MQ segment type", HFILL}},
4113
14
        {&hf_mq_tsh_ctlflgs1, {"Ctl Flag 1", "mq.tsh.cflags1", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags 1", HFILL}},
4114
14
        {&hf_mq_tsh_ctlflgs2, {"Ctl Flag 2", "mq.tsh.cflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags 2", HFILL}},
4115
14
        {&hf_mq_tsh_luwid, {"LUW Ident.", "mq.tsh.luwid", FT_BYTES, BASE_NONE, NULL, 0x0, "TSH logical unit of work identifier", HFILL}},
4116
14
        {&hf_mq_tsh_encoding, {"Encoding..", "mq.tsh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Encoding", HFILL}},
4117
14
        {&hf_mq_tsh_ccsid, {"CCSID.....", "mq.tsh.ccsid", FT_INT16, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "TSH CCSID", HFILL}},
4118
14
        {&hf_mq_tsh_reserved, {"Reserved..", "mq.tsh.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, "TSH Reserved", HFILL}},
4119
4120
14
        {&hf_mq_tsh_tcf_confirmreq, {"Confirm Req", "mq.tsh.tcf.confirmreq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_CONFIRM_REQUEST, "TSH TCF Confirm request", HFILL}},
4121
14
        {&hf_mq_tsh_tcf_error, {"Error", "mq.tsh.tcf.error", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_ERROR, "TSH TCF Error", HFILL}},
4122
14
        {&hf_mq_tsh_tcf_reqclose, {"Req close", "mq.tsh.tcf.reqclose", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_REQUEST_CLOSE, "TSH TCF Request close", HFILL}},
4123
14
        {&hf_mq_tsh_tcf_closechann, {"Close Chnl", "mq.tsh.tcf.closechann", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_CLOSE_CHANNEL, "TSH TCF Close channel", HFILL}},
4124
14
        {&hf_mq_tsh_tcf_first, {"First Seg", "mq.tsh.tcf.first", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_FIRST, "TSH TCF First", HFILL}},
4125
14
        {&hf_mq_tsh_tcf_last, {"Last Seg", "mq.tsh.tcf.last", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_LAST, "TSH TCF Last", HFILL}},
4126
14
        {&hf_mq_tsh_tcf_reqacc, {"Req accept", "mq.tsh.tcf.reqacc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_REQUEST_ACCEPTED, "TSH TCF Request accepted", HFILL}},
4127
14
        {&hf_mq_tsh_tcf_dlq, {"DLQ used", "mq.tsh.tcf.dlq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_DLQ_USED, "TSH TCF DLQ used", HFILL}},
4128
4129
14
        {&hf_mq_tsh_tcf2_HdrComp, {"HDR Comp", "mq.tsh.tcf2.hdrcomp", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_HDRCOMP, "TSH TCF2 Header Compressed", HFILL}},
4130
14
        {&hf_mq_tsh_tcf2_MsgComp, {"MSG Comp", "mq.tsh.tcf2.msgcomp", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_MSGCOMP, "TSH TCF2 Message Compressed", HFILL}},
4131
14
        {&hf_mq_tsh_tcf2_CSH, {"CSH", "mq.tsh.tcf2.csh", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_CSH, "TSH TCF2 CSH", HFILL}},
4132
14
        {&hf_mq_tsh_tcf2_CmitIntv, {"CommitIntvl", "mq.tsh.tcf.cmitintv", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_CMIT_INTERVAL, "TSH TCF2 Commit Interval", HFILL}},
4133
4134
14
        {&hf_mq_api_replylen, {"Reply len..", "mq.api.replylength", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reply length", HFILL}},
4135
14
        {&hf_mq_api_compcode, {"Compl Code.", "mq.api.completioncode", FT_UINT32, BASE_DEC, VALS(mq_MQCC_vals), 0x0, "API Completion code", HFILL}},
4136
14
        {&hf_mq_api_reascode, {"Reason Code", "mq.api.reasoncode", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_MQRC_xvals, 0x0, "API Reason code", HFILL}},
4137
14
        {&hf_mq_api_objecthdl, {"Object Hdl.", "mq.api.hobj", FT_UINT32, BASE_HEX, NULL, 0x0, "API Object handle", HFILL}},
4138
4139
14
        {&hf_mq_socket_conversid, {"ConversId", "mq.socket.conversid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Conversation Id", HFILL}},
4140
14
        {&hf_mq_socket_requestid, {"RequestId", "mq.socket.requestid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Request Id", HFILL}},
4141
14
        {&hf_mq_socket_type, {"Type.....", "mq.socket.type", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Type", HFILL}},
4142
14
        {&hf_mq_socket_parm1, {"Parm1....", "mq.socket.parm1", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Parameter 1", HFILL}},
4143
14
        {&hf_mq_socket_parm2, {"Parm2....", "mq.socket.parm2", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Parameter 2", HFILL}},
4144
4145
14
        {&hf_mq_caut_StructID, {"StructID.", "mq.caut.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4146
14
        {&hf_mq_caut_AuthType, {"AuthType.", "mq.caut.authtype", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "CAUT Authority Type", HFILL}},
4147
14
        {&hf_mq_caut_UsrMaxLen, {"UsrMaxLen", "mq.caut.usrmaxlen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "CAUT userid Maximum length", HFILL}},
4148
14
        {&hf_mq_caut_PwdMaxLen, {"PwdMaxLen", "mq.caut.pwdmaxlen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "CAUT password Maximum length", HFILL}},
4149
14
        {&hf_mq_caut_UsrLength, {"UsrLength", "mq.caut.usrlength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "CAUT userid length", HFILL}},
4150
14
        {&hf_mq_caut_PwdLength, {"PwdLength", "mq.caut.pswlength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "CAUT password length", HFILL}},
4151
14
        {&hf_mq_caut_usr, {"userid...", "mq.msh.userid", FT_STRING, BASE_NONE, NULL, 0x0, "CAUT UserId", HFILL}},
4152
14
        {&hf_mq_caut_psw, {"password.", "mq.msh.password", FT_STRING, BASE_NONE, NULL, 0x0, "CAUT Password", HFILL}},
4153
4154
14
        {&hf_mq_msh_StructID, {"StructID", "mq.msh.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4155
14
        {&hf_mq_msh_seqnum, {"Seq Numb", "mq.msh.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH sequence number", HFILL}},
4156
14
        {&hf_mq_msh_datalength, {"Buf len.", "mq.msh.buflength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH buffer length", HFILL}},
4157
14
        {&hf_mq_msh_unknown1, {"Unknown1", "mq.msh.unknown1", FT_UINT32, BASE_HEX, NULL, 0x0, "MSH unknown1", HFILL}},
4158
14
        {&hf_mq_msh_msglength, {"Msg len.", "mq.msh.msglength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH message length", HFILL}},
4159
4160
14
        {&hf_mq_xqh_StructID, {"StructID", "mq.xqh.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4161
14
        {&hf_mq_xqh_version, {"Version.", "mq.xqh.version", FT_UINT32, BASE_DEC, NULL, 0x0, "XQH version", HFILL}},
4162
14
        {&hf_mq_xqh_remoteq, {"Remote Q", "mq.xqh.remoteq", FT_STRING, BASE_NONE, NULL, 0x0, "XQH remote queue", HFILL}},
4163
14
        {&hf_mq_xqh_remoteqmgr, {"Rmt QMgr", "mq.xqh.remoteqmgr", FT_STRING, BASE_NONE, NULL, 0x0, "XQH remote queue manager", HFILL}},
4164
4165
14
        {&hf_mq_id_StructID, {"Structid..", "mq.id.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4166
14
        {&hf_mq_id_FapLevel, {"FAP level.", "mq.id.faplevel", FT_UINT8, BASE_DEC, NULL, 0x0, "ID Formats And Protocols level", HFILL}},
4167
14
        {&hf_mq_id_cf1, {"CapFlag1..", "mq.id.cflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability Flags 1", HFILL}},
4168
14
        {&hf_mq_id_ecf1, {"ECapFlag1.", "mq.id.ecflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID E Capability Flags 1", HFILL}},
4169
14
        {&hf_mq_id_ief1, {"IniErrFlg1", "mq.id.inierrflg1", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Initial Error Flags 1", HFILL}},
4170
14
        {&hf_mq_id_Reserved, {"Reserved..", "mq.id.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, "ID Reserved", HFILL}},
4171
14
        {&hf_mq_id_MaxMsgBatch, {"MaxMsgBtch", "mq.id.maxmsgbatch", FT_UINT16, BASE_DEC, NULL, 0x0, "ID max msg per batch", HFILL}},
4172
14
        {&hf_mq_id_MaxTrSize, {"MaxTrSize.", "mq.id.maxtrsize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max trans size", HFILL}},
4173
14
        {&hf_mq_id_MaxMsgSize, {"MaxMsgSize", "mq.id.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max msg size", HFILL}},
4174
14
        {&hf_mq_id_SeqWrapVal, {"SeqWrapVal", "mq.id.seqwrap", FT_UINT32, BASE_DEC, NULL, 0x0, "ID seq wrap value", HFILL}},
4175
14
        {&hf_mq_id_channel, {"ChannelNme", "mq.id.channelname", FT_STRING, BASE_NONE, NULL, 0x0, "ID channel name", HFILL}},
4176
14
        {&hf_mq_id_cf2, {"CapFlag2..", "mq.id.cflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability flags 2", HFILL}},
4177
14
        {&hf_mq_id_ecf2, {"ECapFlag2.", "mq.id.ecflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID E Capability flags 2", HFILL}},
4178
14
        {&hf_mq_id_ccsid, {"ccsid.....", "mq.id.ccsid", FT_INT16, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "ID Coded Character Set ID", HFILL}},
4179
14
        {&hf_mq_id_qmgrname, {"QMgrName..", "mq.id.qm", FT_STRING, BASE_NONE, NULL, 0x0, "ID Queue Manager Name", HFILL}},
4180
14
        {&hf_mq_id_HBInterval, {"HBInterval", "mq.id.hbint", FT_UINT32, BASE_DEC, NULL, 0x0, "ID Heartbeat interval", HFILL}},
4181
14
        {&hf_mq_id_EFLLength, {"EFLLength.", "mq.id.efllength", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID EFL Length", HFILL}},
4182
14
        {&hf_mq_id_ief2, {"IniErrFlg2", "mq.id.inierrflg2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Initial Error Flags 2", HFILL}},
4183
14
        {&hf_mq_id_Reserved1, {"Reserved1.", "mq.id.reserved1", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 1", HFILL}},
4184
14
        {&hf_mq_id_HdrCprsLst, {"HdrCprsLst", "mq.id.hdrcprslst", FT_BYTES, BASE_NONE, NULL, 0x0, "ID Hdr Cprs Lst", HFILL}},
4185
14
        {&hf_mq_id_MsgCprsLst, {"MsgCprsLst", "mq.id.msgcprslst", FT_BYTES, BASE_NONE, NULL, 0x0, "ID Msg Cprs Lst", HFILL}},
4186
14
        {&hf_mq_id_Reserved2, {"Reserved2.", "mq.id.reserved2", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 2", HFILL}},
4187
14
        {&hf_mq_id_SSLKeyRst, {"SSLKeyRst.", "mq.id.sslkeyrst", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID SSL Key Reset", HFILL}},
4188
14
        {&hf_mq_id_ConvBySkt, {"ConvBySkt.", "mq.id.convbyskt", FT_INT32, BASE_DEC, NULL, 0x0, "ID Conv Per Socket", HFILL}},
4189
14
        {&hf_mq_id_cf3, {"CapFlag3..", "mq.id.cflags3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Capability flags 3", HFILL}},
4190
14
        {&hf_mq_id_ecf3, {"ECapFlag3.", "mq.id.ecflags3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID E Capability flags 3", HFILL}},
4191
14
        {&hf_mq_id_Reserved3, {"Reserved3.", "mq.id.reserved3", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 3", HFILL}},
4192
14
        {&hf_mq_id_ProcessId, {"ProcessId.", "mq.id.processid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Process Identifier", HFILL}},
4193
14
        {&hf_mq_id_ThreadId, {"ThreadId..", "mq.id.threadid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Thread Identifier", HFILL}},
4194
14
        {&hf_mq_id_TraceId, {"TraceId...", "mq.id.traceid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Trace Identifier", HFILL}},
4195
14
        {&hf_mq_id_ProdId, {"ProdId....", "mq.id.prodid", FT_STRING, BASE_NONE, NULL, 0x0, "ID Product Identifier", HFILL}},
4196
14
        {&hf_mq_id_mqmid, {"MQM ID....", "mq.id.mqmid", FT_STRING, BASE_NONE, NULL, 0x0, "ID MQM ID", HFILL}},
4197
14
        {&hf_mq_id_pal, {"PAL.......", "mq.id.pal", FT_BYTES, BASE_NONE, NULL, 0x0, "ID PAL", HFILL}},
4198
14
        {&hf_mq_id_r, {"R.........", "mq.id.r", FT_BYTES, BASE_NONE, NULL, 0x0, "ID R", HFILL}},
4199
4200
14
        {&hf_mq_id_cf1_msgseq, {"Message sequence", "mq.id.icf.msgseq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_MSG_SEQ, "ID ICF Message sequence", HFILL}},
4201
14
        {&hf_mq_id_cf1_convcap, {"Conversion capable", "mq.id.icf.convcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL}},
4202
14
        {&hf_mq_id_cf1_splitmsg, {"Split messages", "mq.id.icf.splitmsg", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_SPLIT_MESSAGE, "ID ICF Split message", HFILL}},
4203
14
        {&hf_mq_id_cf1_RqstInit, {"Request Initiation", "mq.id.icf.rqstinit", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_REQUEST_INITIATION, "ID ICF Request Initiation", HFILL}},
4204
14
        {&hf_mq_id_cf1_RqstSecu, {"Request Security", "mq.id.icf.rqstsecu", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_REQUEST_SECURITY, "ID ICF Request Security", HFILL}},
4205
14
        {&hf_mq_id_cf1_mqreq, {"MQ request", "mq.id.icf.mqreq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_MQREQUEST, "ID ICF MQ request", HFILL}},
4206
14
        {&hf_mq_id_cf1_svrsec, {"Srvr Con security", "mq.id.icf.svrsec", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_SVRCONN_SECURITY, "ID ICF Server connection security", HFILL}},
4207
14
        {&hf_mq_id_cf1_runtime, {"Runtime applic", "mq.id.icf.runtime", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF1_RUNTIME, "ID ICF Runtime application", HFILL}},
4208
4209
14
        {&hf_mq_id_cf2_CanDstLst, {"DistListCapable", "mq.id.icf2.distlistcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_DIST_LIST_CAPABLE, "ID ICF2 Distribution List Capable", HFILL}},
4210
14
        {&hf_mq_id_cf2_FstMsgReq, {"Fast Msg Reqrd", "mq.id.icf2.fastmsgrqrd", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_FAST_MESSAGES_REQUIRED, "ID ICF2 Fast Message Required", HFILL}},
4211
14
        {&hf_mq_id_cf2_RespConv, {"RspndrConversion", "mq.id.icf2.respndrconvers", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_RESPONDER_CONVERSION, "ID ICF2 Responder Conversion", HFILL}},
4212
14
        {&hf_mq_id_cf2_XARequest, {"XARequest", "mq.id.icf2.xarequest", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_XAREQUEST, "ID ICF2 XA Request", HFILL}},
4213
14
        {&hf_mq_id_cf2_XARunTApp, {"XARunTypApp", "mq.id.icf2.xaruntypapp", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_XARUNTIME_APP, "ID ICF2 XA Runtime App", HFILL}},
4214
14
        {&hf_mq_id_cf2_SPIRqst, {"SPIRequest", "mq.id.icf2.spirequest", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_SPIREQUEST, "ID ICF2 SPI Request", HFILL}},
4215
14
        {&hf_mq_id_cf2_DualUOW, {"DualUOW", "mq.id.icf2.dualuow", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_DUAL_UOW, "ID ICF2 Dual UOW", HFILL}},
4216
14
        {&hf_mq_id_cf2_CanTrcRte, {"Trace Rte Capab", "mq.id.icf2.cantraceroute", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF2_TRACE_ROUTE_CAPABLE, "ID ICF2 Trace Route Capable", HFILL}},
4217
4218
14
        {&hf_mq_id_cf3_CanMsgPrp, {"Msg Property Cap", "mq.id.ief3.msgpropertycap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_MSG_PROP_CAPABLE, "ID ICF3 Message PropertyCapable", HFILL}},
4219
14
        {&hf_mq_id_cf3_CanMulticast, {"Multicast Cap", "mq.id.ief3.multicastcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_MULTICAST_CAPABLE, "ID ICF3 Multicast Capabilities", HFILL}},
4220
14
        {&hf_mq_id_cf3_PropIntSep, {"Prop Int Separate", "mq.id.ief3.propintseparate", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_MSG_PROP_INT_SEPARATE, "ID ICF3 Property Int Separate", HFILL}},
4221
14
        {&hf_mq_id_cf3_MPlxSyGet, {"Multiplex_synchget", "mq.id.ief3.multiplexsynchget", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_MULTIPLEX_SYNCGET, "ID ICF3 MULTIPLEX_SYNCGET", HFILL}},
4222
14
        {&hf_mq_id_cf3_ProtAlgorit, {"Prot Algorithms", "mq.id.ief3.protalgorithms", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_PROT_ALGORITHMS, "ID ICF3 Prot Algorithms", HFILL}},
4223
14
        {&hf_mq_id_cf3_CanGenConnTag, {"Gen ConnTag Cap", "mq.id.ief3.genconntagcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_CF3_GEN_CONNTAG_CAP, "ID ICF3 Generate ConnTag Capable", HFILL}},
4224
4225
14
        {&hf_mq_id_ief1_ccsid, {"Invalid CCSID", "mq.id.ief1.ccsid", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_CCSID_NOT_SUPPORTED, "ID invalid CCSID", HFILL}},
4226
14
        {&hf_mq_id_ief1_enc, {"Invalid encoding", "mq.id.ief1.enc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_ENCODING_INVALID, "ID invalid encoding", HFILL}},
4227
14
        {&hf_mq_id_ief1_mxtrsz, {"Invalid Max Trans Size", "mq.id.ief1.mxtrsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_MAX_TRANSMISSION_SIZE, "ID invalid maximum transmission size", HFILL}},
4228
14
        {&hf_mq_id_ief1_fap, {"Invalid FAP level", "mq.id.ief1.fap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_FAP_LEVEL, "ID invalid FAP level", HFILL}},
4229
14
        {&hf_mq_id_ief1_mxmsgsz, {"Invalid message size", "mq.id.ief1.mxmsgsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_MAX_MSG_SIZE, "ID invalid message size", HFILL}},
4230
14
        {&hf_mq_id_ief1_mxmsgpb, {"Invalid Max Msg batch", "mq.id.ief1.mxmsgpb", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_MAX_MSG_PER_BATCH, "ID maximum message per batch", HFILL}},
4231
14
        {&hf_mq_id_ief1_seqwrap, {"Invalid Seq Wrap Value", "mq.id.ief1.seqwrap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_SEQ_WRAP_VALUE, "ID invalid sequence wrap value", HFILL}},
4232
14
        {&hf_mq_id_ief1_hbint, {"Invalid HB interval", "mq.id.ief1.hbint", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_HEARTBEAT_INTERVAL, "ID invalid heartbeat interval", HFILL}},
4233
4234
14
        {&hf_mq_id_ief2_HdrCmpLst, {"Invalid HDR CompLst", "mq.id.ief2.hdrcomplst", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF2_HDRCOMPLIST, "ID invalid Header Compression List", HFILL}},
4235
14
        {&hf_mq_id_ief2_MsgCmpLst, {"Invalid Msg CompLst", "mq.id.ief2.msgcomplst", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF2_MSGCOMPLIST, "ID invalid Message Compression List", HFILL}},
4236
14
        {&hf_mq_id_ief2_SSLReset, {"Invalid SSL Reset", "mq.id.ief2.sslreset", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF2_SSL_RESET, "ID invalid SSL Reset", HFILL}},
4237
4238
14
        {&hf_mq_uid_StructID, {"Structid", "mq.uid.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4239
14
        {&hf_mq_uid_userid, {"User ID.", "mq.uid.userid", FT_STRING, BASE_NONE, NULL, 0x0, "UID structid", HFILL}},
4240
14
        {&hf_mq_uid_password, {"Password", "mq.uid.password", FT_STRING, BASE_NONE, NULL, 0x0, "UID password", HFILL}},
4241
14
        {&hf_mq_uid_longuserid, {"Long UID", "mq.uid.longuserid", FT_STRING, BASE_NONE, NULL, 0x0, "UID long user id", HFILL}},
4242
4243
14
        {&hf_mq_sidlen, {"SID Len.", "mq.uid.sidlen", FT_UINT8, BASE_DEC, NULL, 0x0, "Sid Len", HFILL}},
4244
14
        {&hf_mq_sidtyp, {"SIDType.", "mq.uid.sidtyp", FT_UINT8, BASE_DEC, VALS(mq_sidtype_vals), 0x0, "Sid Typ", HFILL}},
4245
14
        {&hf_mq_securityid, {"SecurID.", "mq.uid.securityid", FT_BYTES, BASE_NONE, NULL, 0x0, "Security ID", HFILL}},
4246
4247
14
        {&hf_mq_conn_QMgr, {"QMgr....", "mq.conn.qm", FT_STRING, BASE_NONE, NULL, 0x0, "CONN queue manager", HFILL}},
4248
14
        {&hf_mq_conn_appname, {"ApplName", "mq.conn.appname", FT_STRING, BASE_NONE, NULL, 0x0, "CONN application name", HFILL}},
4249
14
        {&hf_mq_conn_apptype, {"ApplType", "mq.conn.apptype", FT_INT32, BASE_DEC | BASE_EXT_STRING, &mq_MQAT_xvals, 0x0, "CONN application type", HFILL}},
4250
14
        {&hf_mq_conn_acttoken, {"AccntTok", "mq.conn.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN accounting token", HFILL}},
4251
14
        {&hf_mq_conn_options, {"Options.", "mq.conn.options", FT_UINT32, BASE_DEC, VALS(mq_conn_options_vals), 0x0, "CONN options", HFILL}},
4252
14
        {&hf_mq_conn_Xoptions, {"XOptions", "mq.conn.xoptions", FT_UINT32, BASE_HEX, NULL, 0x0, "CONN Xoptions", HFILL}},
4253
4254
14
        {&hf_mq_fapmqcno_structid, {"structid..", "mq.fapmqcno.structid", FT_STRING, BASE_NONE, NULL, 0x0, "FAPMQCNO struct id", HFILL} },
4255
14
        {&hf_mq_fapmqcno_version, {"version...", "mq.fapmqcno.version", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FAPMQCNO version", HFILL} },
4256
14
        {&hf_mq_fapmqcno_capflags, {"capflags..", "mq.fapmqcno.options", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FAPMQCNO capability flags", HFILL} },
4257
14
        {&hf_mq_fapmqcno_conntag, {"conntag..", "mq.fapmqcno.conntag", FT_BYTES, BASE_NONE, NULL, 0x0, "FAPMQCNO connection tag", HFILL} },
4258
14
        {&hf_mq_fapmqcno_retconntag, {"retcontag", "mq.fapmqcno.retcontag", FT_BYTES, BASE_NONE, NULL, 0x0, "FAPMQCNO restry connection tag", HFILL} },
4259
14
        {&hf_mq_fapmqcno_type, {"type.....", "mq.fapmqcno.type", FT_UINT32, BASE_DEC, NULL, 0x0, "FAPMQCNO Type", HFILL} },
4260
14
        {&hf_mq_fapmqcno_timeout, {"timeout..", "mq.fapmqcno.timeout", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FAPMQCNO Timeout", HFILL} },
4261
14
        {&hf_mq_fapmqcno_balopts, {"balopt...", "mq.fapmqcno.balopts", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FAPMQCNO balance options", HFILL} },
4262
4263
14
        {&hf_mq_fcno_StructID, {"structid..", "mq.fcno.structid", FT_STRING, BASE_NONE, NULL, 0x0, "FCNO structure id", HFILL}},
4264
14
        {&hf_mq_fcno_version, {"version...", "mq.fcno.version", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO version", HFILL}},
4265
14
        {&hf_mq_fcno_options, {"options...", "mq.fcno.options", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO options flag", HFILL}},
4266
4267
14
        {&hf_mq_fcno_opt_FASTPATH_BINDING, {"FASTPATH_BINDING","mq.fcno.options.fastpath_binding", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_FASTPATH_BINDING ,"FCNO options fastpath_binding", HFILL} },
4268
14
        {&hf_mq_fcno_opt_SERIALIZE_CONNTAG_QMGR, {"SERIALIZE_CONNTAG_QMGR","mq.fcno.options.serialize_conntag_qmgr", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_SERIALIZE_CONN_TAG_Q_MGR,"FCNO options serialize_conntag_qmgr", HFILL} },
4269
14
        {&hf_mq_fcno_opt_SERIALIZE_CONNTAG_QSG, {"SERIALIZE_CONNTAG_QSG","mq.fcno.options.serialize_conntag_qsg", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_SERIALIZE_CONN_TAG_QSG ,"FCNO options serialize_conntag_qsg", HFILL} },
4270
14
        {&hf_mq_fcno_opt_RESTRICT_CONNTAG_QMGR, {"RESTRICT_CONNTAG_QMGR","mq.fcno.options.restrict_conntag_qmgr", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_RESTRICT_CONN_TAG_Q_MGR ,"FCNO options restrict_conntag_qmgr", HFILL} },
4271
14
        {&hf_mq_fcno_opt_RESTRICT_CONNTAG_QSG, {"RESTRICT_CONNTAG_QSG","mq.fcno.options.restrict_conntag_qsg", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_RESTRICT_CONN_TAG_QSG ,"FCNO options restrict_conntag_qsg", HFILL} },
4272
14
        {&hf_mq_fcno_opt_HANDLE_SHARE_NONE, {"HANDLE_SHARE_NONE","mq.fcno.options.handle_share_none", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_HANDLE_SHARE_NONE ,"FCNO options handle_share_none", HFILL} },
4273
14
        {&hf_mq_fcno_opt_HANDLE_SHARE_BLOCK, {"HANDLE_SHARE_BLOCK","mq.fcno.options.handle_share_block", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_HANDLE_SHARE_BLOCK ,"FCNO options handle_share_block", HFILL} },
4274
14
        {&hf_mq_fcno_opt_HANDLE_SHARE_NOBLOCK, {"HANDLE_SHARE_NOBLOCK","mq.fcno.options.handle_share_noblock", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_HANDLE_SHARE_NO_BLOCK ,"FCNO options handle_share_noblock", HFILL} },
4275
14
        {&hf_mq_fcno_opt_SHARED_BINDING, {"SHARED_BINDING","mq.fcno.optIONS.shared_binding", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_SHARED_BINDING ,"FCNO options shared_binding", HFILL} },
4276
14
        {&hf_mq_fcno_opt_ISOLATE_BINDING, {"ISOLATE_BINDING","mq.fcno.optIOns.isolate_binding", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ISOLATED_BINDING ,"FCNO options isolate_binding", HFILL} },
4277
14
        {&hf_mq_fcno_opt_LOCAL_BINDING, {"LOCAL_BINDING","mq.fcno.optIONS.Local_binding", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_LOCAL_BINDING ,"FCNO options local_binding", HFILL} },
4278
14
        {&hf_mq_fcno_opt_CLIENT_BINDING, {"CLIENT_BINDING","mq.fcno.optIONS.client_binding", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_CLIENT_BINDING ,"FCNO options client_binding", HFILL} },
4279
14
        {&hf_mq_fcno_opt_ACCNT_MQI_ENABLED, {"ACCNT_MQI_ENABLED","mq.fcno.options.accnt_mqi_enabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACCOUNTING_MQI_ENABLED ,"FCNO options accnt_mqi_enabled", HFILL} },
4280
14
        {&hf_mq_fcno_opt_ACCNT_MQI_DISABLED, {"ACCNT_MQI_DISABLED","mq.fcno.options.accnt_mqi_disabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACCOUNTING_MQI_DISABLED ,"FCNO options accnt_mqi_disabled", HFILL} },
4281
14
        {&hf_mq_fcno_opt_ACCNT_Q_ENABLED, {"ACCNT_Q_ENABLED","mq.fcno.optIOns.accnt_q_enabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACCOUNTING_Q_ENABLED ,"FCNO options accnt_q_enabled", HFILL} },
4282
14
        {&hf_mq_fcno_opt_ACCNT_Q_DISABLED, {"ACCNT_Q_DISABLED","mq.fcno.options.accnt_q_disabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACCOUNTING_Q_DISABLED ,"FCNO options accnt_q_disabled", HFILL} },
4283
14
        {&hf_mq_fcno_opt_NO_CONV_SHARING, {"NO_CONV_SHARING","mq.fcno.optIOns.no_conv_sharing", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_NO_CONV_SHARING ,"FCNO options no_conv_sharing", HFILL} },
4284
14
        {&hf_mq_fcno_opt_ALL_CONVS_SHARE, {"ALL_CONVS_SHARE","mq.fcno.optIOns.all_convs_share", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ALL_CONVS_SHARE ,"FCNO options all_convs_share", HFILL} },
4285
14
        {&hf_mq_fcno_opt_CD_FOR_OUTPUT_ONLY, {"CD_FOR_OUTPUT_ONLY","mq.fcno.options.cd_for_output_only", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_CD_FOR_OUTPUT_ONLY ,"FCNO options cd_for_output_only", HFILL} },
4286
14
        {&hf_mq_fcno_opt_USE_CD_SELECTION, {"USE_CD_SELECTION","mq.fcno.options.use_cd_selection", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_USE_CD_SELECTION ,"FCNO options use_cd_selection", HFILL} },
4287
14
        {&hf_mq_fcno_opt_GENERATE_CONN_TAG, {"GENERATE_CONN_TAG","mq.fcno.options.generate_conn_tag", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_GENERATE_CONN_TAG ,"FCNO options generate_conn_tag", HFILL} },
4288
14
        {&hf_mq_fcno_opt_RECONNECT, {"RECONNECT","mq.fcno.options.reconnect", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_RECONNECT ,"FCNO options reconnect", HFILL} },
4289
14
        {&hf_mq_fcno_opt_RECONNECT_DISABLED, {"RECONNECT_DISABLED","mq.fcno.options.reconnect_disabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_RECONNECT_DISABLED ,"FCNO options reconnect_disabled", HFILL} },
4290
14
        {&hf_mq_fcno_opt_RECONNECT_Q_MGR, {"RECONNECT_Q_MGR","mq.fcno.optIOns.reconnect_q_mgr", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_RECONNECT_Q_MGR ,"FCNO options reconnect_q_mgr", HFILL} },
4291
14
        {&hf_mq_fcno_opt_ACTIVITY_TRACE_ENABLED, {"ACTIVITY_TRACE_ENABLED","mq.fcno.options.activity_trace_enabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACTIVITY_TRACE_ENABLED ,"FCNO options activity_trace_enabled", HFILL} },
4292
14
        {&hf_mq_fcno_opt_ACTIVITY_TRACE_DISABLED, {"ACTIVITY_TRACE_DISABLED","mq.fcno.options.activity_trace_disabled", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCNO_ACTIVITY_TRACE_DISABLED ,"FCNO options activity_trace_disabled", HFILL} },
4293
4294
14
        {&hf_mq_fcno_contagsr, {"contagqm..", "mq.fcno.conntagqmgr", FT_BYTES, BASE_NONE, NULL, 0x0, "FCNO Connection Tag Q Manager", HFILL} },
4295
4296
14
        {&hf_mq_fcno_mqcdofs, {"mqcdofs...", "mq.fcno.mqcdofs", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO offset of client conn", HFILL} },
4297
14
        {&hf_mq_fcno_mqcdptr, {"mqcdptr...", "mq.fcno.mqcdptr", FT_UINT32, BASE_HEX, NULL, 0x0, "FCNO address of client conn", HFILL} },
4298
14
        {&hf_mq_fcno_mqcdptr64, {"mqcdptr64.", "mq.fcno.mqcdptr64", FT_UINT64, BASE_HEX, NULL, 0x0, "FCNO address of client conn 64bit", HFILL} },
4299
4300
14
        {&hf_mq_fcno_conn_tag, {"conntag", "mq.fcno.conntag", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN Connection Tag", HFILL} },
4301
4302
14
        {&hf_mq_fcno_sslcfgofs, {"sslcfgofs.", "mq.fcno.sslcfgofs", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO offset of SSL configuration", HFILL} },
4303
14
        {&hf_mq_fcno_sslcfgptr, {"sslcfgptr.", "mq.fcno.sslcfgptr", FT_UINT32, BASE_HEX, NULL, 0x0, "FCNO address  of SSL configuration", HFILL} },
4304
14
        {&hf_mq_fcno_sslcfgptr64, {"sslcfgptr64", "mq.fcno.sslcfgptr64", FT_UINT64, BASE_HEX, NULL, 0x0, "FCNO address of SSL configuration 64bit", HFILL} },
4305
4306
14
        {&hf_mq_fcno_connid, {"connid....", "mq.fcno.connid", FT_BYTES, BASE_NONE, NULL, 0x0, "FCNO Connection Id", HFILL} },
4307
14
        {&hf_mq_fcno_secprmofs, {"secprmofs.", "mq.fcno.secprmofs", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO offset of security parms", HFILL} },
4308
14
        {&hf_mq_fcno_secprmptr, {"secprmptr.", "mq.fcno.secprmptr", FT_UINT32, BASE_HEX, NULL, 0x0, "FCNO address of security parms", HFILL} },
4309
14
        {&hf_mq_fcno_secprmptr64, {"secprmptr64", "mq.fcno.secprmptr64", FT_UINT64, BASE_HEX, NULL, 0x0, "FCNO address of security parms 64bit", HFILL} },
4310
4311
14
        {&hf_mq_fcno_ccdturlofs, {"ccdturlofs", "mq.fcno.ccdturlofs", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO offset of CCDT URL string", HFILL} },
4312
14
        {&hf_mq_fcno_ccdturlptr, {"ccdturlptr", "mq.fcno.ccdturlptr", FT_UINT32, BASE_HEX, NULL, 0x0, "FCNO address of CCDT URL string", HFILL} },
4313
14
        {&hf_mq_fcno_ccdturlptr64, {"ccdturlptr64", "mq.fcno.ccdturlptr64", FT_UINT64, BASE_HEX, NULL, 0x0, "FCNO address of CCDT URL string 64bit", HFILL} },
4314
14
        {&hf_mq_fcno_ccdturllen, {"ccdturllen", "mq.fcno.ccdturllen", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO length of CCDT URL string", HFILL} },
4315
14
        {&hf_mq_fcno_reserved, {"reserved...", "mq.fcno.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "FCNO reserved", HFILL}},
4316
4317
14
        {&hf_mq_fcno_applname, {"applname...", "mq.fcno.applname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FCNO Application name", HFILL} },
4318
14
        {&hf_mq_fcno_reserved2, {"reserved2..", "mq.fcno.reserved2", FT_UINT8, BASE_HEX, NULL, 0x0, "FCNO reserved2", HFILL}},
4319
4320
14
        {&hf_mq_fcno_balprmofs, {"balprmofs.", "mq.fcno.balprmofs", FT_UINT32, BASE_DEC, NULL, 0x0, "FCNO offset of Balance parameter", HFILL} },
4321
14
        {&hf_mq_fcno_balprmptr, {"balprmptr.", "mq.fcno.balprmptr", FT_UINT32, BASE_HEX, NULL, 0x0, "FCNO address of Balance parameter", HFILL} },
4322
14
        {&hf_mq_fcno_balprmptr64, {"balprmptr64", "mq.fcno.balprmptr64", FT_UINT64, BASE_HEX, NULL, 0x0, "FCNO address of Balance parameter 64bit", HFILL} },
4323
14
        {&hf_mq_fcno_reserved3, {"reserved3..", "mq.fcno.reserved3", FT_UINT8, BASE_HEX, NULL, 0x0, "FCNO reserved3", HFILL}},
4324
4325
14
        {&hf_mq_conn_prodid, {"prodid....", "mq.conn.prodid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN Product Id", HFILL} },
4326
14
        {&hf_mq_conn_retconn_tag, {"retconntag", "mq.fcno.retconntag", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN Retry Connection Tag", HFILL}},
4327
14
        {&hf_mq_conn_unknowbyt, {"unknowbyt.", "mq.fcno.unknowbyt", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN unknown bytes", HFILL}},
4328
14
        {&hf_mq_conn_unknowstr, {"unknowstr.", "mq.fcno.unknowstr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN unknown string", HFILL} },
4329
14
        {&hf_mq_conn_mqmid, {"MqmId.....", "mq.fcno.mqmid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN Mqm ID", HFILL}},
4330
4331
4332
14
        {&hf_mq_inq_nbsel, {"Selector count..", "mq.inq.nbsel", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Selector count", HFILL}},
4333
14
        {&hf_mq_inq_nbint, {"Integer count...", "mq.inq.nbint", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Integer count", HFILL}},
4334
14
        {&hf_mq_inq_charlen, {"Character length", "mq.inq.charlen", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Character length", HFILL}},
4335
14
        {&hf_mq_inq_sel, {"Selector........", "mq.inq.sel", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_selector_xvals, 0x0, "INQ Selector", HFILL}},
4336
14
        {&hf_mq_inq_intvalue, {"Integer value...", "mq.inq.intvalue", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Integer value", HFILL}},
4337
14
        {&hf_mq_inq_charvalues, {"Char values.....", "mq.inq.charvalues", FT_STRING, BASE_NONE, NULL, 0x0, "INQ Character values", HFILL}},
4338
4339
14
        {&hf_mq_spi_verb, {"SPI Verb", "mq.spi.verb", FT_UINT32, BASE_DEC, VALS(mq_spi_verbs_vals), 0x0, NULL, HFILL}},
4340
14
        {&hf_mq_spi_version, {"Version", "mq.spi.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Version", HFILL}},
4341
14
        {&hf_mq_spi_length, {"Max reply size", "mq.spi.replength", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Max reply size", HFILL}},
4342
4343
14
        {&hf_mq_spi_base_StructID, {"SPI Structid", "mq.spib.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4344
14
        {&hf_mq_spi_base_version, {"Version", "mq.spib.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Base Version", HFILL}},
4345
14
        {&hf_mq_spi_base_length, {"Length", "mq.spib.length", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Base Length", HFILL}},
4346
4347
14
        {&hf_mq_spi_spqo_nbverb, {"Number of verbs", "mq.spqo.nbverb", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Number of verbs", HFILL}},
4348
14
        {&hf_mq_spi_spqo_verbid, {"Verb", "mq.spqo.verb", FT_UINT32, BASE_DEC, VALS(mq_spi_verbs_vals), 0x0, "SPI Query Output VerbId", HFILL}},
4349
14
        {&hf_mq_spi_spqo_maxiover, {"Max InOut Version", "mq.spqo.maxiov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max InOut Version", HFILL}},
4350
14
        {&hf_mq_spi_spqo_maxinver, {"Max In Version", "mq.spqo.maxiv", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max In Version", HFILL}},
4351
14
        {&hf_mq_spi_spqo_maxouver, {"Max Out Version", "mq.spqo.maxov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max Out Version", HFILL}},
4352
14
        {&hf_mq_spi_spqo_flags, {"Flags", "mq.spqo.flags", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output flags", HFILL}},
4353
4354
14
        {&hf_mq_spi_spai_mode, {"Mode", "mq.spai.mode", FT_UINT32, BASE_DEC, VALS(mq_spi_activate_vals), 0x0, "SPI Activate Input mode", HFILL}},
4355
14
        {&hf_mq_spi_spai_unknown1, {"Unknown1", "mq.spai.unknown1", FT_STRING, BASE_NONE, NULL, 0x0, "SPI Activate Input unknown1", HFILL}},
4356
14
        {&hf_mq_spi_spai_unknown2, {"Unknown2", "mq.spai.unknown2", FT_STRING, BASE_NONE, NULL, 0x0, "SPI Activate Input unknown2", HFILL}},
4357
14
        {&hf_mq_spi_spai_msgid, {"Message Id", "mq.spai.msgid", FT_STRING, BASE_NONE, NULL, 0x0, "SPI Activate Input message id", HFILL}},
4358
14
        {&hf_mq_spi_spgi_batchsz, {"Batch size", "mq.spgi.batchsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch size", HFILL}},
4359
14
        {&hf_mq_spi_spgi_batchint, {"Batch interval", "mq.spgi.batchint", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch interval", HFILL}},
4360
14
        {&hf_mq_spi_spgi_maxmsgsz, {"Max message size", "mq.spgi.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input max message size", HFILL}},
4361
4362
14
        {&hf_mq_spi_spgo_options, {"Options", "mq.spgo.options", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Output options", HFILL}},
4363
14
        {&hf_mq_spi_spgo_size, {"Size", "mq.spgo.size", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Output size", HFILL}},
4364
14
        {&hf_mq_spi_opt_blank, {"Blank padded", "mq.spi.options.blank", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_BLANK_PADDED, "SPI Options blank padded", HFILL}},
4365
14
        {&hf_mq_spi_opt_syncp, {"Syncpoint", "mq.spi.options.sync", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_SYNCPOINT, "SPI Options syncpoint", HFILL}},
4366
14
        {&hf_mq_spi_opt_deferred, {"Deferred", "mq.spi.options.deferred", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_DEFERRED, "SPI Options deferred", HFILL}},
4367
4368
14
        {&hf_mq_put_length, {"Data length", "mq.put.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PUT Data length", HFILL}},
4369
4370
14
        {&hf_mq_close_options, {"Options", "mq.close.options", FT_UINT32, BASE_HEX, NULL, 0x0, "CLOSE options", HFILL}},
4371
14
        {&hf_mq_close_options_DELETE, {"DELETE", "mq.close.options.Delete", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_DELETE, "CLOSE options DELETE", HFILL}},
4372
14
        {&hf_mq_close_options_DELETE_PURGE, {"DELETE_PURGE", "mq.close.options.DeletePurge", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_DELETE_PURGE, "CLOSE options DELETE_PURGE", HFILL}},
4373
14
        {&hf_mq_close_options_KEEP_SUB, {"KEEPSUB", "mq.close.options.KeepSub", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_KEEP_SUB, "CLOSE options KEEP_SUB", HFILL}},
4374
14
        {&hf_mq_close_options_REMOVE_SUB, {"REMOVE_SUB", "mq.close.options.RemoveSub", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_REMOVE_SUB, "CLOSE options REMOVE_SUB", HFILL}},
4375
14
        {&hf_mq_close_options_QUIESCE, {"QUIESCE", "mq.close.options.Quiesce", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_QUIESCE, "CLOSE options QUIESCE", HFILL}},
4376
4377
14
        {&hf_mq_open_options, {"Options", "mq.open.options", FT_UINT32, BASE_HEX, NULL, 0x0, "OPEN options", HFILL}},
4378
14
        {&hf_mq_open_options_INPUT_AS_Q_DEF, {"INPUT_AS_Q_DEF", "mq.open.options.InputAsQDef", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_INPUT_AS_Q_DEF, "OPEN options INPUT_AS_Q_DEF", HFILL}},
4379
14
        {&hf_mq_open_options_INPUT_SHARED, {"INPUT_SHARED", "mq.open.options.InputShared", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_INPUT_SHARED, "OPEN options INPUT_SHARED", HFILL}},
4380
14
        {&hf_mq_open_options_INPUT_EXCLUSIVE, {"INPUT_EXCLUSIVE", "mq.open.options.InputExclusive", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_INPUT_EXCLUSIVE, "OPEN options INPUT_EXCLUSIVE", HFILL}},
4381
14
        {&hf_mq_open_options_BROWSE, {"BROWSE", "mq.open.options.Browse", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_BROWSE, "OPEN options BROWSE", HFILL}},
4382
14
        {&hf_mq_open_options_OUTPUT, {"OUTPUT", "mq.open.options.Output", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_OUTPUT, "OPEN options OUTPUT", HFILL}},
4383
14
        {&hf_mq_open_options_INQUIRE, {"INQUIRE", "mq.open.options.Inquire", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_INQUIRE, "OPEN options INQUIRE", HFILL}},
4384
14
        {&hf_mq_open_options_SET, {"SET", "mq.open.options.Set", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_SET, "OPEN options SET", HFILL}},
4385
14
        {&hf_mq_open_options_SAVE_ALL_CTX, {"SAVE_ALL_CONTEXT", "mq.open.options.SaveAllContext", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_SAVE_ALL_CONTEXT, "OPEN options SAVE_ALL_CONTEXT", HFILL}},
4386
14
        {&hf_mq_open_options_PASS_IDENT_CTX, {"PASS_IDENTITY_CONTEXT", "mq.open.options.PassIdentityContext", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_PASS_IDENTITY_CONTEXT, "OPEN options PASS_IDENTITY_CONTEXT", HFILL}},
4387
14
        {&hf_mq_open_options_PASS_ALL_CTX, {"PASS_ALL_CONTEXT", "mq.open.options.PassAllContext", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_PASS_ALL_CONTEXT, "OPEN options PASS_ALL_CONTEXT", HFILL}},
4388
14
        {&hf_mq_open_options_SET_IDENT_CTX, {"SET_IDENTITY_CONTEXT", "mq.open.options.SetIdentityContext", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_SET_IDENTITY_CONTEXT, "OPEN options SET_IDENTITY_CONTEXT", HFILL}},
4389
14
        {&hf_mq_open_options_SET_ALL_CONTEXT, {"SET_ALL_CONTEXT", "mq.open.options.SetAllContext", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_SET_ALL_CONTEXT, "OPEN options SET_ALL_CONTEXT", HFILL}},
4390
14
        {&hf_mq_open_options_ALT_USER_AUTH, {"ALTERNATE_USER_AUTHORITY", "mq.open.options.AlternateUserAuthority", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_ALTERNATE_USER_AUTHORITY, "OPEN options ALTERNATE_USER_AUTHORITY", HFILL}},
4391
14
        {&hf_mq_open_options_FAIL_IF_QUIESC, {"FAIL_IF_QUIESCING", "mq.open.options.FailIfQuiescing", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_FAIL_IF_QUIESCING, "OPEN options FAIL_IF_QUIESCING", HFILL}},
4392
14
        {&hf_mq_open_options_BIND_ON_OPEN, {"BIND_ON_OPEN", "mq.open.options.BindOnOpen", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_BIND_ON_OPEN, "OPEN options BIND_ON_OPEN", HFILL}},
4393
14
        {&hf_mq_open_options_BIND_NOT_FIXED, {"BIND_NOT_FIXED", "mq.open.options.BindNotFixed", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_BIND_NOT_FIXED, "OPEN options BIND_NOT_FIXED", HFILL}},
4394
14
        {&hf_mq_open_options_RESOLVE_NAMES, {"RESOLVE_NAMES", "mq.open.options.ResolveNames", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_RESOLVE_NAMES, "OPEN options RESOLVE_NAMES", HFILL}},
4395
14
        {&hf_mq_open_options_CO_OP, {"CO_OP", "mq.open.options.CoOp", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_CO_OP, "OPEN options CO_OP", HFILL}},
4396
14
        {&hf_mq_open_options_RESOLVE_LOCAL_Q, {"RESOLVE_LOCAL_Q", "mq.open.options.ResolveLocalQueueOrTopic", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_RESOLVE_LOCAL_Q, "OPEN options RESOLVE_LOCAL_Q", HFILL}},
4397
14
        {&hf_mq_open_options_NO_READ_AHEAD, {"NO_READ_AHEAD", "mq.open.options.NoReadAhead", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_NO_READ_AHEAD, "OPEN options NO_READ_AHEAD", HFILL}},
4398
14
        {&hf_mq_open_options_READ_AHEAD, {"READ_AHEAD", "mq.open.options.ReadAhead", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_READ_AHEAD, "OPEN options READ_AHEAD", HFILL}},
4399
14
        {&hf_mq_open_options_NO_MULTICAST, {"NO_MULTICAST", "mq.open.options.NoMulticast", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_NO_MULTICAST, "OPEN options NO_MULTICAST", HFILL}},
4400
14
        {&hf_mq_open_options_BIND_ON_GROUP, {"BIND_ON_GROUP", "mq.open.options.BindOnGroup", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_BIND_ON_GROUP, "OPEN options BIND_ON_GROUP", HFILL}},
4401
4402
14
        {&hf_mq_fopa_StructID, {"StructId.......", "mq.fopa.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4403
14
        {&hf_mq_fopa_version, {"Version........", "mq.fopa.version", FT_UINT32, BASE_DEC, NULL, 0x0, "FOPA Version", HFILL}},
4404
14
        {&hf_mq_fopa_length, {"Length.........", "mq.fopa.length", FT_UINT32, BASE_DEC, NULL, 0x0, "FOPA Length", HFILL}},
4405
14
        {&hf_mq_fopa_DefPersistence, {"DefPersistence.", "mq.fopa.defpersistence", FT_INT32, BASE_DEC, VALS(mq_MQPER_vals), 0x0, "FOPA DefPersistence", HFILL}},
4406
14
        {&hf_mq_fopa_DefPutRespType, {"DefPutRespType.", "mq.fopa.defputresponsetype", FT_INT32, BASE_DEC, VALS(mq_MQPRT_vals), 0x0, "FOPA DefPutRespType", HFILL}},
4407
14
        {&hf_mq_fopa_DefReadAhead, {"DefReadAhead...", "mq.fopa.defreadahaed", FT_INT32, BASE_DEC, VALS(mq_MQREADA_vals), 0x0, "FOPA DefReadAhead", HFILL}},
4408
14
        {&hf_mq_fopa_PropertyControl, {"PropertyControl", "mq.fopa.propertycontrol", FT_INT32, BASE_DEC, VALS(mq_MQPROP_vals), 0x0, "FOPA PropertyControl", HFILL}},
4409
14
        {&hf_mq_fopa_Unknown, {"Unknown........", "mq.fopa.unknown", FT_BYTES, BASE_NONE, NULL, 0x0, "FOPA Unknown", HFILL}},
4410
4411
14
        {&hf_mq_fcmi_StructID, {"StructId.......", "mq.fcmi.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4412
14
        {&hf_mq_fcmi_unknown, {"Unknown........", "mq.fcmi.unknown", FT_UINT32, BASE_DEC, NULL, 0x0, "FCMI Unknown", HFILL}},
4413
4414
14
        {&hf_mq_msgreq_version, {"version..", "mq.msgreq.version", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ version", HFILL}},
4415
14
        {&hf_mq_msgreq_handle, {"handle...", "mq.msgreq.handle", FT_UINT32, BASE_HEX, NULL, 0x0, "MSGREQ handle", HFILL}},
4416
14
        {&hf_mq_msgreq_RecvBytes, {"RecvBytes", "mq.msgreq.unknown1", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Received Bytes", HFILL}},
4417
14
        {&hf_mq_msgreq_RqstBytes, {"RqstBytes", "mq.msgreq.rqstbytes", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Requested Bytes", HFILL}},
4418
14
        {&hf_mq_msgreq_MaxMsgLen, {"MaxMsgLen", "mq.msgreq.maxmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Maximum Msg Length", HFILL}},
4419
14
        {&hf_mq_msgreq_WaitIntrv, {"WaitIntrv", "mq.msgreq.waitintrv", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Wait Interval", HFILL}},
4420
14
        {&hf_mq_msgreq_QueStatus, {"QueStatus", "mq.msgreq.questatus", FT_UINT32, BASE_HEX, NULL, 0x0, "MSGREQ Queue Status", HFILL}},
4421
14
        {&hf_mq_msgreq_RqstFlags, {"RqstFlags", "mq.msgreq.rqstflags", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Request Flags", HFILL}},
4422
14
        {&hf_mq_msgreq_flags_selection, {"REQ_MSG_SELECTION", "mq.msgreq.rqstflags.SELECTION", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_REQUEST_MSG_SELECTION, "Request Message flag SELECTION", HFILL}},
4423
14
        {&hf_mq_msgreq_flags_F00000008, {"REQ_MSG_F00000008", "mq.msgreq.rqstflags.F00000008", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_REQUEST_MSG_F00000008, "Request Message flag F00000008", HFILL}},
4424
14
        {&hf_mq_msgreq_flags_F00000004, {"REQ_MSG_F00000004", "mq.msgreq.rqstflags.F00000004", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_REQUEST_MSG_F00000004, "Request Message flag F00000004", HFILL}},
4425
14
        {&hf_mq_msgreq_flags_F00000002, {"REQ_MSG_F00000002", "mq.msgreq.rqstflags.F00000002", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_REQUEST_MSG_F00000002, "Request Message flag F00000002", HFILL}},
4426
4427
14
        {&hf_mq_msgreq_GlbMsgIdx, {"GlbMsgIdx", "mq.msgreq.glbmsgidx", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Global Message Index", HFILL}},
4428
14
        {&hf_mq_msgreq_SelectIdx, {"SelectIdx", "mq.msgreq.selectIdx", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Selection Index", HFILL}},
4429
14
        {&hf_mq_msgreq_MQMDVers, {"MQMDVers.", "mq.msgreq.mqmdvers", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGREQ MQMD Version", HFILL}},
4430
14
        {&hf_mq_msgreq_ccsid, {"CCSID....", "mq.msgreq.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "MSGREQ ccsid", HFILL}},
4431
14
        {&hf_mq_msgreq_encoding, {"Encoding.", "mq.msgreq.encoding", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ encoding", HFILL}},
4432
14
        {&hf_mq_msgreq_MsgSeqNum, {"MsgSeqNum", "mq.msgreq.msgseqnum", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Message Sequence Number", HFILL}},
4433
14
        {&hf_mq_msgreq_offset, {"Offset...", "mq.msgreq.offset", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Offset", HFILL}},
4434
14
        {&hf_mq_msgreq_mtchMsgId, {"mtchMsgId", "mq.msgreq.mtchMsgId", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGREQ match MsgID", HFILL}},
4435
14
        {&hf_mq_msgreq_mtchCorId, {"mtchCorID", "mq.msgreq.mtchcorid", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGREQ match Correlation Id", HFILL}},
4436
14
        {&hf_mq_msgreq_mtchGrpid, {"mtchGrpID", "mq.msgreq.mtchgrpid", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGREQ match Group ID", HFILL}},
4437
14
        {&hf_mq_msgreq_mtchMsgTk, {"mtchMsgTk", "mq.msgreq.mtchmsgtk", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGREQ match Message Token", HFILL}},
4438
4439
14
        {&hf_mq_msgasy_version, {"version..", "mq.msgasy.version", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC version", HFILL}},
4440
14
        {&hf_mq_msgasy_handle, {"handle...", "mq.msgasy.handle", FT_UINT32, BASE_HEX, NULL, 0x0, "MSGASYNC handle", HFILL}},
4441
14
        {&hf_mq_msgasy_MsgIndex, {"MsgIndex.", "mq.msgasy.msgindex", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Message Index", HFILL}},
4442
14
        {&hf_mq_msgasy_GlbMsgIdx, {"GlbMsgIdx", "mq.msgasy.glbmsgidx", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Global Message Index", HFILL}},
4443
14
        {&hf_mq_msgasy_SegLength, {"SegLength", "mq.msgasy.seglength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Length", HFILL}},
4444
14
        {&hf_mq_msgasy_SegmIndex, {"SegmIndex", "mq.msgasy.segmindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Index", HFILL}},
4445
14
        {&hf_mq_msgasy_SeleIndex, {"SeleIndex", "mq.msgasy.seleindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Selection Index", HFILL}},
4446
14
        {&hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_MQRC_xvals, 0x0, "MSGASYNC Reason Code", HFILL}},
4447
14
        {&hf_mq_msgasy_ActMsgLen, {"ActMsgLen", "mq.msgasy.actmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Actual Message Length", HFILL}},
4448
14
        {&hf_mq_msgasy_TotMsgLen, {"TotMsgLen", "mq.msgasy.totmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Total Message Length", HFILL}},
4449
14
        {&hf_mq_msgasy_MsgToken, {"MsgToken.", "mq.msgasy.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGASYNC Mesasage Token", HFILL}},
4450
14
        {&hf_mq_msgasy_Status, {"status...", "mq.msgasy.status", FT_UINT16, BASE_HEX, NULL, 0x0, "MSGASYNC Status", HFILL}},
4451
14
        {&hf_mq_msgasy_resolQNLn, {"resolQNLn", "mq.msgasy.resolqnln", FT_UINT8, BASE_DEC, NULL, 0x0, "MSGASYNC Resolved Queue Name Length", HFILL}},
4452
14
        {&hf_mq_msgasy_resolQNme, {"resolQNme", "mq.msgasy.resolqnme", FT_STRING, BASE_NONE, NULL, 0x0, "MSGASYNC Resolved Queue Name", HFILL}},
4453
14
        {&hf_mq_msgasy_padding, {"Padding..", "mq.msgasy.padding", FT_BYTES, BASE_NONE, NULL, 0x0, "MSGASYNC Padding", HFILL}},
4454
4455
14
        {&hf_mq_notif_vers, {"version.", "mq.notif.vers", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "NOTIFICATION version", HFILL}},
4456
14
        {&hf_mq_notif_handle, {"handle..", "mq.notif.handle", FT_UINT32, BASE_HEX, NULL, 0x0, "NOTIFICATION handle", HFILL}},
4457
14
        {&hf_mq_notif_code, {"code....", "mq.notif.code", FT_UINT32, BASE_HEX_DEC, VALS(mq_notifcode_vals), 0x0, "NOTIFICATION code", HFILL}},
4458
14
        {&hf_mq_notif_value, {"value...", "mq.notif.value", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "NOTIFICATION MQRC", HFILL}},
4459
4460
14
        {&hf_mq_ping_length, {"Length", "mq.ping.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PING length", HFILL}},
4461
14
        {&hf_mq_ping_buffer, {"Buffer", "mq.ping.buffer", FT_BYTES, BASE_NONE, NULL, 0x0, "PING buffer", HFILL}},
4462
4463
14
        {&hf_mq_reset_length, {"Length", "mq.reset.length", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET length", HFILL}},
4464
14
        {&hf_mq_reset_seqnum, {"SeqNum", "mq.reset.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET sequence number", HFILL}},
4465
4466
14
        {&hf_mq_status_length, {"Length", "mq.status.length", FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS length", HFILL}},
4467
14
        {&hf_mq_status_code, {"Code..", "mq.status.code", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_status_xvals, 0x0, "STATUS code", HFILL}},
4468
14
        {&hf_mq_status_value, {"Value.", "mq.status.value", FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS value", HFILL}},
4469
4470
14
        {&hf_mq_od_StructID, {"StructID.........", "mq.od.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4471
14
        {&hf_mq_od_version, {"version..........", "mq.od.version", FT_UINT32, BASE_DEC, NULL, 0x0, "OD version", HFILL}},
4472
14
        {&hf_mq_od_objecttype, {"ObjType..........", "mq.od.objtype", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_MQOT_xvals, 0x0, "OD object type", HFILL}},
4473
14
        {&hf_mq_od_objectname, {"ObjName..........", "mq.od.objname", FT_STRING, BASE_NONE, NULL, 0x0, "OD object name", HFILL}},
4474
14
        {&hf_mq_od_objqmgrname, {"ObjQMgr..........", "mq.od.objqmgrname", FT_STRING, BASE_NONE, NULL, 0x0, "OD object queue manager name", HFILL}},
4475
14
        {&hf_mq_od_dynqname, {"DynQName.........", "mq.od.dynqname", FT_STRING, BASE_NONE, NULL, 0x0, "OD dynamic queue name", HFILL}},
4476
14
        {&hf_mq_od_altuserid, {"AltUserID........", "mq.od.altuserid", FT_STRING, BASE_NONE, NULL, 0x0, "OD alternate userid", HFILL}},
4477
14
        {&hf_mq_od_recspresent, {"NbrRecord........", "mq.od.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "OD number of records", HFILL}},
4478
14
        {&hf_mq_od_knowndstcnt, {"Known Dest Count.", "mq.od.kdestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD known destination count", HFILL}},
4479
14
        {&hf_mq_od_unknowdstcnt, {"Unknown Dest Cnt.", "mq.od.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD unknown destination count", HFILL}},
4480
14
        {&hf_mq_od_invaldstcnt, {"Invalid Dest Cnt.", "mq.od.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD invalid destination count", HFILL}},
4481
14
        {&hf_mq_od_objrecofs, {"Offset of 1st OR.", "mq.od.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first OR", HFILL}},
4482
14
        {&hf_mq_od_resprecofs, {"Offset of 1st RR.", "mq.od.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first RR", HFILL}},
4483
14
        {&hf_mq_od_objrecptr, {"Addr   of 1st OR.", "mq.od.addror", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first OR", HFILL}},
4484
14
        {&hf_mq_od_resprecptr, {"Addr   of 1st RR.", "mq.od.addrrr", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first RR", HFILL}},
4485
14
        {&hf_mq_od_altsecurid, {"Alt security id..", "mq.od.altsecid", FT_STRING, BASE_NONE, NULL, 0x0, "OD alternate security id", HFILL}},
4486
14
        {&hf_mq_od_resolvqname, {"Resolved Q Name..", "mq.od.resolvq", FT_STRING, BASE_NONE, NULL, 0x0, "OD resolved queue name", HFILL}},
4487
14
        {&hf_mq_od_resolvqmgrnm, {"Resolved QMgrName", "mq.od.resolvqmgr", FT_STRING, BASE_NONE, NULL, 0x0, "OD resolved queue manager name", HFILL}},
4488
14
        {&hf_mq_od_resolvobjtyp, {"Resolv Obj Type..", "mq.od.resolvedobjtype", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_MQOT_xvals, 0x0, "OD resolved object type", HFILL}},
4489
4490
14
        {&hf_mq_or_objname, {"Object name...", "mq.or.objname", FT_STRING, BASE_NONE, NULL, 0x0, "OR object name", HFILL}},
4491
14
        {&hf_mq_or_objqmgrname, {"Object QMgr Nm", "mq.or.objqmgrname", FT_STRING, BASE_NONE, NULL, 0x0, "OR object queue manager name", HFILL}},
4492
4493
14
        {&hf_mq_rr_compcode, {"Comp Code", "mq.rr.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR completion code", HFILL}},
4494
14
        {&hf_mq_rr_reascode, {"Reas Code", "mq.rr.reasoncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR reason code", HFILL}},
4495
4496
14
        {&hf_mq_pmr_msgid, {"Message Id", "mq.pmr.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR Message Id", HFILL}},
4497
14
        {&hf_mq_pmr_correlid, {"Correlation Id", "mq.pmr.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR Correlation Id", HFILL}},
4498
14
        {&hf_mq_pmr_groupid, {"GroupId", "mq.pmr.groupid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR GroupId", HFILL}},
4499
14
        {&hf_mq_pmr_feedback, {"Feedback", "mq.pmr.feedback", FT_UINT32, BASE_DEC, NULL, 0x0, "PMR Feedback", HFILL}},
4500
14
        {&hf_mq_pmr_acttoken, {"Accounting token", "mq.pmr.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR accounting token", HFILL}},
4501
4502
14
        {&hf_mq_md_StructID, {"StructID.", "mq.md.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4503
14
        {&hf_mq_md_version, {"Version..", "mq.md.version", FT_UINT32, BASE_DEC, NULL, 0x0, "MD version", HFILL}},
4504
14
        {&hf_mq_md_report, {"Report...", "mq.md.report", FT_UINT32, BASE_DEC, NULL, 0x0, "MD report", HFILL}},
4505
14
        {&hf_mq_md_msgtype, {"Msg Type.", "mq.md.msgtype", FT_UINT32, BASE_DEC, VALS(mq_MQMT_vals), 0x0, "MD message type", HFILL}},
4506
14
        {&hf_mq_md_expiry, {"Expiry  .", "mq.md.expiry", FT_INT32, BASE_DEC, NULL, 0x0, "MD expiry", HFILL}},
4507
14
        {&hf_mq_md_feedback, {"Feedback.", "mq.md.feedback", FT_UINT32, BASE_DEC, NULL, 0x0, "MD feedback", HFILL}},
4508
14
        {&hf_mq_md_encoding, {"Encoding.", "mq.md.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "MD encoding", HFILL}},
4509
14
        {&hf_mq_md_ccsid, {"CCSID....", "mq.md.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "MD character set", HFILL}},
4510
14
        {&hf_mq_md_format, {"Format...", "mq.md.format", FT_STRING, BASE_NONE, NULL, 0x0, "MD format", HFILL}},
4511
14
        {&hf_mq_md_priority, {"Priority.", "mq.md.priority", FT_INT32, BASE_DEC, NULL, 0x0, "MD priority", HFILL}},
4512
14
        {&hf_mq_md_persistence, {"Persist..", "mq.md.persistence", FT_UINT32, BASE_DEC, VALS(mq_MQPER_vals), 0x0, "MD persistence", HFILL}},
4513
14
        {&hf_mq_md_msgid, {"Msg ID...", "mq.md.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Message Id", HFILL}},
4514
14
        {&hf_mq_md_correlid, {"CorrelID.", "mq.md.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Correlation Id", HFILL}},
4515
14
        {&hf_mq_md_backoutcnt, {"BackoCnt.", "mq.md.backoutcnt", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Backout count", HFILL}},
4516
14
        {&hf_mq_md_replytoq, {"ReplyToQ.", "mq.md.replytoq", FT_STRING, BASE_NONE, NULL, 0x0, "MD ReplyTo queue", HFILL}},
4517
14
        {&hf_mq_md_replytoqmgr, {"RepToQMgr", "mq.md.replytoqmgr", FT_STRING, BASE_NONE, NULL, 0x0, "MD ReplyTo queue manager", HFILL}},
4518
14
        {&hf_mq_md_userid, {"UserId...", "mq.md.userid", FT_STRING, BASE_NONE, NULL, 0x0, "MD UserId", HFILL}},
4519
14
        {&hf_mq_md_acttoken, {"AccntTok.", "mq.md.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "MD accounting token", HFILL}},
4520
14
        {&hf_mq_md_appliddata, {"AppIdData", "mq.md.appldata", FT_STRING, BASE_NONE, NULL, 0x0, "MD Put applicationId data", HFILL}},
4521
14
        {&hf_mq_md_putappltype, {"PutAppTyp", "mq.md.appltype", FT_INT32, BASE_DEC | BASE_EXT_STRING, &mq_MQAT_xvals, 0x0, "MD Put application type", HFILL}},
4522
14
        {&hf_mq_md_putapplname, {"PutAppNme", "mq.md.applname", FT_STRING, BASE_NONE, NULL, 0x0, "MD Put application name", HFILL}},
4523
14
        {&hf_mq_md_putdate, {"PutDatGMT", "mq.md.date", FT_STRING, BASE_NONE, NULL, 0x0, "MD Put date", HFILL}},
4524
14
        {&hf_mq_md_puttime, {"PutTimGMT", "mq.md.time", FT_STRING, BASE_NONE, NULL, 0x0, "MD Put time", HFILL}},
4525
14
        {&hf_mq_md_apporigdata, {"AppOriDat", "mq.md.origdata", FT_STRING, BASE_NONE, NULL, 0x0, "MD Application original data", HFILL}},
4526
14
        {&hf_mq_md_groupid, {"GroupId..", "mq.md.groupid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD GroupId", HFILL}},
4527
14
        {&hf_mq_md_msgseqnumber, {"MsgSeqNum", "mq.md.msgseqnumber", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Message sequence number", HFILL}},
4528
14
        {&hf_mq_md_offset, {"Offset...", "mq.md.offset", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Offset", HFILL}},
4529
14
        {&hf_mq_md_msgflags, {"Msg flags", "mq.md.msgflags", FT_UINT32, BASE_HEX, NULL, 0x0, "MD Message flags", HFILL}},
4530
14
        {&hf_mq_md_origlen, {"Orig len.", "mq.md.origlength", FT_INT32, BASE_DEC, NULL, 0x0, "MD Original length", HFILL}},
4531
4532
14
        {&hf_mq_dlh_StructID, {"StructID.", "mq.dlh.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4533
14
        {&hf_mq_dlh_version, {"Version..", "mq.dlh.version", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH version", HFILL}},
4534
14
        {&hf_mq_dlh_reason, {"Reason...", "mq.dlh.reason", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH reason", HFILL}},
4535
14
        {&hf_mq_dlh_destq, {"Dest Q...", "mq.dlh.destq", FT_STRING, BASE_NONE, NULL, 0x0, "DLH destination queue", HFILL}},
4536
14
        {&hf_mq_dlh_destqmgr, {"DestQMgr.", "mq.dlh.destqmgr", FT_STRING, BASE_NONE, NULL, 0x0, "DLH destination queue manager", HFILL}},
4537
14
        {&hf_mq_dlh_encoding, {"Encoding.", "mq.dlh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH encoding", HFILL}},
4538
14
        {&hf_mq_dlh_ccsid, {"CCSID....", "mq.dlh.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "DLH character set", HFILL}},
4539
14
        {&hf_mq_dlh_format, {"Format...", "mq.dlh.format", FT_STRING, BASE_NONE, NULL, 0x0, "DLH format", HFILL}},
4540
14
        {&hf_mq_dlh_putappltype, {"PutAppTyp", "mq.dlh.putappltype", FT_INT32, BASE_DEC | BASE_EXT_STRING, &mq_MQAT_xvals, 0x0, "DLH put application type", HFILL}},
4541
14
        {&hf_mq_dlh_putapplname, {"PutAppNme", "mq.dlh.putapplname", FT_STRING, BASE_NONE, NULL, 0x0, "DLH put application name", HFILL}},
4542
14
        {&hf_mq_dlh_putdate, {"PutDatGMT", "mq.dlh.putdate", FT_STRING, BASE_NONE, NULL, 0x0, "DLH put date", HFILL}},
4543
14
        {&hf_mq_dlh_puttime, {"PutTimGMT", "mq.dlh.puttime", FT_STRING, BASE_NONE, NULL, 0x0, "DLH put time", HFILL}},
4544
4545
14
        {&hf_mq_gmo_StructID, {"StructID.", "mq.gmo.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4546
14
        {&hf_mq_gmo_version, {"Version..", "mq.gmo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "GMO version", HFILL}},
4547
14
        {&hf_mq_gmo_options, {"GetMsgOpt", "mq.gmo.getmsgopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO Get Message Options", HFILL}},
4548
4549
14
        {&hf_mq_gmo_options_PROPERTIES_COMPATIBILITY, {"PROPERTIES_COMPATIBILITY", "mq.gmo.options.PROPERTIES_COMPATIBILITY", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_PROPERTIES_COMPATIBILITY, "GMO options PROPERTIES_COMPATIBILITY", HFILL}},
4550
14
        {&hf_mq_gmo_options_PROPERTIES_IN_HANDLE, {"PROPERTIES_IN_HANDLE", "mq.gmo.options.PROPERTIES_IN_HANDLE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_PROPERTIES_IN_HANDLE, "GMO options PROPERTIES_IN_HANDLE", HFILL}},
4551
14
        {&hf_mq_gmo_options_NO_PROPERTIES, {"NO_PROPERTIES", "mq.gmo.options.NO_PROPERTIES", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_NO_PROPERTIES, "GMO options NO_PROPERTIES", HFILL}},
4552
14
        {&hf_mq_gmo_options_PROPERTIES_FORCE_MQRFH2, {"PROPERTIES_FORCE_MQRFH2", "mq.gmo.options.PROPERTIES_FORCE_MQRFH2", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_PROPERTIES_FORCE_MQRFH2, "GMO options PROPERTIES_FORCE_MQRFH2", HFILL}},
4553
14
        {&hf_mq_gmo_options_UNMARKED_BROWSE_MSG, {"UNMARKED_BROWSE_MSG", "mq.gmo.options.UNMARKED_BROWSE_MSG", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_UNMARKED_BROWSE_MSG, "GMO options UNMARKED_BROWSE_MSG", HFILL}},
4554
14
        {&hf_mq_gmo_options_UNMARK_BROWSE_HANDLE, {"UNMARK_BROWSE_HANDLE", "mq.gmo.options.UNMARK_BROWSE_HANDLE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_UNMARK_BROWSE_HANDLE, "GMO options UNMARK_BROWSE_HANDLE", HFILL}},
4555
14
        {&hf_mq_gmo_options_UNMARK_BROWSE_CO_OP, {"UNMARK_BROWSE_CO_OP", "mq.gmo.options.UNMARK_BROWSE_CO_OP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_UNMARK_BROWSE_CO_OP, "GMO options UNMARK_BROWSE_CO_OP", HFILL}},
4556
14
        {&hf_mq_gmo_options_MARK_BROWSE_CO_OP, {"MARK_BROWSE_CO_OP", "mq.gmo.options.MARK_BROWSE_CO_OP", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_MARK_BROWSE_CO_OP, "GMO options MARK_BROWSE_CO_OP", HFILL}},
4557
14
        {&hf_mq_gmo_options_MARK_BROWSE_HANDLE, {"MARK_BROWSE_HANDLE", "mq.gmo.options.MARK_BROWSE_HANDLE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_MARK_BROWSE_HANDLE, "GMO options MARK_BROWSE_HANDLE", HFILL}},
4558
14
        {&hf_mq_gmo_options_ALL_SEGMENTS_AVAILABLE, {"ALL_SEGMENTS_AVAILABLE", "mq.gmo.options.ALL_SEGMENTS_AVAILABLE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_ALL_SEGMENTS_AVAILABLE, "GMO options ALL_SEGMENTS_AVAILABLE", HFILL}},
4559
14
        {&hf_mq_gmo_options_ALL_MSGS_AVAILABLE, {"ALL_MSGS_AVAILABLE", "mq.gmo.options.ALL_MSGS_AVAILABLE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_ALL_MSGS_AVAILABLE, "GMO options ALL_MSGS_AVAILABLE", HFILL}},
4560
14
        {&hf_mq_gmo_options_COMPLETE_MSG, {"COMPLETE_MSG", "mq.gmo.options.COMPLETE_MSG", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_COMPLETE_MSG, "GMO options COMPLETE_MSG", HFILL}},
4561
14
        {&hf_mq_gmo_options_LOGICAL_ORDER, {"LOGICAL_ORDER", "mq.gmo.options.LOGICAL_ORDER", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_LOGICAL_ORDER, "GMO options LOGICAL_ORDER", HFILL}},
4562
14
        {&hf_mq_gmo_options_CONVERT, {"CONVERT", "mq.gmo.options.CONVERT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_CONVERT, "GMO options CONVERT", HFILL}},
4563
14
        {&hf_mq_gmo_options_FAIL_IF_QUIESCING, {"FAIL_IF_QUIESCING", "mq.gmo.options.FAIL_IF_QUIESCING", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_FAIL_IF_QUIESCING, "GMO options FAIL_IF_QUIESCING", HFILL}},
4564
14
        {&hf_mq_gmo_options_SYNCPOINT_IF_PERSISTENT, {"SYNCPOINT_IF_PERSISTENT", "mq.gmo.options.SYNCPOINT_IF_PERSISTENT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_SYNCPOINT_IF_PERSISTENT, "GMO options SYNCPOINT_IF_PERSISTENT", HFILL}},
4565
14
        {&hf_mq_gmo_options_BROWSE_MSG_UNDER_CURSOR, {"BROWSE_MSG_UNDER_CURSOR", "mq.gmo.options.BROWSE_MSG_UNDER_CURSOR", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_BROWSE_MSG_UNDER_CURSOR, "GMO options BROWSE_MSG_UNDER_CURSOR", HFILL}},
4566
14
        {&hf_mq_gmo_options_UNLOCK, {"UNLOCK", "mq.gmo.options.UNLOCK", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_UNLOCK, "GMO options UNLOCK", HFILL}},
4567
14
        {&hf_mq_gmo_options_LOCK, {"LOCK", "mq.gmo.options.LOCK", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_LOCK, "GMO options LOCK", HFILL}},
4568
14
        {&hf_mq_gmo_options_MSG_UNDER_CURSOR, {"MSG_UNDER_CURSOR", "mq.gmo.options.MSG_UNDER_CURSOR", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_MSG_UNDER_CURSOR, "GMO options MSG_UNDER_CURSOR", HFILL}},
4569
14
        {&hf_mq_gmo_options_MARK_SKIP_BACKOUT, {"MARK_SKIP_BACKOUT", "mq.gmo.options.MARK_SKIP_BACKOUT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_MARK_SKIP_BACKOUT, "GMO options MARK_SKIP_BACKOUT", HFILL}},
4570
14
        {&hf_mq_gmo_options_ACCEPT_TRUNCATED_MSG, {"ACCEPT_TRUNCATED_MSG", "mq.gmo.options.ACCEPT_TRUNCATED_MSG", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_ACCEPT_TRUNCATED_MSG, "GMO options ACCEPT_TRUNCATED_MSG", HFILL}},
4571
14
        {&hf_mq_gmo_options_BROWSE_NEXT, {"BROWSE_NEXT", "mq.gmo.options.BROWSE_NEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_BROWSE_NEXT, "GMO options BROWSE_NEXT", HFILL}},
4572
14
        {&hf_mq_gmo_options_BROWSE_FIRST, {"BROWSE_FIRST", "mq.gmo.options.BROWSE_FIRST", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_BROWSE_FIRST, "GMO options BROWSE_FIRST", HFILL}},
4573
14
        {&hf_mq_gmo_options_SET_SIGNAL, {"SET_SIGNAL", "mq.gmo.options.SET_SIGNAL", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_SET_SIGNAL, "GMO options SET_SIGNAL", HFILL}},
4574
14
        {&hf_mq_gmo_options_NO_SYNCPOINT, {"NO_SYNCPOINT", "mq.gmo.options.NO_SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_NO_SYNCPOINT, "GMO options NO_SYNCPOINT", HFILL}},
4575
14
        {&hf_mq_gmo_options_SYNCPOINT, {"SYNCPOINT", "mq.gmo.options.SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_SYNCPOINT, "GMO options SYNCPOINT", HFILL}},
4576
14
        {&hf_mq_gmo_options_WAIT, {"WAIT", "mq.gmo.options.WAIT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_WAIT, "GMO options WAIT", HFILL}},
4577
4578
14
        {&hf_mq_gmo_waitinterval, {"WaitIntv.", "mq.gmo.waitint", FT_INT32, BASE_DEC, NULL, 0x0, "GMO wait interval", HFILL}},
4579
14
        {&hf_mq_gmo_signal1, {"Signal 1.", "mq.gmo.signal1", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO signal 1", HFILL}},
4580
14
        {&hf_mq_gmo_signal2, {"Signal 2.", "mq.gmo.signal2", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO signal 2", HFILL}},
4581
14
        {&hf_mq_gmo_resolvqname, {"ResQName.", "mq.gmo.resolvq", FT_STRING, BASE_NONE, NULL, 0x0, "GMO resolved queue name", HFILL}},
4582
14
        {&hf_mq_gmo_matchoptions, {"MatchOpt.", "mq.gmo.matchopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO match options", HFILL}},
4583
4584
14
        {&hf_mq_gmo_matchoptions_MATCH_MSG_TOKEN, {"MATCH_MSG_TOKEN", "mq.gmo.matchoptions.MATCH_MSG_TOKEN", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_MSG_TOKEN, "GMO matchoptions MATCH_MSG_TOKEN", HFILL}},
4585
14
        {&hf_mq_gmo_matchoptions_MATCH_OFFSET, {"MATCH_OFFSET", "mq.gmo.matchoptions.MATCH_OFFSET", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_OFFSET, "GMO matchoptions MATCH_OFFSET", HFILL}},
4586
14
        {&hf_mq_gmo_matchoptions_MATCH_MSG_SEQ_NUMBER, {"MATCH_MSG_SEQ_NUMBER", "mq.gmo.matchoptions.MATCH_MSG_SEQ_NUMBER", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_MSG_SEQ_NUMBER, "GMO matchoptions MATCH_MSG_SEQ_NUMBER", HFILL}},
4587
14
        {&hf_mq_gmo_matchoptions_MATCH_GROUP_ID, {"MATCH_GROUP_ID", "mq.gmo.matchoptions.MATCH_GROUP_ID", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_GROUP_ID, "GMO matchoptions MATCH_GROUP_ID", HFILL}},
4588
14
        {&hf_mq_gmo_matchoptions_MATCH_CORREL_ID, {"MATCH_CORREL_ID", "mq.gmo.matchoptions.MATCH_CORREL_ID", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_CORREL_ID, "GMO matchoptions MATCH_CORREL_ID", HFILL}},
4589
14
        {&hf_mq_gmo_matchoptions_MATCH_MSG_ID, {"MATCH_MSG_ID", "mq.gmo.matchoptions.MATCH_MSG_ID", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQMO_MATCH_MSG_ID, "GMO matchoptions MATCH_MSG_ID", HFILL}},
4590
4591
14
        {&hf_mq_gmo_groupstatus, {"GrpStatus", "mq.gmo.grpstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO group status", HFILL}},
4592
14
        {&hf_mq_gmo_segmstatus, {"SegStatus", "mq.gmo.sgmtstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segment status", HFILL}},
4593
14
        {&hf_mq_gmo_segmentation, {"Segmentat", "mq.gmo.segmentation", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segmentation", HFILL}},
4594
14
        {&hf_mq_gmo_reserved, {"Reserved.", "mq.gmo.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO reserved", HFILL}},
4595
14
        {&hf_mq_gmo_msgtoken, {"MsgToken.", "mq.gmo.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "GMO message token", HFILL}},
4596
14
        {&hf_mq_gmo_returnedlen, {"RtnLength", "mq.gmo.retlen", FT_INT32, BASE_DEC, NULL, 0x0, "GMO returned length", HFILL}},
4597
14
        {&hf_mq_gmo_reserved2, {"Reserved2", "mq.gmo.reserved2", FT_INT32, BASE_DEC, NULL, 0x0, "GMO reserved2", HFILL}},
4598
14
        {&hf_mq_gmo_msghandle, {"MsgHandle", "mq.gmo.msghandle", FT_UINT64, BASE_DEC | BASE_HEX, NULL, 0x0, "GMO Message Handle", HFILL}},
4599
4600
14
        {&hf_mq_lpoo_StructID, {"StructID......", "mq.lpoo.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4601
14
        {&hf_mq_lpoo_version, {"version.......", "mq.lpoo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "LPOO version", HFILL}},
4602
14
        {&hf_mq_lpoo_lpiopts, {"lpiopts.......", "mq.lpoo.lpioopts", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Lpi Options", HFILL}},
4603
4604
14
        {&hf_mq_lpoo_lpiopts_SAVE_USER_CTXT, {"SAVE_USER_CTXT", "mq.lpoo.opts.SAVE_USER_CTXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_LPOO_SAVE_USER_CTXT, "LPOO options SAVE_USER_CTXT", HFILL}},
4605
14
        {&hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, {"SAVE_ORIGIN_CTXT", "mq.lpoo.opts.SAVE_ORIGIN_CTXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_LPOO_SAVE_ORIGIN_CTXT, "LPOO options SAVE_ORIGIN_CTXT", HFILL}},
4606
14
        {&hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, {"SAVE_IDENTITY_CTXT", "mq.lpoo.opts.SAVE_IDENTITY_CTXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_LPOO_SAVE_IDENTITY_CTXT, "LPOO options SAVE_IDENTITY_CTXT", HFILL}},
4607
4608
14
        {&hf_mq_lpoo_defpersist, {"DefPersistence", "mq.lpoo.defpersist", FT_INT32, BASE_DEC, VALS(mq_MQPER_vals), 0x0, "LPOO Default Persistence", HFILL}},
4609
14
        {&hf_mq_lpoo_defputresptype, {"DefPutRespType", "mq.lpoo.defputresptype", FT_INT32, BASE_DEC, VALS(mq_MQPRT_vals), 0x0, "LPOO Default Put Response Type", HFILL}},
4610
14
        {&hf_mq_lpoo_defreadahead, {"DefReadAHead..", "mq.lpoo.defreadahead", FT_INT32, BASE_DEC, VALS(mq_MQREADA_vals), 0x0, "LPOO Default Read AHead", HFILL}},
4611
14
        {&hf_mq_lpoo_propertyctl, {"PropertyCtl...", "mq.lpoo.propertyctl", FT_INT32, BASE_DEC, NULL, 0x0, "LPOO Property Control", HFILL}},
4612
14
        {&hf_mq_lpoo_qprotect, {"qprotect......", "mq.lpoo.qprotect", FT_STRING, BASE_NONE, NULL, 0x0, "LPOO queue protection", HFILL}},
4613
14
        {&hf_mq_lpoo_qprotect_val1, {"qprotect_val1.", "mq.lpoo.qprotect.val1", FT_INT32, BASE_DEC, NULL, 0x0, "LPOO queue protection val1", HFILL}},
4614
14
        {&hf_mq_lpoo_qprotect_val2, {"qprotect_val2.", "mq.lpoo.qprotect.val2", FT_INT32, BASE_DEC, NULL, 0x0, "LPOO queue protection val2", HFILL}},
4615
4616
14
        {&hf_mq_pmo_StructID, {"StructID...", "mq.pmo.structid", FT_STRING, BASE_NONE, NULL, 0x0, NULL, HFILL}},
4617
14
        {&hf_mq_pmo_version, {"Version....", "mq.pmo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO version", HFILL}},
4618
14
        {&hf_mq_pmo_options, {"Options....", "mq.pmo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO options", HFILL}},
4619
14
        {&hf_mq_pmo_options_NOT_OWN_SUBS, {"NOT_OWN_SUBS", "mq.pmo.options.NOT_OWN_SUBS", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_NOT_OWN_SUBS, "PMO options NOT_OWN_SUBS", HFILL}},
4620
14
        {&hf_mq_pmo_options_SUPPRESS_REPLYTO, {"SUPPRESS_REPLYTO", "mq.pmo.options.SUPPRESS_REPLYTO", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SUPPRESS_REPLYTO, "PMO options SUPPRESS_REPLYTO", HFILL}},
4621
14
        {&hf_mq_pmo_options_SCOPE_QMGR, {"SCOPE_QMGR", "mq.pmo.options.SCOPE_QMGR", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SCOPE_QMGR, "PMO options SCOPE_QMGR", HFILL}},
4622
14
        {&hf_mq_pmo_options_MD_FOR_OUTPUT_ONLY, {"MD_FOR_OUTPUT_ONLY", "mq.pmo.options.MD_FOR_OUTPUT_ONLY", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_MD_FOR_OUTPUT_ONLY, "PMO options MD_FOR_OUTPUT_ONLY", HFILL}},
4623
14
        {&hf_mq_pmo_options_RETAIN, {"RETAIN", "mq.pmo.options.RETAIN", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_RETAIN, "PMO options RETAIN", HFILL}},
4624
14
        {&hf_mq_pmo_options_WARN_IF_NO_SUBS_MATCHED, {"WARN_IF_NO_SUBS_MATCHED", "mq.pmo.options.WARN_IF_NO_SUBS_MATCHED", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_WARN_IF_NO_SUBS_MATCHED, "PMO options WARN_IF_NO_SUBS_MATCHED", HFILL}},
4625
14
        {&hf_mq_pmo_options_RESOLVE_LOCAL_Q, {"RESOLVE_LOCAL_Q", "mq.pmo.options.RESOLVE_LOCAL_Q", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_RESOLVE_LOCAL_Q, "PMO options RESOLVE_LOCAL_Q", HFILL}},
4626
14
        {&hf_mq_pmo_options_SYNC_RESPONSE, {"SYNC_RESPONSE", "mq.pmo.options.SYNC_RESPONSE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SYNC_RESPONSE, "PMO options SYNC_RESPONSE", HFILL}},
4627
14
        {&hf_mq_pmo_options_ASYNC_RESPONSE, {"ASYNC_RESPONSE", "mq.pmo.options.ASYNC_RESPONSE", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_ASYNC_RESPONSE, "PMO options ASYNC_RESPONSE", HFILL}},
4628
14
        {&hf_mq_pmo_options_LOGICAL_ORDER, {"LOGICAL_ORDER", "mq.pmo.options.LOGICAL_ORDER", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_LOGICAL_ORDER, "PMO options LOGICAL_ORDER", HFILL}},
4629
14
        {&hf_mq_pmo_options_NO_CONTEXT, {"NO_CONTEXT", "mq.pmo.options.NO_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_NO_CONTEXT, "PMO options NO_CONTEXT", HFILL}},
4630
14
        {&hf_mq_pmo_options_FAIL_IF_QUIESCING, {"FAIL_IF_QUIESCING", "mq.pmo.options.FAIL_IF_QUIESCING", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_FAIL_IF_QUIESCING, "PMO options FAIL_IF_QUIESCING", HFILL}},
4631
14
        {&hf_mq_pmo_options_ALTERNATE_USER_AUTHORITY, {"ALTERNATE_USER_AUTHORITY", "mq.pmo.options.ALTERNATE_USER_AUTHORITY", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_ALTERNATE_USER_AUTHORITY, "PMO options ALTERNATE_USER_AUTHORITY", HFILL}},
4632
14
        {&hf_mq_pmo_options_SET_ALL_CONTEXT, {"SET_ALL_CONTEXT", "mq.pmo.options.SET_ALL_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SET_ALL_CONTEXT, "PMO options SET_ALL_CONTEXT", HFILL}},
4633
14
        {&hf_mq_pmo_options_SET_IDENTITY_CONTEXT, {"SET_IDENTITY_CONTEXT", "mq.pmo.options.SET_IDENTITY_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SET_IDENTITY_CONTEXT, "PMO options SET_IDENTITY_CONTEXT", HFILL}},
4634
14
        {&hf_mq_pmo_options_PASS_ALL_CONTEXT, {"PASS_ALL_CONTEXT", "mq.pmo.options.PASS_ALL_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_PASS_ALL_CONTEXT, "PMO options PASS_ALL_CONTEXT", HFILL}},
4635
14
        {&hf_mq_pmo_options_PASS_IDENTITY_CONTEXT, {"PASS_IDENTITY_CONTEXT", "mq.pmo.options.PASS_IDENTITY_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_PASS_IDENTITY_CONTEXT, "PMO options PASS_IDENTITY_CONTEXT", HFILL}},
4636
14
        {&hf_mq_pmo_options_NEW_CORREL_ID, {"NEW_CORREL_ID", "mq.pmo.options.NEW_CORREL_ID", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_NEW_CORREL_ID, "PMO options NEW_CORREL_ID", HFILL}},
4637
14
        {&hf_mq_pmo_options_NEW_MSG_ID, {"NEW_MSG_ID", "mq.pmo.options.NEW_MSG_ID", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_NEW_MSG_ID, "PMO options NEW_MSG_ID", HFILL}},
4638
14
        {&hf_mq_pmo_options_DEFAULT_CONTEXT, {"DEFAULT_CONTEXT", "mq.pmo.options.DEFAULT_CONTEXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_DEFAULT_CONTEXT, "PMO options DEFAULT_CONTEXT", HFILL}},
4639
14
        {&hf_mq_pmo_options_NO_SYNCPOINT, {"NO_SYNCPOINT", "mq.pmo.options.NO_SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_NO_SYNCPOINT, "PMO options NO_SYNCPOINT", HFILL}},
4640
14
        {&hf_mq_pmo_options_SYNCPOINT, {"SYNCPOINT", "mq.pmo.options.SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SYNCPOINT, "PMO options SYNCPOINT", HFILL}},
4641
4642
14
        {&hf_mq_pmo_timeout, {"Timeout....", "mq.pmo.timeout", FT_INT32, BASE_DEC, NULL, 0x0, "PMO time out", HFILL}},
4643
14
        {&hf_mq_pmo_context, {"Context....", "mq.pmo.context", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO context", HFILL}},
4644
14
        {&hf_mq_pmo_knowndstcnt, {"KnDstCnt...", "mq.pmo.kdstcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO known destination count", HFILL}},
4645
14
        {&hf_mq_pmo_unkndstcnt, {"UkDstCnt...", "mq.pmo.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO unknown destination count", HFILL}},
4646
14
        {&hf_mq_pmo_invaldstcnt, {"InDstCnt...", "mq.pmo.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO invalid destination count", HFILL}},
4647
14
        {&hf_mq_pmo_resolvqname, {"ResQName...", "mq.pmo.resolvq", FT_STRING, BASE_NONE, NULL, 0x0, "PMO resolved queue name", HFILL}},
4648
14
        {&hf_mq_pmo_resolvqmgr, {"ResQMgr....", "mq.pmo.resolvqmgr", FT_STRING, BASE_NONE, NULL, 0x0, "PMO resolved queue manager name", HFILL}},
4649
14
        {&hf_mq_pmo_recspresent, {"NumRecs....", "mq.pmo.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO number of records", HFILL}},
4650
14
        {&hf_mq_pmo_putmsgrecfld, {"PMR Flag...", "mq.pmo.flagspmr", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO flags PMR fields", HFILL}},
4651
14
        {&hf_mq_pmo_putmsgrecofs, {"Ofs1stPMR..", "mq.pmo.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first PMR", HFILL}},
4652
14
        {&hf_mq_pmo_resprecofs, {"Off1stRR...", "mq.pmo.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first RR", HFILL}},
4653
14
        {&hf_mq_pmo_putmsgrecptr, {"Adr1stPMR..", "mq.pmo.addrrec", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first record", HFILL}},
4654
14
        {&hf_mq_pmo_resprecptr, {"Adr1stRR...", "mq.pmo.addrres", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first response record", HFILL}},
4655
14
        {&hf_mq_pmo_originalmsghandle, {"OrigMsgHdl.", "mq.pmo.originalmsghandle", FT_UINT64, BASE_HEX, NULL, 0x0, "PMO original message handle", HFILL}},
4656
14
        {&hf_mq_pmo_newmsghandle, {"NewMsgHdl..", "mq.pmo.newmsghandle", FT_UINT64, BASE_HEX, NULL, 0x0, "PMO new message handle", HFILL}},
4657
14
        {&hf_mq_pmo_action, {"Action.....", "mq.pmo.action", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO action", HFILL}},
4658
14
        {&hf_mq_pmo_publevel, {"PubLevel...", "mq.pmo.publevel", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO pub level", HFILL}},
4659
4660
14
        {&hf_mq_xa_length, {"Length.......", "mq.xa.length", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Length", HFILL}},
4661
14
        {&hf_mq_xa_returnvalue, {"Return value.", "mq.xa.returnvalue", FT_INT32, BASE_DEC, VALS(mq_xaer_vals), 0x0, "XA Return Value", HFILL}},
4662
14
        {&hf_mq_xa_tmflags, {"TransMgrFlags", "mq.xa.tmflags", FT_UINT32, BASE_HEX, NULL, 0x0, "XA Transaction Manager Flags", HFILL}},
4663
14
        {&hf_mq_xa_rmid, {"ResourceMgrID", "mq.xa.rmid", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Resource Manager ID", HFILL}},
4664
14
        {&hf_mq_xa_count, {"Number of Xid", "mq.xa.nbxid", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Number of Xid", HFILL}},
4665
14
        {&hf_mq_xa_tmflags_join, {"JOIN", "mq.xa.tmflags.join", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMJOIN, "XA TM Flags JOIN", HFILL}},
4666
14
        {&hf_mq_xa_tmflags_endrscan, {"ENDRSCAN", "mq.xa.tmflags.endrscan", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMENDRSCAN, "XA TM Flags ENDRSCAN", HFILL}},
4667
14
        {&hf_mq_xa_tmflags_startrscan, {"STARTRSCAN", "mq.xa.tmflags.startrscan", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMSTARTRSCAN, "XA TM Flags STARTRSCAN", HFILL}},
4668
14
        {&hf_mq_xa_tmflags_suspend, {"SUSPEND", "mq.xa.tmflags.suspend", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMSUSPEND, "XA TM Flags SUSPEND", HFILL}},
4669
14
        {&hf_mq_xa_tmflags_success, {"SUCCESS", "mq.xa.tmflags.success", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMSUCCESS, "XA TM Flags SUCCESS", HFILL}},
4670
14
        {&hf_mq_xa_tmflags_resume, {"RESUME", "mq.xa.tmflags.resume", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMRESUME, "XA TM Flags RESUME", HFILL}},
4671
14
        {&hf_mq_xa_tmflags_fail, {"FAIL", "mq.xa.tmflags.fail", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMFAIL, "XA TM Flags FAIL", HFILL}},
4672
14
        {&hf_mq_xa_tmflags_onephase, {"ONEPHASE", "mq.xa.tmflags.onephase", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_XA_TMONEPHASE, "XA TM Flags ONEPHASE", HFILL}},
4673
4674
14
        {&hf_mq_xa_xid_formatid, {"Format ID....", "mq.xa.xid.formatid", FT_STRING, BASE_NONE, NULL, 0x0, "XA Xid Format ID", HFILL}},
4675
14
        {&hf_mq_xa_xid_glbxid_len, {"GlbTransIDLen", "mq.xa.xid.gxidl", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Global TransactionId Length", HFILL}},
4676
14
        {&hf_mq_xa_xid_brq_length, {"BranchQualLen", "mq.xa.xid.bql", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Branch Qualifier Length", HFILL}},
4677
14
        {&hf_mq_xa_xid_globalxid, {"GlbTransactID", "mq.xa.xid.gxid", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Global TransactionId", HFILL}},
4678
14
        {&hf_mq_xa_xid_brq, {"BranchQualif.", "mq.xa.xid.bq", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Branch Qualifier", HFILL}},
4679
14
        {&hf_mq_xa_xainfo_length, {"Length.......", "mq.xa.xainfo.length", FT_UINT8, BASE_DEC, NULL, 0x0, "XA XA_info Length", HFILL}},
4680
14
        {&hf_mq_xa_xainfo_value, {"Value........", "mq.xa.xainfo.value", FT_STRING, BASE_NONE, NULL, 0x0, "XA XA_info Value", HFILL}},
4681
4682
14
        {&hf_mq_charv_vsptr, {"VLStr Addr.", "mq.charv.vsptr", FT_UINT32, BASE_HEX, NULL, 0x0, "VS Address", HFILL}},
4683
14
        {&hf_mq_charv_vsoffset, {"VLStr Offs.", "mq.charv.vsoffset", FT_UINT32, BASE_DEC, NULL, 0x0, "VS Offset", HFILL}},
4684
14
        {&hf_mq_charv_vsbufsize, {"VLStr BufSz", "mq.charv.vsbufsize", FT_UINT32, BASE_DEC, NULL, 0x0, "VS BufSize", HFILL}},
4685
14
        {&hf_mq_charv_vslength, {"VLStr Len..", "mq.charv.vslength", FT_UINT32, BASE_DEC, NULL, 0x0, "VS Length", HFILL}},
4686
14
        {&hf_mq_charv_vsccsid, {"VLStr Ccsid", "mq.charv.vsccsid", FT_INT32, BASE_DEC, NULL, 0x0, "VS CCSID", HFILL}},
4687
14
        {&hf_mq_charv_vsvalue, {"VLStr Value", "mq.charv.vsvalue", FT_STRING, BASE_NONE, NULL, 0x0, "VS value", HFILL}},
4688
4689
14
        {&hf_mq_head_StructID, {"Structid", "mq.head.structid", FT_STRING, BASE_NONE, NULL, 0x0, "Header structid", HFILL}},
4690
14
        {&hf_mq_head_version, {"version.", "mq.head.version", FT_UINT32, BASE_DEC, NULL, 0x0, "Header version", HFILL}},
4691
14
        {&hf_mq_head_length, {"Length..", "mq.head.length", FT_UINT32, BASE_DEC, NULL, 0x0, "Header length", HFILL}},
4692
14
        {&hf_mq_head_encoding, {"Encoding", "mq.head.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "Header encoding", HFILL}},
4693
14
        {&hf_mq_head_ccsid, {"CCSID...", "mq.head.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "Header character set", HFILL}},
4694
14
        {&hf_mq_head_format, {"Format..", "mq.head.format", FT_STRING, BASE_NONE, NULL, 0x0, "Header format", HFILL}},
4695
4696
14
        {&hf_mq_head_flags, {"Flags...", "mq.head.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "Header flags", HFILL}},
4697
14
        {&hf_mq_head_struct, {"Struct..", "mq.head.struct", FT_BYTES, BASE_NONE, NULL, 0x0, "Header struct", HFILL}},
4698
4699
14
        {&hf_mq_dh_flags_newmsgid, {"NEW_MSG_IDS", "mq.dh.flags.newmsgid", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQIIH_CM0_REQUEST_RESPONSE, "MQ DH Flags MQDHF_NEW_MSG_IDS", HFILL}},
4700
4701
14
        {&hf_mq_dh_putmsgrecfld, {"Flags PMR", "mq.dh.flagspmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH flags PMR", HFILL}},
4702
14
        {&hf_mq_dh_recspresent, {"NumOfRecs", "mq.dh.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "DH number of records", HFILL}},
4703
14
        {&hf_mq_dh_objrecofs, {"Ofs1stOR.", "mq.dh.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first OR", HFILL}},
4704
14
        {&hf_mq_dh_putmsgrecofs, {"Ofs1stPMR", "mq.dh.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first PMR", HFILL}},
4705
4706
14
        {&hf_mq_iih_flags_cmqrqstresp, {"CMO_RQST_RESP", "mq.iih.flags.cmqrqstresp", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQIIH_CM0_REQUEST_RESPONSE, "MQ IIH Flags CM0_REQUEST_RESPONSE", HFILL}},
4707
14
        {&hf_mq_iih_flags_ignorepurg, {"IGNORE_PURG..", "mq.iih.flags.ignorepurg", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQIIH_IGNORE_PURG, "MQ IIH Flags IGNORE_PURG", HFILL}},
4708
14
        {&hf_mq_iih_flags_replyfmtnone, {"REPL_FMT_NONE", "mq.iih.flags.replyfmtnone", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQIIH_REPLY_FORMAT_NONE, "MQ IIH Flags REPLY_FORMAT_NONE", HFILL}},
4709
14
        {&hf_mq_iih_flags_passexpir, {"PASS_EXPIR...", "mq.iih.flags.passexpir", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQIIH_PASS_EXPIRATION, "MQ IIH Flags PASS_EXPIRATION", HFILL}},
4710
4711
14
        {&hf_mq_iih_ltermoverride, {"LTerm Override", "mq.iih.ltermoverrid", FT_STRING, BASE_NONE, NULL, 0x0, "Logical Terminal Override", HFILL}},
4712
14
        {&hf_mq_iih_mfsmapname, {"MFS Map Name..", "mq.iih.mfsmapname", FT_STRING, BASE_NONE, NULL, 0x0, "MFS Map Name", HFILL}},
4713
14
        {&hf_mq_iih_replytofmt, {"ReplyToFormat.", "mq.iih.replytofmt", FT_STRING, BASE_NONE, NULL, 0x0, "Reply To Format", HFILL}},
4714
14
        {&hf_mq_iih_authenticator, {"Authenticator.", "mq.iih.authenticator", FT_STRING, BASE_NONE, NULL, 0x0, "Password or Passcode", HFILL}},
4715
14
        {&hf_mq_iih_transinstid, {"TransInstIdent", "mq.iih.transinstid", FT_BYTES, BASE_NONE, NULL, 0x0, "Transaction Instance Identifier", HFILL}},
4716
14
        {&hf_mq_iih_transstate, {"TransactState.", "mq.iih.transstate", FT_STRING, BASE_NONE, NULL, 0x0, "Transaction State", HFILL}},
4717
14
        {&hf_mq_iih_commimode, {"Commit Mode...", "mq.iih.commimode", FT_STRING, BASE_NONE, NULL, 0x0, "Commit Mode", HFILL}},
4718
14
        {&hf_mq_iih_securityscope, {"SecurityScope.", "mq.iih.securityscope", FT_STRING, BASE_NONE, NULL, 0x0, "Security Scope", HFILL}},
4719
14
        {&hf_mq_iih_reserved, {"Reserved......", "mq.iih.reserved", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved", HFILL}},
4720
4721
14
        {&hf_mq_cih_flags_synconret, {"SYNC_ON_RETURN", "mq.iih.flags.synconret", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCIH_SYNC_ON_RETURN, "MQ CIH Flags IGNORE_PURG", HFILL}},
4722
14
        {&hf_mq_cih_flags_replywonulls, {"REPLY_WO_NULLS", "mq.iih.flags.replywonulls", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCIH_REPLY_WITHOUT_NULLS, "MQ CIH Flags REPLY_WITHOUT_NULLS", HFILL}},
4723
14
        {&hf_mq_cih_flags_passexpir, {"PASS_EXPIR....", "mq.iih.flags.passexpir", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCIH_PASS_EXPIRATION, "MQ CIH Flags PASS_EXPIRATION", HFILL}},
4724
4725
14
        {&hf_mq_ims_ll, {"ll..", "mq.ims.ll", FT_UINT16, BASE_DEC, NULL, 0x0, "IMS ll", HFILL}},
4726
14
        {&hf_mq_ims_zz, {"zz..", "mq.ims.zz", FT_UINT16, BASE_DEC, NULL, 0x0, "IMS zz", HFILL}},
4727
14
        {&hf_mq_ims_trx, {"trx.", "mq.ims.trx", FT_STRING, BASE_NONE, NULL, 0x0, "IMS Transaction", HFILL}},
4728
14
        {&hf_mq_ims_data, {"data", "mq.ims.data", FT_BYTES, BASE_NONE, NULL, 0x0, "Transaction Instance Identifier", HFILL}},
4729
4730
14
        {&hf_mq_tm_StructID, {"Structid", "mq.tm.structid", FT_STRING, BASE_NONE, NULL, 0x0, "TM structid", HFILL}},
4731
14
        {&hf_mq_tm_version, {"version.", "mq.tm.version", FT_UINT32, BASE_DEC, NULL, 0x0, "TM version", HFILL}},
4732
14
        {&hf_mq_tm_QName, {"QName...", "mq.tm.qname", FT_STRING, BASE_NONE, NULL, 0x0, "TM Queue Name", HFILL}},
4733
14
        {&hf_mq_tm_ProcessNme, {"ProcName", "mq.tm.procname", FT_STRING, BASE_NONE, NULL, 0x0, "TM Process Name", HFILL}},
4734
14
        {&hf_mq_tm_TriggerData, {"TrigData", "mq.tm.triggerdata", FT_STRING, BASE_NONE, NULL, 0x0, "TM Trigger Data", HFILL}},
4735
14
        {&hf_mq_tm_ApplType, {"ApplType", "mq.tm.appltype", FT_UINT32, BASE_DEC | BASE_EXT_STRING, &mq_MQAT_xvals, 0x0, "TM Application Type", HFILL}},
4736
14
        {&hf_mq_tm_ApplId, {"ApplId..", "mq.tm.applid", FT_STRING, BASE_NONE, NULL, 0x0, "TM Application ID", HFILL}},
4737
14
        {&hf_mq_tm_EnvData, {"EnvData.", "mq.tm.envdaqta", FT_STRING, BASE_NONE, NULL, 0x0, "TM Environment Data", HFILL}},
4738
14
        {&hf_mq_tm_UserData, {"UserData.", "mq.t2.userdata", FT_STRING, BASE_NONE, NULL, 0x0, "TM User Data", HFILL}},
4739
4740
14
        {&hf_mq_tmc2_StructID, {"Structid", "mq.tmc2.structid", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 structid", HFILL}},
4741
14
        {&hf_mq_tmc2_version, {"version.", "mq.tmc2.version", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 version", HFILL}},
4742
14
        {&hf_mq_tmc2_QName, {"QName...", "mq.tmc2.qname", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Queue Name", HFILL}},
4743
14
        {&hf_mq_tmc2_ProcessNme, {"ProcName", "mq.tmc2.procname", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Process Name", HFILL}},
4744
14
        {&hf_mq_tmc2_TriggerData, {"TrigData", "mq.tmc2.triggerdata", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Trigger Data", HFILL}},
4745
14
        {&hf_mq_tmc2_ApplType, {"ApplType", "mq.tmc2.appltype", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Application Type", HFILL}},
4746
14
        {&hf_mq_tmc2_ApplId, {"ApplId..", "mq.tmc2.applid", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Application ID", HFILL}},
4747
14
        {&hf_mq_tmc2_EnvData, {"EnvData.", "mq.tmc2.envdaqta", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Environment Data", HFILL}},
4748
14
        {&hf_mq_tmc2_UserData, {"UserData", "mq.tmc2.userdata", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 User Data", HFILL}},
4749
14
        {&hf_mq_tmc2_QMgrName, {"QMgrName", "mq.tmc2.qmgrname", FT_STRING, BASE_NONE, NULL, 0x0, "TMC2 Queue Manager Name", HFILL}},
4750
4751
14
        {&hf_mq_cih_returncode, {"ReturnCode...", "mq.cih.returncode", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Return Code", HFILL}},
4752
14
        {&hf_mq_cih_compcode, {"ComplCode....", "mq.cih.compcode", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Completion Code", HFILL}},
4753
14
        {&hf_mq_cih_reasoncode, {"ReasonCode...", "mq.cih.reasoncode", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Reason Code", HFILL}},
4754
14
        {&hf_mq_cih_uowcontrols, {"UOWControls..", "mq.cih.uowcontrols", FT_UINT32, BASE_HEX_DEC, VALS(mq_MQCUOWC_vals), 0x0, "Unit Of Work Controls", HFILL}},
4755
14
        {&hf_mq_cih_getwaitintv, {"GetWaitIntv..", "mq.cih.getwaitintv", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQWI_rvals), 0x0, "Get Wait Interval", HFILL}},
4756
14
        {&hf_mq_cih_linktype, {"LinkType.....", "mq.cih.linktype", FT_UINT32, BASE_DEC, VALS(mq_MQCLT_vals), 0x0, "LinkType", HFILL}},
4757
14
        {&hf_mq_cih_outdatalen, {"OutDataLen...", "mq.cih.outdatalen", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCODL_rvals), 0x0, "Output Data Len", HFILL}},
4758
14
        {&hf_mq_cih_facilkeeptime, {"FacilKeepTime", "mq.cih.facilkeeptime", FT_UINT32, BASE_DEC, NULL, 0x0, "Facility Keep Time", HFILL}},
4759
14
        {&hf_mq_cih_adsdescriptor, {"ADSDescriptor", "mq.cih.adsdescr", FT_UINT32, BASE_DEC, VALS(mq_MQCADSD_vals), 0x0, "ADS Descriptor", HFILL}},
4760
14
        {&hf_mq_cih_converstask, {"ConversTask..", "mq.cih.converstask", FT_UINT32, BASE_DEC, VALS(mq_MQCCT_vals), 0x0, "Conversational Task", HFILL}},
4761
14
        {&hf_mq_cih_taskendstatus, {"TaskEndStatus", "mq.cih.taskendstatus", FT_UINT32, BASE_DEC, VALS(mq_MQCTES_vals), 0x0, "Status at End of Task", HFILL}},
4762
14
        {&hf_mq_cih_bridgefactokn, {"BridgeFacTokn", "mq.cih.bridgefactokn", FT_BYTES, BASE_NONE, NULL, 0x0, "Bridge facility token", HFILL}},
4763
14
        {&hf_mq_cih_function, {"Function.....", "mq.cih.function", FT_STRING, BASE_NONE, NULL, 0x0, "MQ call name or CICS EIBFN function", HFILL}},
4764
14
        {&hf_mq_cih_abendcode, {"AbendCode....", "mq.cih.abendcode", FT_STRING, BASE_NONE, NULL, 0x0, "Abend Code", HFILL}},
4765
14
        {&hf_mq_cih_authenticator, {"Authenticator", "mq.cih.authenticator", FT_STRING, BASE_NONE, NULL, 0x0, "Password or Passcode", HFILL}},
4766
14
        {&hf_mq_cih_reserved, {"Reserved.....", "mq.cih.reserved", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved", HFILL}},
4767
14
        {&hf_mq_cih_replytofmt, {"ReplyToFormat", "mq.cih.replytofmt", FT_STRING, BASE_NONE, NULL, 0x0, "Reply To Format", HFILL}},
4768
14
        {&hf_mq_cih_remotesysid, {"RemoteSysId..", "mq.cih.remotesysid", FT_STRING, BASE_NONE, NULL, 0x0, "Remote System Id", HFILL}},
4769
14
        {&hf_mq_cih_remotetransid, {"RemoteTransId", "mq.cih.remotetransid", FT_STRING, BASE_NONE, NULL, 0x0, "Remote Transaction Id", HFILL}},
4770
14
        {&hf_mq_cih_transactionid, {"TransactionId", "mq.cih.transactionid", FT_STRING, BASE_NONE, NULL, 0x0, "Transaction to attach", HFILL}},
4771
14
        {&hf_mq_cih_facilitylike, {"FacilityLike.", "mq.cih.facilitylike", FT_STRING, BASE_NONE, NULL, 0x0, "Terminal emulated attributes", HFILL}},
4772
14
        {&hf_mq_cih_attentionid, {"AttentionID..", "mq.cih.attentionid", FT_STRING, BASE_NONE, NULL, 0x0, "Attention Id (AID) Key", HFILL}},
4773
14
        {&hf_mq_cih_startcode, {"StartCode....", "mq.cih.startcode", FT_STRING, BASE_NONE, NULL, 0x0, "Transaction Start Code", HFILL}},
4774
14
        {&hf_mq_cih_cancelcode, {"CancelCode...", "mq.cih.cancelcode", FT_STRING, BASE_NONE, NULL, 0x0, "Abend transaction code", HFILL}},
4775
14
        {&hf_mq_cih_nexttransid, {"NextTransId..", "mq.cih.nexttransid", FT_STRING, BASE_NONE, NULL, 0x0, "Next transaction to attach", HFILL}},
4776
14
        {&hf_mq_cih_reserved2, {"Reserved2....", "mq.cih.reserved2", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved 2", HFILL}},
4777
14
        {&hf_mq_cih_reserved3, {"Reserved3....", "mq.cih.reserved3", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved 3", HFILL}},
4778
14
        {&hf_mq_cih_cursorpos, {"CursorPos....", "mq.cih.cursorpos", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Cursor Position", HFILL}},
4779
14
        {&hf_mq_cih_erroroffset, {"ErrorOffset..", "mq.cih.erroroffset", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Offset of error in message", HFILL}},
4780
14
        {&hf_mq_cih_inputitem, {"InputItem....", "mq.cih.inputitem", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Input Item", HFILL}},
4781
14
        {&hf_mq_cih_reserved4, {"Reserved4....", "mq.cih.reserved4", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved 4", HFILL}},
4782
4783
14
        {&hf_mq_rfh_ccsid, {"NmeValCCSID", "mq.rfh.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(mq_MQCCSI_rvals), 0x0, "RFH NameValue CCSID", HFILL}},
4784
14
        {&hf_mq_rfh_length, {"Len.", "mq.rfh.length", FT_UINT32, BASE_DEC, NULL, 0x0, "RFH NameValue Length", HFILL}},
4785
14
        {&hf_mq_rfh_string, {"Val.", "mq.rfh.string", FT_STRING, BASE_NONE, NULL, 0x0, "RFH NameValue", HFILL}},
4786
4787
14
        {&hf_mq_rmh_flags_last, {"LAST", "mq.rmh.flags.last", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQRMHF_LAST, "MQ RMH LAST", HFILL}},
4788
4789
14
        {&hf_mq_rmh_objecttype, {"ObjectType...", "mq.rmh.objecttype", FT_STRING, BASE_NONE, NULL, 0x0, "Object Type", HFILL}},
4790
14
        {&hf_mq_rmh_objectinstid, {"ObjectInstId.", "mq.rmh.objectinstid", FT_BYTES, BASE_NONE, NULL, 0x0, "Object Instance Identifier", HFILL}},
4791
14
        {&hf_mq_rmh_srcenvlen, {"SrcEnvLen....", "mq.rmh.srcenvlen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of source environment data", HFILL}},
4792
14
        {&hf_mq_rmh_srcenvofs, {"SrcEnvOfs....", "mq.rmh.srcenvofs", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Offset of source environment data", HFILL}},
4793
14
        {&hf_mq_rmh_srcnamelen, {"SrcNameLen...", "mq.rmh.srcnamelen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of source object name", HFILL}},
4794
14
        {&hf_mq_rmh_srcnameofs, {"SrcNameOfs...", "mq.rmh.srcnameofs", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Offset of source object name", HFILL}},
4795
14
        {&hf_mq_rmh_dstenvlen, {"DstEnvLen....", "mq.rmh.dstenvlen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of destination environment data", HFILL}},
4796
14
        {&hf_mq_rmh_dstenvofs, {"DstEnvOfs....", "mq.rmh.dstenvofs", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Offset of destination environment data", HFILL}},
4797
14
        {&hf_mq_rmh_dstnamelen, {"DstNameLen...", "mq.rmh.dstnamelen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of destination object name", HFILL}},
4798
14
        {&hf_mq_rmh_dstnameofs, {"DstNameOfs...", "mq.rmh.dstnameofs", FT_UINT32, BASE_DEC | BASE_HEX, NULL, 0x0, "Offset of destination object name", HFILL}},
4799
14
        {&hf_mq_rmh_datalogiclen, {"DataLogicLen.", "mq.rmh.datalogiclen", FT_UINT32, BASE_DEC, NULL, 0x0, "Length of bulk data", HFILL}},
4800
14
        {&hf_mq_rmh_datalogicofsl, {"DataLogicOfsL", "mq.rmh.datalogicofsl", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "Low offset of bulk data", HFILL}},
4801
14
        {&hf_mq_rmh_datalogicofsh, {"DataLogicOfsH", "mq.rmh.datalogicofsh", FT_UINT32, BASE_DEC_HEX, NULL, 0x0, "High offset of bulk data", HFILL}},
4802
4803
14
        {&hf_mq_wih_servicename, {"ServiceName..", "mq.wih.servicename", FT_STRING, BASE_NONE, NULL, 0x0, "Service Name", HFILL}},
4804
14
        {&hf_mq_wih_servicestep, {"ServiceStep..", "mq.wih.servicestep", FT_STRING, BASE_NONE, NULL, 0x0, "Service Step Name", HFILL}},
4805
14
        {&hf_mq_wih_msgtoken, {"MsgToken.....", "mq.wih.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "Message Token", HFILL}},
4806
14
        {&hf_mq_wih_reserved, {"Reserved.....", "mq.wih.reserved", FT_STRING, BASE_NONE, NULL, 0x0, "Reserved", HFILL}},
4807
14
    };
4808
4809
14
    static int* ett[] =
4810
14
    {
4811
14
        &ett_mq,
4812
14
        &ett_mq_tsh,
4813
14
        &ett_mq_tsh_tcf,
4814
14
        &ett_mq_tsh_tcf2,
4815
14
        &ett_mq_api,
4816
14
        &ett_mq_socket,
4817
14
        &ett_mq_msh,
4818
14
        &ett_mq_caut,
4819
14
        &ett_mq_xqh,
4820
14
        &ett_mq_id,
4821
14
        &ett_mq_id_cf1,
4822
14
        &ett_mq_id_cf2,
4823
14
        &ett_mq_id_cf3,
4824
14
        &ett_mq_id_ecf1,
4825
14
        &ett_mq_id_ecf2,
4826
14
        &ett_mq_id_ecf3,
4827
14
        &ett_mq_id_ief1,
4828
14
        &ett_mq_id_ief2,
4829
14
        &ett_mq_uid,
4830
14
        &ett_mq_conn,
4831
14
        &ett_mq_fcno_option,
4832
14
        &ett_mq_msg,
4833
14
        &ett_mq_notif,
4834
14
        &ett_mq_inq,
4835
14
        &ett_mq_spi,
4836
14
        &ett_mq_spi_base,
4837
14
        &ett_mq_spi_options,
4838
14
        &ett_mq_put,
4839
14
        &ett_mq_open,
4840
14
        &ett_mq_open_option,
4841
14
        &ett_mq_close_option,
4842
14
        &ett_mq_ping,
4843
14
        &ett_mq_reset,
4844
14
        &ett_mq_status,
4845
14
        &ett_mq_od,
4846
14
        &ett_mq_od_objstr,
4847
14
        &ett_mq_od_selstr,
4848
14
        &ett_mq_od_resobjstr,
4849
14
        &ett_mq_or,
4850
14
        &ett_mq_rr,
4851
14
        &ett_mq_pmr,
4852
14
        &ett_mq_md,
4853
14
        &ett_mq_dlh,
4854
14
        &ett_mq_dh,
4855
14
        &ett_mq_gmo,
4856
14
        &ett_mq_gmo_option,
4857
14
        &ett_mq_gmo_matchoption,
4858
14
        &ett_mq_msgreq_RqstFlags,
4859
14
        &ett_mq_pmo,
4860
14
        &ett_mq_pmo_option,
4861
14
        &ett_mq_fcno,
4862
14
        &ett_mq_fopa,
4863
14
        &ett_mq_fcmi,
4864
14
        &ett_mq_lpoo,
4865
14
        &ett_mq_lpoo_lpiopts,
4866
14
        &ett_mq_head,
4867
14
        &ett_mq_head_flags,
4868
14
        &ett_mq_ims,
4869
14
        &ett_mq_xa,
4870
14
        &ett_mq_xa_tmflags,
4871
14
        &ett_mq_xa_xid,
4872
14
        &ett_mq_xa_info,
4873
14
        &ett_mq_charv,
4874
14
        &ett_mq_rfh_ValueName,
4875
14
        &ett_mq_reassemb,
4876
14
        &ett_mq_structid
4877
14
    };
4878
4879
14
    module_t* mq_module;
4880
14
    expert_module_t* expert_mq;
4881
4882
14
    static ei_register_info ei[] = {
4883
14
        {&ei_mq_reassembly_error, {"mq.reassembly_error",
4884
14
        PI_REASSEMBLE, PI_ERROR, "Reassembly error", EXPFILL}}
4885
14
    };
4886
4887
14
    proto_mq = proto_register_protocol("WebSphere MQ", "MQ", "mq");
4888
14
    proto_register_field_array(proto_mq, hf, array_length(hf));
4889
14
    proto_register_subtree_array(ett, array_length(ett));
4890
4891
14
    expert_mq = expert_register_protocol(proto_mq);
4892
14
    expert_register_field_array(expert_mq, ei, array_length(ei));
4893
4894
14
    mq_heur_subdissector_list = register_heur_dissector_list_with_description("mq", "WebSphere MQ data", proto_mq);
4895
4896
14
    reassembly_table_register(&mq_reassembly_table,
4897
14
        &addresses_reassembly_table_functions);
4898
4899
14
    mq_module = prefs_register_protocol(proto_mq, NULL);
4900
14
    mq_handle = register_dissector("mq", dissect_mq_tcp, proto_mq);
4901
14
    mq_spx_handle = register_dissector("mq.spx", dissect_mq_spx, proto_mq);
4902
4903
4904
14
    prefs_register_bool_preference(mq_module, "desegment",
4905
14
        "Reassemble MQ messages spanning multiple TCP segments",
4906
14
        "Whether the MQ dissector should reassemble messages spanning multiple TCP segments."
4907
14
        " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.",
4908
14
        &mq_desegment);
4909
14
    prefs_register_bool_preference(mq_module, "reassembly",
4910
14
        "Reassemble segmented MQ messages",
4911
14
        "Whether the MQ dissector should reassemble MQ messages spanning multiple TSH segments",
4912
14
        &mq_reassembly);
4913
14
}
4914
4915
void proto_reg_handoff_mq(void)
4916
14
{
4917
    /*  Unlike some protocol (HTTP, POP3, ...) that clearly map to a standard
4918
    *  class of applications (web browser, e-mail client, ...) and have a very well
4919
    *  known port number, the MQ applications are most often specific to a business application */
4920
4921
14
    dissector_add_for_decode_as_with_preference("tcp.port", mq_handle);
4922
14
    ssl_dissector_add(0, mq_handle);
4923
14
    heur_dissector_add("tcp", dissect_mq_heur_tcp, "WebSphere MQ over TCP", "mq_tcp", proto_mq, HEURISTIC_ENABLE);
4924
14
    heur_dissector_add("netbios", dissect_mq_heur_nontcp, "WebSphere MQ over Netbios", "mq_netbios", proto_mq, HEURISTIC_ENABLE);
4925
14
    heur_dissector_add("http", dissect_mq_heur_nontcp, "WebSphere MQ over HTTP", "mq_http", proto_mq, HEURISTIC_ENABLE);
4926
14
    heur_dissector_add("tls", dissect_mq_heur_ssl, "WebSphere MQ over TLS", "mq_tls", proto_mq, HEURISTIC_ENABLE);
4927
14
    dissector_add_uint("spx.socket", MQ_SOCKET_SPX, mq_spx_handle);
4928
14
    mqpcf_handle = find_dissector("mqpcf");
4929
14
}
4930
4931
/*
4932
 * Editor modelines - https://www.wireshark.org/tools/modelines.html
4933
 *
4934
 * Local variables:
4935
 * c-basic-offset: 4
4936
 * tab-width: 8
4937
 * indent-tabs-mode: nil
4938
 * End:
4939
 *
4940
 * vi: set shiftwidth=4 tabstop=8 expandtab:
4941
 * :indentSize=4:tabSize=8:noTabs=true:
4942
 */