/* packet-mq.c * Routines for IBM WebSphere MQ packet dissection * * metatech * robionekenobi * * Wireshark - Network traffic analyzer * By Gerald Combs * Copyright 1998 Gerald Combs * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* WebSphere MQ in a nutshell * * IBM WebSphere MQ (formerly IBM MQSeries) is an asynchronous proprietary messaging middleware that is * based on message queues. * MQ can run on more than 35 platforms, amongst which UNIX, Windows and mainframes. * MQ can be transported on top of TCP, UDP, HTTP, NetBIOS, SPX, SNA LU 6.2, DECnet. * MQ has language bindings for C, C++, Java, .NET, COBOL, PL/I, OS/390 assembler, TAL, Visual Basic. * * The basic MQ topology is on one side the queue manager which hosts the queues. On the other side the * applications connect to the queue manager, open a queue, and put or get messages to/from that queue. * * The MQ middleware allows very generic operations (send, receive) and can be compared to the * socket API in terms of genericity, but it is more abstract and offers higher-level functionalities * (eg transactions, ...) * * The MQ middleware is not really intended to be run over public networks between parties * that do not know each other in advance, but is rather used on private corporate networks * between business applications (it can be compared to a database server for that aspect). * * The wire format of an MQ segment is a sequence of structures. * Most structures start with a 4-letter struct identifier. * MQ is a fixed-sized format, most fields have maximum lengths defined in the MQ API. * MQ is popular on mainframes because it was available before TCP/IP. * MQ supports both ASCII-based and EBCDIC-based character sets. * * MQ API documentation is called "WebSphere MQ Application Programming Reference" * * Possible structures combinations : * TSH [ ID ^ UID ^ CONN ^ INQ ^ OD ] * TSH MSH XQH MD [ PAYLOAD ] * TSH [OD] MD [ GMO ^ PMO ] [ [XQH MD] PAYLOAD ] * TSH [ SPQU ^ SPPU ^ SPGU ^ SPAU [ SPQI ^ SPQO ^ SPPI ^ SPPO ^ SPGI ^ SPGO ^ SPAI ^ SPAO]] * TSH [ XA ] [ XINFO | XID ] * where PAYLOAD = [ DH ] [ DLH ] [ MDE ] BUFF * * This dissector is a beta version. To be improved * - Translate the integers/flags into their descriptions * - Find the semantics of the unknown fields * - Display EBCDIC strings as ASCII * - Packets which structures built on different platforms */ #include "config.h" #include #include #include #include #include #include #include "packet-windows-common.h" #include "packet-tcp.h" #include #include "packet-mq.h" void proto_register_mq(void); void proto_reg_handoff_mq(void); static int proto_mq = -1; static int hf_mq_tsh_StructID = -1; static int hf_mq_tsh_mqseglen = -1; static int hf_mq_tsh_convid = -1; static int hf_mq_tsh_requestid = -1; static int hf_mq_tsh_byteorder = -1; static int hf_mq_tsh_opcode = -1; static int hf_mq_tsh_ctlflgs1 = -1; static int hf_mq_tsh_ctlflgs2 = -1; static int hf_mq_tsh_luwid = -1; static int hf_mq_tsh_encoding = -1; static int hf_mq_tsh_ccsid = -1; static int hf_mq_tsh_reserved = -1; /* Transmission Segment Control Flags 1 */ static int hf_mq_tsh_tcf_confirmreq = -1; static int hf_mq_tsh_tcf_error = -1; static int hf_mq_tsh_tcf_reqclose = -1; static int hf_mq_tsh_tcf_closechann = -1; static int hf_mq_tsh_tcf_first = -1; static int hf_mq_tsh_tcf_last = -1; static int hf_mq_tsh_tcf_reqacc = -1; static int hf_mq_tsh_tcf_dlq = -1; static const int *pf_flds_tcf[] = { &hf_mq_tsh_tcf_dlq , &hf_mq_tsh_tcf_reqacc , &hf_mq_tsh_tcf_last , &hf_mq_tsh_tcf_first , &hf_mq_tsh_tcf_closechann, &hf_mq_tsh_tcf_reqclose , &hf_mq_tsh_tcf_error , &hf_mq_tsh_tcf_confirmreq, NULL }; /* Transmission Segment Control Flags 2 */ static int hf_mq_tsh_tcf2_HdrComp = -1; static int hf_mq_tsh_tcf2_MsgComp = -1; static int hf_mq_tsh_tcf2_CSH = -1; static int hf_mq_tsh_tcf2_CmitIntv = -1; static const int *pf_flds_tcf2[] = { &hf_mq_tsh_tcf2_CmitIntv, &hf_mq_tsh_tcf2_CSH , &hf_mq_tsh_tcf2_MsgComp , &hf_mq_tsh_tcf2_HdrComp , NULL }; static int hf_mq_api_replylen = -1; static int hf_mq_api_compcode = -1; static int hf_mq_api_reascode = -1; static int hf_mq_api_objecthdl = -1; static int hf_mq_socket_conversid = -1; static int hf_mq_socket_requestid = -1; static int hf_mq_socket_type = -1; static int hf_mq_socket_parm1 = -1; static int hf_mq_socket_parm2 = -1; static int hf_mq_msh_StructID = -1; static int hf_mq_msh_seqnum = -1; static int hf_mq_msh_datalength = -1; static int hf_mq_msh_unknown1 = -1; static int hf_mq_msh_msglength = -1; static int hf_mq_xqh_StructID = -1; static int hf_mq_xqh_version = -1; static int hf_mq_xqh_remoteq = -1; static int hf_mq_xqh_remoteqmgr = -1; static int hf_mq_id_StructID = -1; static int hf_mq_id_FapLevel = -1; static int hf_mq_id_icf1 = -1; static int hf_mq_id_Eicf1 = -1; static int hf_mq_id_ief1 = -1; static int hf_mq_id_Reserved = -1; static int hf_mq_id_MaxMsgBatch = -1; static int hf_mq_id_MaxTrSize = -1; static int hf_mq_id_MaxMsgSize = -1; static int hf_mq_id_SeqWrapVal = -1; static int hf_mq_id_channel = -1; static int hf_mq_id_icf2 = -1; static int hf_mq_id_Eicf2 = -1; static int hf_mq_id_ccsid = -1; static int hf_mq_id_qmgrname = -1; static int hf_mq_id_HBInterval = -1; static int hf_mq_id_EFLLength = -1; static int hf_mq_id_ief2 = -1; static int hf_mq_id_Reserved1 = -1; static int hf_mq_id_HdrCprsLst = -1; static int hf_mq_id_MsgCprsLst = -1; static int hf_mq_id_Reserved2 = -1; static int hf_mq_id_SSLKeyRst = -1; static int hf_mq_id_ConvBySkt = -1; static int hf_mq_id_icf3 = -1; static int hf_mq_id_Eicf3 = -1; static int hf_mq_id_Reserved3 = -1; static int hf_mq_id_ProcessId = -1; static int hf_mq_id_ThreadId = -1; static int hf_mq_id_TraceId = -1; static int hf_mq_id_ProdId = -1; static int hf_mq_id_mqmid = -1; /* Initial Data Capability Flag 1 */ static int hf_mq_id_icf1_msgseq = -1; static int hf_mq_id_icf1_convcap = -1; static int hf_mq_id_icf1_splitmsg = -1; static int hf_mq_id_icf1_RqstInit = -1; static int hf_mq_id_icf1_RqstSecu = -1; static int hf_mq_id_icf1_mqreq = -1; static int hf_mq_id_icf1_svrsec = -1; static int hf_mq_id_icf1_runtime = -1; static const int *pf_flds_icf1[] = { &hf_mq_id_icf1_runtime , &hf_mq_id_icf1_svrsec , &hf_mq_id_icf1_mqreq , &hf_mq_id_icf1_RqstSecu, &hf_mq_id_icf1_RqstInit, &hf_mq_id_icf1_splitmsg, &hf_mq_id_icf1_convcap , &hf_mq_id_icf1_msgseq , NULL }; /* Initial Data Error Flag 1 */ static int hf_mq_id_ief1_ccsid = -1; static int hf_mq_id_ief1_enc = -1; static int hf_mq_id_ief1_mxtrsz = -1; static int hf_mq_id_ief1_fap = -1; static int hf_mq_id_ief1_mxmsgsz = -1; static int hf_mq_id_ief1_mxmsgpb = -1; static int hf_mq_id_ief1_seqwrap = -1; static int hf_mq_id_ief1_hbint = -1; static const int *pf_flds_ief1[] = { &hf_mq_id_ief1_hbint , &hf_mq_id_ief1_seqwrap, &hf_mq_id_ief1_mxmsgpb, &hf_mq_id_ief1_mxmsgsz, &hf_mq_id_ief1_fap , &hf_mq_id_ief1_mxtrsz , &hf_mq_id_ief1_enc , &hf_mq_id_ief1_ccsid , NULL }; /* Initial Data Capability Flag 2 */ static int hf_mq_id_icf2_CanDstLst = -1; static int hf_mq_id_icf2_FstMsgReq = -1; static int hf_mq_id_icf2_RespConv = -1; static int hf_mq_id_icf2_XARequest = -1; static int hf_mq_id_icf2_XARunTApp = -1; static int hf_mq_id_icf2_SPIRqst = -1; static int hf_mq_id_icf2_DualUOW = -1; static int hf_mq_id_icf2_CanTrcRte = -1; static const int *pf_flds_icf2[] = { &hf_mq_id_icf2_CanTrcRte, &hf_mq_id_icf2_SPIRqst , &hf_mq_id_icf2_XARunTApp, &hf_mq_id_icf2_XARequest, &hf_mq_id_icf2_DualUOW , &hf_mq_id_icf2_RespConv , &hf_mq_id_icf2_FstMsgReq, &hf_mq_id_icf2_CanDstLst, NULL }; /* Initial Data Error Flag 2 */ static int hf_mq_id_ief2_HdrCmpLst = -1; static int hf_mq_id_ief2_MsgCmpLst = -1; static int hf_mq_id_ief2_SSLReset = -1; static const int *pf_flds_ief2[] = { &hf_mq_id_ief2_SSLReset , &hf_mq_id_ief2_MsgCmpLst, &hf_mq_id_ief2_HdrCmpLst, NULL }; /* Initial Data Capability Flag 3 */ static int hf_mq_id_icf3_CanMsgPrp = -1; static int hf_mq_id_icf3_Unknown02 = -1; static const int *pf_flds_icf3[] = { &hf_mq_id_icf3_Unknown02, &hf_mq_id_icf3_CanMsgPrp, NULL }; static int hf_mq_uid_StructID = -1; static int hf_mq_uid_userid = -1; static int hf_mq_uid_password = -1; static int hf_mq_uid_longuserid = -1; static int hf_mq_sidlen = -1; static int hf_mq_sidtyp = -1; static int hf_mq_securityid = -1; static int hf_mq_conn_QMgr = -1; static int hf_mq_conn_appname = -1; static int hf_mq_conn_apptype = -1; static int hf_mq_conn_acttoken = -1; static int hf_mq_conn_version = -1; static int hf_mq_conn_options = -1; static int hf_mq_fcno_StructID = -1; static int hf_mq_fcno_msgid = -1; static int hf_mq_fcno_mqmid = -1; static int hf_mq_fcno_version = -1; static int hf_mq_fcno_option = -1; static int hf_mq_fcno_connid = -1; static int hf_mq_fcno_unknown02 = -1; static int hf_mq_inq_nbsel = -1; static int hf_mq_inq_nbint = -1; static int hf_mq_inq_charlen = -1; static int hf_mq_inq_sel = -1; static int hf_mq_inq_intvalue = -1; static int hf_mq_inq_charvalues = -1; static int hf_mq_spi_verb = -1; static int hf_mq_spi_version = -1; static int hf_mq_spi_length = -1; static int hf_mq_spi_base_StructID = -1; static int hf_mq_spi_base_version = -1; static int hf_mq_spi_base_length = -1; static int hf_mq_spi_spqo_nbverb = -1; static int hf_mq_spi_spqo_verbid = -1; static int hf_mq_spi_spqo_maxiover = -1; static int hf_mq_spi_spqo_maxinver = -1; static int hf_mq_spi_spqo_maxouver = -1; static int hf_mq_spi_spqo_flags = -1; static int hf_mq_spi_spai_mode = -1; static int hf_mq_spi_spai_unknown1 = -1; static int hf_mq_spi_spai_unknown2 = -1; static int hf_mq_spi_spai_msgid = -1; static int hf_mq_spi_spgi_batchsz = -1; static int hf_mq_spi_spgi_batchint = -1; static int hf_mq_spi_spgi_maxmsgsz = -1; static int hf_mq_spi_spgo_options = -1; static int hf_mq_spi_spgo_size = -1; static int hf_mq_spi_opt_blank = -1; static int hf_mq_spi_opt_syncp = -1; static int hf_mq_spi_opt_deferred = -1; static const int *pf_flds_spiopt[] = { &hf_mq_spi_opt_deferred, &hf_mq_spi_opt_syncp, &hf_mq_spi_opt_blank, NULL }; static int hf_mq_put_length = -1; static int hf_mq_close_options = -1; static int hf_mq_close_options_DELETE = -1; static int hf_mq_close_options_DELETE_PURGE = -1; static int hf_mq_close_options_KEEP_SUB = -1; static int hf_mq_close_options_REMOVE_SUB = -1; static int hf_mq_close_options_QUIESCE = -1; static const int *pf_flds_clsopt[] = { &hf_mq_close_options_QUIESCE , &hf_mq_close_options_REMOVE_SUB , &hf_mq_close_options_KEEP_SUB , &hf_mq_close_options_DELETE_PURGE, &hf_mq_close_options_DELETE , NULL }; static int hf_mq_open_options = -1; static int hf_mq_open_options_INPUT_SHARED = -1; static int hf_mq_open_options_INPUT_AS_Q_DEF = -1; static int hf_mq_open_options_INPUT_EXCLUSIVE = -1; static int hf_mq_open_options_BROWSE = -1; static int hf_mq_open_options_OUTPUT = -1; static int hf_mq_open_options_INQUIRE = -1; static int hf_mq_open_options_SET = -1; static int hf_mq_open_options_SAVE_ALL_CTX = -1; static int hf_mq_open_options_PASS_IDENT_CTX = -1; static int hf_mq_open_options_PASS_ALL_CTX = -1; static int hf_mq_open_options_SET_IDENT_CTX = -1; static int hf_mq_open_options_SET_ALL_CONTEXT = -1; static int hf_mq_open_options_ALT_USER_AUTH = -1; static int hf_mq_open_options_FAIL_IF_QUIESC = -1; static int hf_mq_open_options_BIND_ON_OPEN = -1; static int hf_mq_open_options_BIND_NOT_FIXED = -1; static int hf_mq_open_options_RESOLVE_NAMES = -1; static int hf_mq_open_options_CO_OP = -1; static int hf_mq_open_options_RESOLVE_LOCAL_Q = -1; static int hf_mq_open_options_NO_READ_AHEAD = -1; static int hf_mq_open_options_READ_AHEAD = -1; static int hf_mq_open_options_NO_MULTICAST = -1; static int hf_mq_open_options_BIND_ON_GROUP = -1; static const int *pf_flds_opnopt[] = { &hf_mq_open_options_BIND_ON_GROUP , &hf_mq_open_options_NO_MULTICAST , &hf_mq_open_options_READ_AHEAD , &hf_mq_open_options_NO_READ_AHEAD , &hf_mq_open_options_RESOLVE_LOCAL_Q, &hf_mq_open_options_CO_OP , &hf_mq_open_options_RESOLVE_NAMES , &hf_mq_open_options_BIND_NOT_FIXED , &hf_mq_open_options_BIND_ON_OPEN , &hf_mq_open_options_FAIL_IF_QUIESC , &hf_mq_open_options_ALT_USER_AUTH , &hf_mq_open_options_SET_ALL_CONTEXT, &hf_mq_open_options_SET_IDENT_CTX , &hf_mq_open_options_PASS_ALL_CTX , &hf_mq_open_options_PASS_IDENT_CTX , &hf_mq_open_options_SAVE_ALL_CTX , &hf_mq_open_options_SET , &hf_mq_open_options_INQUIRE , &hf_mq_open_options_OUTPUT , &hf_mq_open_options_BROWSE , &hf_mq_open_options_INPUT_EXCLUSIVE, &hf_mq_open_options_INPUT_SHARED , &hf_mq_open_options_INPUT_AS_Q_DEF , NULL }; static int hf_mq_fopa_StructID = -1; static int hf_mq_fopa_version = -1; static int hf_mq_fopa_length = -1; static int hf_mq_fopa_unknown1 = -1; static int hf_mq_fopa_unknown2 = -1; static int hf_mq_fopa_unknown3 = -1; static int hf_mq_fopa_qprotect = -1; static int hf_mq_fopa_unknown4 = -1; static int hf_mq_fopa_unknown5 = -1; static int hf_mq_ping_length = -1; static int hf_mq_ping_buffer = -1; static int hf_mq_reset_length = -1; static int hf_mq_reset_seqnum = -1; static int hf_mq_status_length = -1; static int hf_mq_status_code = -1; static int hf_mq_status_value = -1; static int hf_mq_caut_StructID = -1; static int hf_mq_caut_AuthType = -1; static int hf_mq_caut_UsrMaxLen = -1; static int hf_mq_caut_PwdMaxLen = -1; static int hf_mq_caut_UsrLength = -1; static int hf_mq_caut_PwdLength = -1; static int hf_mq_caut_usr = -1; static int hf_mq_caut_psw = -1; static int hf_mq_od_StructID = -1; static int hf_mq_od_version = -1; static int hf_mq_od_objecttype = -1; static int hf_mq_od_objectname = -1; static int hf_mq_od_objqmgrname = -1; static int hf_mq_od_dynqname = -1; static int hf_mq_od_altuserid = -1; static int hf_mq_od_recspresent = -1; static int hf_mq_od_knowndstcnt = -1; static int hf_mq_od_unknowdstcnt = -1; static int hf_mq_od_invaldstcnt = -1; static int hf_mq_od_objrecofs = -1; static int hf_mq_od_resprecofs = -1; static int hf_mq_od_objrecptr = -1; static int hf_mq_od_resprecptr = -1; static int hf_mq_od_altsecurid = -1; static int hf_mq_od_resolvqname = -1; static int hf_mq_od_resolvqmgrnm = -1; static int hf_mq_od_resolvobjtyp = -1; static int hf_mq_or_objname = -1; static int hf_mq_or_objqmgrname = -1; static int hf_mq_rr_compcode = -1; static int hf_mq_rr_reascode = -1; static int hf_mq_pmr_msgid = -1; static int hf_mq_pmr_correlid = -1; static int hf_mq_pmr_groupid = -1; static int hf_mq_pmr_feedback = -1; static int hf_mq_pmr_acttoken = -1; static int hf_mq_md_StructID = -1; static int hf_mq_md_version = -1; static int hf_mq_md_report = -1; static int hf_mq_md_msgtype = -1; static int hf_mq_md_expiry = -1; static int hf_mq_md_feedback = -1; static int hf_mq_md_encoding = -1; static int hf_mq_md_ccsid = -1; static int hf_mq_md_format = -1; static int hf_mq_md_priority = -1; static int hf_mq_md_persistence = -1; static int hf_mq_md_msgid = -1; static int hf_mq_md_correlid = -1; static int hf_mq_md_backoutcnt = -1; static int hf_mq_md_replytoq = -1; static int hf_mq_md_replytoqmgr = -1; static int hf_mq_md_userid = -1; static int hf_mq_md_acttoken = -1; static int hf_mq_md_appliddata = -1; static int hf_mq_md_putappltype = -1; static int hf_mq_md_putapplname = -1; static int hf_mq_md_putdate = -1; static int hf_mq_md_puttime = -1; static int hf_mq_md_apporigdata = -1; static int hf_mq_md_groupid = -1; static int hf_mq_md_msgseqnumber = -1; static int hf_mq_md_offset = -1; static int hf_mq_md_msgflags = -1; static int hf_mq_md_origlen = -1; static int hf_mq_dlh_StructID = -1; static int hf_mq_dlh_version = -1; static int hf_mq_dlh_reason = -1; static int hf_mq_dlh_destq = -1; static int hf_mq_dlh_destqmgr = -1; static int hf_mq_dlh_encoding = -1; static int hf_mq_dlh_ccsid = -1; static int hf_mq_dlh_format = -1; static int hf_mq_dlh_putappltype = -1; static int hf_mq_dlh_putapplname = -1; static int hf_mq_dlh_putdate = -1; static int hf_mq_dlh_puttime = -1; static int hf_mq_gmo_StructID = -1; static int hf_mq_gmo_version = -1; static int hf_mq_gmo_options = -1; static int hf_mq_gmo_waitinterval = -1; static int hf_mq_gmo_signal1 = -1; static int hf_mq_gmo_signal2 = -1; static int hf_mq_gmo_resolvqname = -1; static int hf_mq_gmo_matchoptions = -1; static int hf_mq_gmo_groupstatus = -1; static int hf_mq_gmo_segmstatus = -1; static int hf_mq_gmo_segmentation = -1; static int hf_mq_gmo_reserved = -1; static int hf_mq_gmo_msgtoken = -1; static int hf_mq_gmo_returnedlen = -1; static int hf_mq_gmo_options_PROPERTIES_COMPATIBILITY = -1; static int hf_mq_gmo_options_PROPERTIES_IN_HANDLE = -1; static int hf_mq_gmo_options_NO_PROPERTIES = -1; static int hf_mq_gmo_options_PROPERTIES_FORCE_MQRFH2 = -1; static int hf_mq_gmo_options_UNMARKED_BROWSE_MSG = -1; static int hf_mq_gmo_options_UNMARK_BROWSE_HANDLE = -1; static int hf_mq_gmo_options_UNMARK_BROWSE_CO_OP = -1; static int hf_mq_gmo_options_MARK_BROWSE_CO_OP = -1; static int hf_mq_gmo_options_MARK_BROWSE_HANDLE = -1; static int hf_mq_gmo_options_ALL_SEGMENTS_AVAILABLE = -1; static int hf_mq_gmo_options_ALL_MSGS_AVAILABLE = -1; static int hf_mq_gmo_options_COMPLETE_MSG = -1; static int hf_mq_gmo_options_LOGICAL_ORDER = -1; static int hf_mq_gmo_options_CONVERT = -1; static int hf_mq_gmo_options_FAIL_IF_QUIESCING = -1; static int hf_mq_gmo_options_SYNCPOINT_IF_PERSISTENT = -1; static int hf_mq_gmo_options_BROWSE_MSG_UNDER_CURSOR = -1; static int hf_mq_gmo_options_UNLOCK = -1; static int hf_mq_gmo_options_LOCK = -1; static int hf_mq_gmo_options_MSG_UNDER_CURSOR = -1; static int hf_mq_gmo_options_MARK_SKIP_BACKOUT = -1; static int hf_mq_gmo_options_ACCEPT_TRUNCATED_MSG = -1; static int hf_mq_gmo_options_BROWSE_NEXT = -1; static int hf_mq_gmo_options_BROWSE_FIRST = -1; static int hf_mq_gmo_options_SET_SIGNAL = -1; static int hf_mq_gmo_options_NO_SYNCPOINT = -1; static int hf_mq_gmo_options_SYNCPOINT = -1; static int hf_mq_gmo_options_WAIT = -1; static const int *pf_flds_gmoopt[] = { &hf_mq_gmo_options_PROPERTIES_COMPATIBILITY, &hf_mq_gmo_options_PROPERTIES_IN_HANDLE , &hf_mq_gmo_options_NO_PROPERTIES , &hf_mq_gmo_options_PROPERTIES_FORCE_MQRFH2 , &hf_mq_gmo_options_UNMARKED_BROWSE_MSG , &hf_mq_gmo_options_UNMARK_BROWSE_HANDLE , &hf_mq_gmo_options_UNMARK_BROWSE_CO_OP , &hf_mq_gmo_options_MARK_BROWSE_CO_OP , &hf_mq_gmo_options_MARK_BROWSE_HANDLE , &hf_mq_gmo_options_ALL_SEGMENTS_AVAILABLE , &hf_mq_gmo_options_ALL_MSGS_AVAILABLE , &hf_mq_gmo_options_COMPLETE_MSG , &hf_mq_gmo_options_LOGICAL_ORDER , &hf_mq_gmo_options_CONVERT , &hf_mq_gmo_options_FAIL_IF_QUIESCING , &hf_mq_gmo_options_SYNCPOINT_IF_PERSISTENT , &hf_mq_gmo_options_BROWSE_MSG_UNDER_CURSOR , &hf_mq_gmo_options_UNLOCK , &hf_mq_gmo_options_LOCK , &hf_mq_gmo_options_MSG_UNDER_CURSOR , &hf_mq_gmo_options_MARK_SKIP_BACKOUT , &hf_mq_gmo_options_ACCEPT_TRUNCATED_MSG , &hf_mq_gmo_options_BROWSE_NEXT , &hf_mq_gmo_options_BROWSE_FIRST , &hf_mq_gmo_options_SET_SIGNAL , &hf_mq_gmo_options_NO_SYNCPOINT , &hf_mq_gmo_options_SYNCPOINT , &hf_mq_gmo_options_WAIT , NULL }; static int hf_mq_gmo_matchoptions_MATCH_MSG_TOKEN = -1; static int hf_mq_gmo_matchoptions_MATCH_OFFSET = -1; static int hf_mq_gmo_matchoptions_MATCH_MSG_SEQ_NUMBER = -1; static int hf_mq_gmo_matchoptions_MATCH_GROUP_ID = -1; static int hf_mq_gmo_matchoptions_MATCH_CORREL_ID = -1; static int hf_mq_gmo_matchoptions_MATCH_MSG_ID = -1; static const int *pf_flds_mtchopt[] = { &hf_mq_gmo_matchoptions_MATCH_MSG_TOKEN , &hf_mq_gmo_matchoptions_MATCH_OFFSET , &hf_mq_gmo_matchoptions_MATCH_MSG_SEQ_NUMBER, &hf_mq_gmo_matchoptions_MATCH_GROUP_ID , &hf_mq_gmo_matchoptions_MATCH_CORREL_ID , &hf_mq_gmo_matchoptions_MATCH_MSG_ID , NULL }; static int hf_mq_lpoo_StructID = -1; static int hf_mq_lpoo_version = -1; static int hf_mq_lpoo_options = -1; static int hf_mq_lpoo_lpiopts = -1; static int hf_mq_lpoo_defpersist = -1; static int hf_mq_lpoo_defputresptype = -1; static int hf_mq_lpoo_defreadahead = -1; static int hf_mq_lpoo_unknown5 = -1; static int hf_mq_lpoo_qprotect = -1; static int hf_mq_lpoo_unknown6 = -1; static int hf_mq_lpoo_xtradata = -1; static int hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT = -1; static int hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT = -1 ; static int hf_mq_lpoo_lpiopts_SAVE_USER_CTXT = -1; static const int *pf_flds_lpooopt[] = { &hf_mq_lpoo_lpiopts_SAVE_USER_CTXT, &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, NULL }; static int hf_mq_charv_vsptr = -1; static int hf_mq_charv_vsoffset = -1; static int hf_mq_charv_vsbufsize = -1; static int hf_mq_charv_vslength = -1; static int hf_mq_charv_vsccsid = -1; static int hf_mq_charv_vsvalue = -1; static int hf_mq_pmo_StructID = -1; static int hf_mq_pmo_version = -1; static int hf_mq_pmo_options = -1; static int hf_mq_pmo_timeout = -1; static int hf_mq_pmo_context = -1; static int hf_mq_pmo_knowndstcnt = -1; static int hf_mq_pmo_unkndstcnt = -1; static int hf_mq_pmo_invaldstcnt = -1; static int hf_mq_pmo_resolvqname = -1; static int hf_mq_pmo_resolvqmgr = -1; static int hf_mq_pmo_recspresent = -1; static int hf_mq_pmo_putmsgrecfld = -1; static int hf_mq_pmo_putmsgrecofs = -1; static int hf_mq_pmo_resprecofs = -1; static int hf_mq_pmo_putmsgrecptr = -1; static int hf_mq_pmo_resprecptr = -1; static int hf_mq_xa_length = -1; static int hf_mq_xa_returnvalue = -1; static int hf_mq_xa_tmflags = -1; static int hf_mq_xa_rmid = -1; static int hf_mq_xa_count = -1; static int hf_mq_xa_xid_formatid = -1; static int hf_mq_xa_xid_glbxid_len = -1; static int hf_mq_xa_xid_brq_length = -1; static int hf_mq_xa_xid_globalxid = -1; static int hf_mq_xa_xid_brq = -1; static int hf_mq_xa_xainfo_length = -1; static int hf_mq_xa_xainfo_value = -1; static int hf_mq_pmo_options_NOT_OWN_SUBS = -1; static int hf_mq_pmo_options_SUPPRESS_REPLYTO = -1; static int hf_mq_pmo_options_SCOPE_QMGR = -1; static int hf_mq_pmo_options_MD_FOR_OUTPUT_ONLY = -1; static int hf_mq_pmo_options_RETAIN = -1; static int hf_mq_pmo_options_WARN_IF_NO_SUBS_MATCHED = -1; static int hf_mq_pmo_options_RESOLVE_LOCAL_Q = -1; static int hf_mq_pmo_options_SYNC_RESPONSE = -1; static int hf_mq_pmo_options_ASYNC_RESPONSE = -1; static int hf_mq_pmo_options_LOGICAL_ORDER = -1; static int hf_mq_pmo_options_NO_CONTEXT = -1; static int hf_mq_pmo_options_FAIL_IF_QUIESCING = -1; static int hf_mq_pmo_options_ALTERNATE_USER_AUTHORITY = -1; static int hf_mq_pmo_options_SET_ALL_CONTEXT = -1; static int hf_mq_pmo_options_SET_IDENTITY_CONTEXT = -1; static int hf_mq_pmo_options_PASS_ALL_CONTEXT = -1; static int hf_mq_pmo_options_PASS_IDENTITY_CONTEXT = -1; static int hf_mq_pmo_options_NEW_CORREL_ID = -1; static int hf_mq_pmo_options_NEW_MSG_ID = -1; static int hf_mq_pmo_options_DEFAULT_CONTEXT = -1; static int hf_mq_pmo_options_NO_SYNCPOINT = -1; static int hf_mq_pmo_options_SYNCPOINT = -1; static const int *pf_flds_pmoopt[] = { &hf_mq_pmo_options_NOT_OWN_SUBS , &hf_mq_pmo_options_SUPPRESS_REPLYTO , &hf_mq_pmo_options_SCOPE_QMGR , &hf_mq_pmo_options_MD_FOR_OUTPUT_ONLY , &hf_mq_pmo_options_RETAIN , &hf_mq_pmo_options_WARN_IF_NO_SUBS_MATCHED , &hf_mq_pmo_options_RESOLVE_LOCAL_Q , &hf_mq_pmo_options_SYNC_RESPONSE , &hf_mq_pmo_options_ASYNC_RESPONSE , &hf_mq_pmo_options_LOGICAL_ORDER , &hf_mq_pmo_options_NO_CONTEXT , &hf_mq_pmo_options_FAIL_IF_QUIESCING , &hf_mq_pmo_options_ALTERNATE_USER_AUTHORITY, &hf_mq_pmo_options_SET_ALL_CONTEXT , &hf_mq_pmo_options_SET_IDENTITY_CONTEXT , &hf_mq_pmo_options_PASS_ALL_CONTEXT , &hf_mq_pmo_options_PASS_IDENTITY_CONTEXT , &hf_mq_pmo_options_NEW_CORREL_ID , &hf_mq_pmo_options_NEW_MSG_ID , &hf_mq_pmo_options_DEFAULT_CONTEXT , &hf_mq_pmo_options_NO_SYNCPOINT , &hf_mq_pmo_options_SYNCPOINT , NULL }; static int hf_mq_xa_tmflags_join = -1; static int hf_mq_xa_tmflags_endrscan = -1; static int hf_mq_xa_tmflags_startrscan = -1; static int hf_mq_xa_tmflags_suspend = -1; static int hf_mq_xa_tmflags_success = -1; static int hf_mq_xa_tmflags_resume = -1; static int hf_mq_xa_tmflags_fail = -1; static int hf_mq_xa_tmflags_onephase = -1; static const int *pf_flds_tmflags[] = { &hf_mq_xa_tmflags_onephase , &hf_mq_xa_tmflags_fail , &hf_mq_xa_tmflags_resume , &hf_mq_xa_tmflags_success , &hf_mq_xa_tmflags_suspend , &hf_mq_xa_tmflags_startrscan, &hf_mq_xa_tmflags_endrscan , &hf_mq_xa_tmflags_join , NULL }; static int hf_mq_msgreq_version = -1; static int hf_mq_msgreq_handle = -1; static int hf_mq_msgreq_RecvBytes = -1; static int hf_mq_msgreq_RqstBytes = -1; static int hf_mq_msgreq_MaxMsgLen = -1; static int hf_mq_msgreq_WaitIntrv = -1; static int hf_mq_msgreq_QueStatus = -1; static int hf_mq_msgreq_RqstFlags = -1; static int hf_mq_msgreq_GlbMsgIdx = -1; static int hf_mq_msgreq_SelectIdx = -1; static int hf_mq_msgreq_MQMDVers = -1; static int hf_mq_msgreq_ccsid = -1; static int hf_mq_msgreq_encoding = -1; static int hf_mq_msgreq_MsgSeqNum = -1; static int hf_mq_msgreq_offset = -1; static int hf_mq_msgreq_mtchMsgId = -1; static int hf_mq_msgreq_mtchCorId = -1; static int hf_mq_msgreq_mtchGrpid = -1; static int hf_mq_msgreq_mtchMsgTk = -1; static int hf_mq_msgasy_version = -1; static int hf_mq_msgasy_handle = -1; static int hf_mq_msgasy_MsgIndex = -1; static int hf_mq_msgasy_GlbMsgIdx = -1; static int hf_mq_msgasy_SegLength = -1; static int hf_mq_msgasy_SeleIndex = -1; static int hf_mq_msgasy_SegmIndex = -1; static int hf_mq_msgasy_ReasonCod = -1; static int hf_mq_msgasy_ActMsgLen = -1; static int hf_mq_msgasy_TotMsgLen = -1; static int hf_mq_msgasy_MsgToken = -1; static int hf_mq_msgasy_Status = -1; static int hf_mq_msgasy_resolQNLn = -1; static int hf_mq_msgasy_resolQNme = -1; static int hf_mq_msgasy_padding = -1; static int hf_mq_notif_vers = -1; static int hf_mq_notif_handle = -1; static int hf_mq_notif_code = -1; static int hf_mq_notif_value = -1; static int hf_mq_head_StructID = -1; static int hf_mq_head_version = -1; static int hf_mq_head_length = -1; static int hf_mq_head_encoding = -1; static int hf_mq_head_ccsid = -1; static int hf_mq_head_format = -1; static int hf_mq_head_flags = -1; static int hf_mq_head_struct = -1; static int hf_mq_dh_flags_newmsgid = -1; static const int *pf_flds_dh_flags[] = { &hf_mq_dh_flags_newmsgid, NULL }; static int hf_mq_dh_putmsgrecfld = -1; static int hf_mq_dh_recspresent = -1; static int hf_mq_dh_objrecofs = -1; static int hf_mq_dh_putmsgrecofs = -1; static int hf_mq_iih_flags_passexpir = -1; static int hf_mq_iih_flags_replyfmtnone = -1; static int hf_mq_iih_flags_ignorepurg = -1; static int hf_mq_iih_flags_cmqrqstresp = -1; static const int *pf_flds_iih_flags[] = { &hf_mq_iih_flags_cmqrqstresp , &hf_mq_iih_flags_ignorepurg , &hf_mq_iih_flags_replyfmtnone, &hf_mq_iih_flags_passexpir , NULL }; static int hf_mq_iih_ltermoverride = -1; static int hf_mq_iih_mfsmapname = -1; static int hf_mq_iih_replytofmt = -1; static int hf_mq_iih_authenticator = -1; static int hf_mq_iih_transinstid = -1; static int hf_mq_iih_transstate = -1; static int hf_mq_iih_commimode = -1; static int hf_mq_iih_securityscope = -1; static int hf_mq_iih_reserved = -1; static int hf_mq_cih_flags_synconret = -1; static int hf_mq_cih_flags_replywonulls = -1; static int hf_mq_cih_flags_passexpir = -1; static const int *pf_flds_cih_flags[] = { &hf_mq_cih_flags_synconret , &hf_mq_cih_flags_replywonulls, &hf_mq_cih_flags_passexpir , NULL }; static int hf_mq_cih_returncode = -1; static int hf_mq_cih_compcode = -1; static int hf_mq_cih_reasoncode = -1; static int hf_mq_cih_uowcontrols = -1; static int hf_mq_cih_getwaitintv = -1; static int hf_mq_cih_linktype = -1; static int hf_mq_cih_outdatalen = -1; static int hf_mq_cih_facilkeeptime = -1; static int hf_mq_cih_adsdescriptor = -1; static int hf_mq_cih_converstask = -1; static int hf_mq_cih_taskendstatus = -1; static int hf_mq_cih_bridgefactokn = -1; static int hf_mq_cih_function = -1; static int hf_mq_cih_abendcode = -1; static int hf_mq_cih_authenticator = -1; static int hf_mq_cih_reserved = -1; static int hf_mq_cih_replytofmt = -1; static int hf_mq_cih_remotesysid = -1; static int hf_mq_cih_remotetransid = -1; static int hf_mq_cih_transactionid = -1; static int hf_mq_cih_facilitylike = -1; static int hf_mq_cih_attentionid = -1; static int hf_mq_cih_startcode = -1; static int hf_mq_cih_cancelcode = -1; static int hf_mq_cih_nexttransid = -1; static int hf_mq_cih_reserved2 = -1; static int hf_mq_cih_reserved3 = -1; static int hf_mq_cih_cursorpos = -1; static int hf_mq_cih_erroroffset = -1; static int hf_mq_cih_inputitem = -1; static int hf_mq_cih_reserved4 = -1; static int hf_mq_rfh_ccsid = -1; static int hf_mq_rfh_length = -1; static int hf_mq_rfh_string = -1; static int hf_mq_rmh_flags_last = -1; static const int *pf_flds_rmh_flags[] = { &hf_mq_rmh_flags_last, NULL }; static int hf_mq_rmh_objecttype = -1; static int hf_mq_rmh_objectinstid = -1; static int hf_mq_rmh_srcenvlen = -1; static int hf_mq_rmh_srcenvofs = -1; static int hf_mq_rmh_srcnamelen = -1; static int hf_mq_rmh_srcnameofs = -1; static int hf_mq_rmh_dstenvlen = -1; static int hf_mq_rmh_dstenvofs = -1; static int hf_mq_rmh_dstnamelen = -1; static int hf_mq_rmh_dstnameofs = -1; static int hf_mq_rmh_datalogiclen = -1; static int hf_mq_rmh_datalogicofsl = -1; static int hf_mq_rmh_datalogicofsh = -1; static int hf_mq_wih_servicename = -1; static int hf_mq_wih_servicestep = -1; static int hf_mq_wih_msgtoken = -1; static int hf_mq_wih_reserved = -1; static gint ett_mq = -1; static gint ett_mq_tsh = -1; static gint ett_mq_tsh_tcf = -1; static gint ett_mq_tsh_tcf2 = -1; static gint ett_mq_api = -1; static gint ett_mq_socket = -1; static gint ett_mq_caut = -1; static gint ett_mq_msh = -1; static gint ett_mq_xqh = -1; static gint ett_mq_id = -1; static gint ett_mq_id_icf1 = -1; static gint ett_mq_id_icf2 = -1; static gint ett_mq_id_icf3 = -1; static gint ett_mq_id_ief1 = -1; static gint ett_mq_id_ief2 = -1; static gint ett_mq_uid = -1; static gint ett_mq_conn = -1; static gint ett_mq_fcno = -1; static gint ett_mq_msg = -1; static gint ett_mq_inq = -1; static gint ett_mq_spi = -1; static gint ett_mq_spi_base = -1; /* Factorisation of common SPI items */ static gint ett_mq_spi_options = -1; static gint ett_mq_put = -1; static gint ett_mq_open = -1; static gint ett_mq_open_option = -1; static gint ett_mq_close_option = -1; static gint ett_mq_fopa = -1; static gint ett_mq_ping = -1; static gint ett_mq_reset = -1; static gint ett_mq_status = -1; static gint ett_mq_od = -1; static gint ett_mq_od_objstr = -1; static gint ett_mq_od_selstr = -1; static gint ett_mq_od_resobjstr = -1; static gint ett_mq_or = -1; static gint ett_mq_rr = -1; static gint ett_mq_pmr = -1; static gint ett_mq_md = -1; static gint ett_mq_dlh = -1; static gint ett_mq_dh = -1; static gint ett_mq_gmo = -1; static gint ett_mq_gmo_option = -1; static gint ett_mq_gmo_matchoption = -1; static gint ett_mq_pmo = -1; static gint ett_mq_pmo_option = -1; static gint ett_mq_rfh_ValueName = -1; static gint ett_mq_lpoo = -1; static gint ett_mq_lpoo_options = -1; static gint ett_mq_lpoo_lpiopts = -1; static gint ett_mq_head = -1; /* Factorisation of common Header structure items (DH, MDE, CIH, IIH, RFH, RMH, WIH */ static gint ett_mq_head_flags = -1; static gint ett_mq_xa = -1; static gint ett_mq_xa_tmflags = -1; static gint ett_mq_xa_xid = -1; static gint ett_mq_xa_info = -1; static gint ett_mq_charv = -1; static gint ett_mq_reaasemb = -1; static gint ett_mq_notif = -1; static gint ett_mq_structid = -1; static dissector_handle_t mq_handle; static dissector_handle_t mq_spx_handle; static dissector_handle_t mqpcf_handle; static heur_dissector_list_t mq_heur_subdissector_list; static gboolean mq_desegment = TRUE; static gboolean mq_reassembly = TRUE; static gboolean mq_in_reassembly = FALSE; static reassembly_table mq_reassembly_table; #define MQ_PORT_TCP 1414 #define MQ_SOCKET_SPX 0x5E86 #define MQ_STRUCTID_NULL 0x00000000 #define MQ_STRUCTID_CAUT 0x43415554 #define MQ_STRUCTID_CIH 0x43494820 #define MQ_STRUCTID_DH 0x44482020 #define MQ_STRUCTID_DLH 0x444C4820 #define MQ_STRUCTID_FCNO 0x46434E4F /* FCNO */ #define MQ_STRUCTID_FOPA 0x464F5041 #define MQ_STRUCTID_GMO 0x474D4F20 #define MQ_STRUCTID_ID 0x49442020 #define MQ_STRUCTID_IIH 0x49494820 #define MQ_STRUCTID_LPOO 0x4C504F4F /* LPOO */ #define MQ_STRUCTID_MD 0x4D442020 #define MQ_STRUCTID_MDE 0x4D444520 #define MQ_STRUCTID_MSH 0x4D534820 #define MQ_STRUCTID_OD 0x4F442020 #define MQ_STRUCTID_PMO 0x504D4F20 #define MQ_STRUCTID_RFH 0x52464820 #define MQ_STRUCTID_RMH 0x524D4820 #define MQ_STRUCTID_SPxx 0x53500000 /* SPxx */ #define MQ_STRUCTID_SPxI 0x53500049 /* SPxI */ #define MQ_STRUCTID_SPxO 0x5350004F /* SPxO */ #define MQ_STRUCTID_SPxU 0x53500055 /* SPxU */ #define MQ_STRUCTID_SPAI 0x53504149 /* SPI Activate In */ #define MQ_STRUCTID_SPAO 0x5350414F /* SPI Activate Out */ #define MQ_STRUCTID_SPAU 0x53504155 /* SPI Activate InOut */ #define MQ_STRUCTID_SPGI 0x53504749 /* SPI Get In */ #define MQ_STRUCTID_SPGO 0x5350474F /* SPI Get Out */ #define MQ_STRUCTID_SPGU 0x53504755 /* SPI Get InOut */ #define MQ_STRUCTID_SPOI 0x53504F49 /* SPI In */ #define MQ_STRUCTID_SPOO 0x53504F4F /* SPI Out */ #define MQ_STRUCTID_SPOU 0x53504F55 /* SPI InOut */ #define MQ_STRUCTID_SPPI 0x53505049 /* SPI Put In */ #define MQ_STRUCTID_SPPO 0x5350504F /* SPI Put Out */ #define MQ_STRUCTID_SPPU 0x53505055 /* SPI Put InOut */ #define MQ_STRUCTID_SPQI 0x53505149 /* SPI Query In */ #define MQ_STRUCTID_SPQO 0x5350514F /* SPI Query Out */ #define MQ_STRUCTID_SPQU 0x53505155 /* SPI Query InOut */ #define MQ_STRUCTID_TM 0x544D2020 #define MQ_STRUCTID_TMC2 0x544D4332 #define MQ_MASK_TSHx 0xffffff00 #define MQ_STRUCTID_TSHx 0x54534800 /* TSHx */ #define MQ_STRUCTID_TSH 0x54534820 #define MQ_STRUCTID_TSHC 0x54534843 #define MQ_STRUCTID_TSHM 0x5453484D #define MQ_STRUCTID_UID 0x55494420 #define MQ_STRUCTID_WIH 0x57494820 #define MQ_STRUCTID_XQH 0x58514820 #define MQ_STRUCTID_CAUT_EBCDIC 0xC3C1E4E3 #define MQ_STRUCTID_CIH_EBCDIC 0xC3C9C840 #define MQ_STRUCTID_DH_EBCDIC 0xC4C84040 #define MQ_STRUCTID_DLH_EBCDIC 0xC4D3C840 #define MQ_STRUCTID_FCNO_EBCDIC 0xC6C3D5D6 /* FCNO */ #define MQ_STRUCTID_GMO_EBCDIC 0xC7D4D640 #define MQ_STRUCTID_ID_EBCDIC 0xC9C44040 #define MQ_STRUCTID_IIH_EBCDIC 0xC9C9C840 #define MQ_STRUCTID_LPOO_EBCDIC 0xD3D7D6D6 /* LPOO */ #define MQ_STRUCTID_MD_EBCDIC 0xD4C44040 #define MQ_STRUCTID_MDE_EBCDIC 0xD4C4C540 #define MQ_STRUCTID_MSH_EBCDIC 0xD4E2C840 #define MQ_STRUCTID_FOPA_EBCDIC 0xD64FD7C1 #define MQ_STRUCTID_OD_EBCDIC 0xD6C44040 #define MQ_STRUCTID_PMO_EBCDIC 0xD7D4D640 #define MQ_STRUCTID_RFH_EBCDIC 0xD9C6C840 #define MQ_STRUCTID_RMH_EBCDIC 0xD9D4C840 #define MQ_STRUCTID_SPxx_EBCDIC 0xE2D70000 /* SPxx */ #define MQ_STRUCTID_SPxI_EBCDIC 0xE2D700C9 /* SPxI */ #define MQ_STRUCTID_SPxO_EBCDIC 0xE2D700D6 /* SPxO */ #define MQ_STRUCTID_SPxU_EBCDIC 0xE2D700E4 /* SPxU */ #define MQ_STRUCTID_SPAI_EBCDIC 0xE2D7C1C9 /* SPI Activate In */ #define MQ_STRUCTID_SPAO_EBCDIC 0xE2D7C1D6 /* SPI Activate Out */ #define MQ_STRUCTID_SPAU_EBCDIC 0xE2D7C1E4 /* SPI Activate InOut */ #define MQ_STRUCTID_SPGI_EBCDIC 0xE2D7C7C9 /* SPI Get In */ #define MQ_STRUCTID_SPGO_EBCDIC 0xE2D7C7D6 /* SPI Get Out */ #define MQ_STRUCTID_SPGU_EBCDIC 0xE2D7C7E4 /* SPI Get InOut */ #define MQ_STRUCTID_SPOI_EBCDIC 0xE2D7D6C9 /* SPI In */ #define MQ_STRUCTID_SPOO_EBCDIC 0xE2D7D6D6 /* SPI Out */ #define MQ_STRUCTID_SPOU_EBCDIC 0xE2D7D6E4 /* SPI InOut */ #define MQ_STRUCTID_SPPI_EBCDIC 0xE2D7D7C9 /* SPI Put In */ #define MQ_STRUCTID_SPPO_EBCDIC 0xE2D7D7D6 /* SPI Put Out */ #define MQ_STRUCTID_SPPU_EBCDIC 0xE2D7D7E4 /* SPI Put InOut */ #define MQ_STRUCTID_SPQI_EBCDIC 0xE2D7D8C9 /* SPI Query In */ #define MQ_STRUCTID_SPQO_EBCDIC 0xE2D7D8D6 /* SPI Query Out */ #define MQ_STRUCTID_SPQU_EBCDIC 0xE2D7D8E4 /* SPI Query InOut */ #define MQ_STRUCTID_TM_EBCDIC 0xE3D44040 #define MQ_STRUCTID_TMC2_EBCDIC 0xE3D4C3F2 #define MQ_STRUCTID_TSHx_EBCDIC 0xE3E2C800 #define MQ_STRUCTID_TSH_EBCDIC 0xE3E2C840 #define MQ_STRUCTID_TSHC_EBCDIC 0xE3E2C8C3 #define MQ_STRUCTID_TSHM_EBCDIC 0xE3E2C8D4 #define MQ_STRUCTID_UID_EBCDIC 0xE4C9C440 #define MQ_STRUCTID_WIH_EBCDIC 0xE6C9C840 #define MQ_STRUCTID_XQH_EBCDIC 0xE7D8C840 #define MQ_MASK_SPxx 0xffff0000 #define MQ_MASK_SPxZ 0xffff00ff #define MQ_TST_INITIAL 0x01 #define MQ_TST_RESYNC 0x02 #define MQ_TST_RESET 0x03 #define MQ_TST_MESSAGE 0x04 #define MQ_TST_STATUS 0x05 #define MQ_TST_SECURITY 0x06 #define MQ_TST_PING 0x07 #define MQ_TST_USERID 0x08 #define MQ_TST_HEARTBEAT 0x09 #define MQ_TST_CONAUTH_INFO 0x0A #define MQ_TST_RENEGOTIATE_DATA 0x0B #define MQ_TST_SOCKET_ACTION 0x0C #define MQ_TST_ASYNC_MESSAGE 0x0D #define MQ_TST_REQUEST_MSGS 0x0E #define MQ_TST_NOTIFICATION 0x0F #define MQ_TST_MQCONN 0x81 #define MQ_TST_MQDISC 0x82 #define MQ_TST_MQOPEN 0x83 #define MQ_TST_MQCLOSE 0x84 #define MQ_TST_MQGET 0x85 #define MQ_TST_MQPUT 0x86 #define MQ_TST_MQPUT1 0x87 #define MQ_TST_MQSET 0x88 #define MQ_TST_MQINQ 0x89 #define MQ_TST_MQCMIT 0x8A #define MQ_TST_MQBACK 0x8B #define MQ_TST_SPI 0x8C #define MQ_TST_MQSTAT 0x8D #define MQ_TST_MQSUB 0x8E #define MQ_TST_MQSUBRQ 0x8F #define MQ_TST_MQCONN_REPLY 0x91 #define MQ_TST_MQDISC_REPLY 0x92 #define MQ_TST_MQOPEN_REPLY 0x93 #define MQ_TST_MQCLOSE_REPLY 0x94 #define MQ_TST_MQGET_REPLY 0x95 #define MQ_TST_MQPUT_REPLY 0x96 #define MQ_TST_MQPUT1_REPLY 0x97 #define MQ_TST_MQSET_REPLY 0x98 #define MQ_TST_MQINQ_REPLY 0x99 #define MQ_TST_MQCMIT_REPLY 0x9A #define MQ_TST_MQBACK_REPLY 0x9B #define MQ_TST_SPI_REPLY 0x9C #define MQ_TST_MQSTAT_REPLY 0x9D #define MQ_TST_MQSUB_REPLY 0x9E #define MQ_TST_MQSUBRQ_REPLY 0x9F #define MQ_TST_XA_START 0xA1 #define MQ_TST_XA_END 0xA2 #define MQ_TST_XA_OPEN 0xA3 #define MQ_TST_XA_CLOSE 0xA4 #define MQ_TST_XA_PREPARE 0xA5 #define MQ_TST_XA_COMMIT 0xA6 #define MQ_TST_XA_ROLLBACK 0xA7 #define MQ_TST_XA_FORGET 0xA8 #define MQ_TST_XA_RECOVER 0xA9 #define MQ_TST_XA_COMPLETE 0xAA #define MQ_TST_XA_START_REPLY 0xB1 #define MQ_TST_XA_END_REPLY 0xB2 #define MQ_TST_XA_OPEN_REPLY 0xB3 #define MQ_TST_XA_CLOSE_REPLY 0xB4 #define MQ_TST_XA_PREPARE_REPLY 0xB5 #define MQ_TST_XA_COMMIT_REPLY 0xB6 #define MQ_TST_XA_ROLLBACK_REPLY 0xB7 #define MQ_TST_XA_FORGET_REPLY 0xB8 #define MQ_TST_XA_RECOVER_REPLY 0xB9 #define MQ_TST_XA_COMPLETE_REPLY 0xBA #define MQ_SPI_QUERY 0x01 #define MQ_SPI_PUT 0x02 #define MQ_SPI_GET 0x03 #define MQ_SPI_ACTIVATE 0x04 #define MQ_SPI_OPEN 0x0C #define MQ_SPI_ACTIVATE_ENABLE 0x01 #define MQ_SPI_ACTIVATE_DISABLE 0x02 #define MQ_SPI_OPTIONS_BLANK_PADDED 0x01 #define MQ_SPI_OPTIONS_SYNCPOINT 0x02 #define MQ_SPI_OPTIONS_DEFERRED 0x04 #define MQ_TCF_CONFIRM_REQUEST 0x01 #define MQ_TCF_ERROR 0x02 #define MQ_TCF_REQUEST_CLOSE 0x04 #define MQ_TCF_CLOSE_CHANNEL 0x08 #define MQ_TCF_FIRST 0x10 #define MQ_TCF_LAST 0x20 #define MQ_TCF_REQUEST_ACCEPTED 0x40 #define MQ_TCF_DLQ_USED 0x80 #define MQ_TCF2_HDRCOMP 0x01 #define MQ_TCF2_MSGCOMP 0x02 #define MQ_TCF2_CSH 0x04 #define MQ_TCF2_CMIT_INTERVAL 0x08 #define MQ_ICF1_MSG_SEQ 0x01 #define MQ_ICF1_CONVERSION_CAPABLE 0x02 #define MQ_ICF1_SPLIT_MESSAGE 0x04 #define MQ_ICF1_REQUEST_INITIATION 0x08 #define MQ_ICF1_REQUEST_SECURITY 0x10 #define MQ_ICF1_MQREQUEST 0x20 #define MQ_ICF1_SVRCONN_SECURITY 0x40 #define MQ_ICF1_RUNTIME 0x80 #define MQ_ICF2_DIST_LIST_CAPABLE 0x01 #define MQ_ICF2_FAST_MESSAGES_REQUIRED 0x02 #define MQ_ICF2_RESPONDER_CONVERSION 0x04 #define MQ_ICF2_DUAL_UOW 0x08 #define MQ_ICF2_XAREQUEST 0x10 #define MQ_ICF2_XARUNTIME_APP 0x20 #define MQ_ICF2_SPIREQUEST 0x40 #define MQ_ICF2_TRACE_ROUTE_CAPABLE 0x80 #define MQ_ICF3_MSG_PROP_CAPABLE 0x01 #define MQ_ICF3_UNKNOWNX02 0x02 #define MQ_IEF1_CCSID 0x01 #define MQ_IEF1_ENCODING 0x02 #define MQ_IEF1_MAX_TRANSMISSION_SIZE 0x04 #define MQ_IEF1_FAP_LEVEL 0x08 #define MQ_IEF1_MAX_MSG_SIZE 0x10 #define MQ_IEF1_MAX_MSG_PER_BATCH 0x20 #define MQ_IEF1_SEQ_WRAP_VALUE 0x40 #define MQ_IEF1_HEARTBEAT_INTERVAL 0x80 #define MQ_IEF2_HDRCOMPLIST 0x01 #define MQ_IEF2_MSGCOMPLIST 0x02 #define MQ_IEF2_SSL_RESET 0x04 #define MQ_BIG_ENDIAN 0x01 #define MQ_LITTLE_ENDIAN 0x02 #define MQ_CONN_VERSION 0x01 #define MQ_CONNX_VERSION 0x03 #define MQ_STATUS_ERR_NO_CHANNEL 0x01 #define MQ_STATUS_ERR_CHANNEL_WRONG_TYPE 0x02 #define MQ_STATUS_ERR_QM_UNAVAILABLE 0x03 #define MQ_STATUS_ERR_MSG_SEQUENCE_ERROR 0x04 #define MQ_STATUS_ERR_QM_TERMINATING 0x05 #define MQ_STATUS_ERR_CAN_NOT_STORE 0x06 #define MQ_STATUS_ERR_USER_CLOSED 0x07 #define MQ_STATUS_ERR_TIMEOUT_EXPIRED 0x08 #define MQ_STATUS_ERR_TARGET_Q_UNKNOWN 0x09 #define MQ_STATUS_ERR_PROTOCOL_SEGMENT_TYPE 0x0A #define MQ_STATUS_ERR_PROTOCOL_LENGTH_ERROR 0x0B #define MQ_STATUS_ERR_PROTOCOL_INVALID_DATA 0x0C #define MQ_STATUS_ERR_PROTOCOL_SEGMENT_ERROR 0x0D #define MQ_STATUS_ERR_PROTOCOL_ID_ERROR 0x0E #define MQ_STATUS_ERR_PROTOCOL_MSH_ERROR 0x0F #define MQ_STATUS_ERR_PROTOCOL_GENERAL 0x10 #define MQ_STATUS_ERR_BATCH_FAILURE 0x11 #define MQ_STATUS_ERR_MESSAGE_LENGTH_ERROR 0x12 #define MQ_STATUS_ERR_SEGMENT_NUMBER_ERROR 0x13 #define MQ_STATUS_ERR_SECURITY_FAILURE 0x14 #define MQ_STATUS_ERR_WRAP_VALUE_ERROR 0x15 #define MQ_STATUS_ERR_CHANNEL_UNAVAILABLE 0x16 #define MQ_STATUS_ERR_CLOSED_BY_EXIT 0x17 #define MQ_STATUS_ERR_CIPHER_SPEC 0x18 #define MQ_STATUS_ERR_PEER_NAME 0x19 #define MQ_STATUS_ERR_SSL_CLIENT_CERTIFICATE 0x1A #define MQ_STATUS_ERR_RMT_RSRCS_IN_RECOVERY 0x1B #define MQ_STATUS_ERR_SSL_REFRESHING 0x1C #define MQ_STATUS_ERR_INVALID_HOBJ 0x1D #define MQ_STATUS_ERR_CONV_ID_ERROR 0x1E #define MQ_STATUS_ERR_SOCKET_ACTION_TYPE 0x1F #define MQ_STATUS_ERR_STANDBY_Q_MGR 0x20 #define MQ_STATUS_ERR_CCSID_NOT_SUPPORTED 0xF0 #define MQ_STATUS_ERR_ENCODING_INVALID 0xF1 #define MQ_STATUS_ERR_FAP_LEVEL 0xF2 #define MQ_STATUS_ERR_NEGOTIATION_FAILED 0xF3 /* These errors codes are documented in javax.transaction.xa.XAException */ #define MQ_XA_RBROLLBACK 100 #define MQ_XA_RBCOMMFAIL 101 #define MQ_XA_RBDEADLOCK 102 #define MQ_XA_RBINTEGRITY 103 #define MQ_XA_RBOTHER 104 #define MQ_XA_RBPROTO 105 #define MQ_XA_RBTIMEOUT 106 #define MQ_XA_RBTRANSIENT 107 #define MQ_XA_NOMIGRATE 9 #define MQ_XA_HEURHAZ 8 #define MQ_XA_HEURCOM 7 #define MQ_XA_HEURRB 6 #define MQ_XA_HEURMIX 5 #define MQ_XA_RETRY 4 #define MQ_XA_RDONLY 3 #define MQ_XA_OK 0 #define MQ_XAER_ASYNC -2 #define MQ_XAER_RMERR -3 #define MQ_XAER_NOTA -4 #define MQ_XAER_INVAL -5 #define MQ_XAER_PROTO -6 #define MQ_XAER_RMFAIL -7 #define MQ_XAER_DUPID -8 #define MQ_XAER_OUTSIDE -9 /* These flags are documented in javax.transaction.xa.XAResource */ #define MQ_XA_TMNOFLAGS 0 #define MQ_XA_TMJOIN 0x200000 #define MQ_XA_TMENDRSCAN 0x800000 #define MQ_XA_TMSTARTRSCAN 0x1000000 #define MQ_XA_TMSUSPEND 0x2000000 #define MQ_XA_TMSUCCESS 0x4000000 #define MQ_XA_TMRESUME 0x8000000 #define MQ_XA_TMFAIL 0x20000000 #define MQ_XA_TMONEPHASE 0x40000000 #define MQ_PMRF_NONE 0x00 #define MQ_PMRF_MSG_ID 0x01 #define MQ_PMRF_CORREL_ID 0x02 #define MQ_PMRF_GROUP_ID 0x04 #define MQ_PMRF_FEEDBACK 0x08 #define MQ_PMRF_ACCOUNTING_TOKEN 0x10 /* MQ structures */ /* Undocumented structures */ #define MQ_TEXT_TSH "Transmission Segment Header" #define MQ_TEXT_TSHC "Transmission Segment Header Common" #define MQ_TEXT_TSHM "Transmission Segment Header Multiplexed" #define MQ_TEXT_FCNO "F Connect Option" #define MQ_TEXT_API "API Header" #define MQ_TEXT_SOCKET "Socket Action" #define MQ_TEXT_ID "Initial Data" #define MQ_TEXT_UID "User Id Data" #define MQ_TEXT_MSH "Message Segment Header" #define MQ_TEXT_CAUT "Connection Authority" #define MQ_TEXT_CONN "MQCONN" #define MQ_TEXT_INQ "MQINQ/MQSET" #define MQ_TEXT_PUT "MQPUT/MQGET" #define MQ_TEXT_OPEN "MQOPEN/MQCLOSE" #define MQ_TEXT_REQMSG "REQUEST MESSAGE" #define MQ_TEXT_ASYMSG "ASYNC MESSAGE" #define MQ_TEXT_NOTIFICATION "NOTIFICATION" #define MQ_TEXT_BIND_READAHEAD_AS_Q_DEF "Bind/Read Ahead As Q Def" #define MQ_TEXT_IMMEDIATE_NONE "Close Immediate/No option" #define MQ_TEXT_MQPMO_NONE "Resp as Q Def/Resp as Topic Def/None" #define MQ_TEXT_MQGMO_NONE "No Wait/Prop as Q Def/None" #define MQ_TEXT_MQMO_NONE "None" #define MQ_TEXT_LPOOOPT_NONE "None" #define MQ_TEXT_PING "PING" #define MQ_TEXT_RESET "RESET" #define MQ_TEXT_STAT "STATUS" #define MQ_TEXT_SPI "SPI" #define MQ_TEXT_XA "XA" #define MQ_TEXT_XID "Xid" #define MQ_TEXT_XINF "XA_info" #define MQ_TEXT_SPQU "SPI Query InOut" #define MQ_TEXT_SPQI "SPI Query In" #define MQ_TEXT_SPQO "SPI Query Out" #define MQ_TEXT_SPPU "SPI Put InOut" #define MQ_TEXT_SPPI "SPI Put In" #define MQ_TEXT_SPPO "SPI Put Out" #define MQ_TEXT_SPGU "SPI Get InOut" #define MQ_TEXT_SPGI "SPI Get In" #define MQ_TEXT_SPGO "SPI Get Out" #define MQ_TEXT_SPAU "SPI Activate InOut" #define MQ_TEXT_SPAI "SPI Activate In" #define MQ_TEXT_SPAO "SPI Activate Out" #define MQ_TEXT_SPOU "SPI InOut" #define MQ_TEXT_SPOI "SPI In" #define MQ_TEXT_SPOO "SPI Out" #define MQ_TEXT_LPOO "LPOO" #define MQ_TEXT_FOPA "FOPA" /* Documented structures with structid */ #define MQ_TEXT_CIH "CICS bridge Header" #define MQ_TEXT_DH "Distribution Header" #define MQ_TEXT_DLH "Dead-Letter Header" #define MQ_TEXT_GMO "Get Message Options" #define MQ_TEXT_IIH "IMS Information Header" #define MQ_TEXT_MD "Message Descriptor" #define MQ_TEXT_MDE "Message Descriptor Extension" #define MQ_TEXT_OD "Object Descriptor" #define MQ_TEXT_PMO "Put Message Options" #define MQ_TEXT_RMH "Reference Message Header" #define MQ_TEXT_RFH "Rules and Formatting Header" #define MQ_TEXT_TM "Trigger Message" #define MQ_TEXT_TMC2 "Trigger Message 2 (character format)" #define MQ_TEXT_WIH "Work Information Header" #define MQ_TEXT_XQH "Transmission Queue Header" /* Documented structures without structid */ #define MQ_TEXT_OR "Object Record" #define MQ_TEXT_PMR "Put Message Record" #define MQ_TEXT_RR "Response Record" #define MQ_NC_GET_INHIBITED 1 #define MQ_NC_GET_ALLOWED 2 #define MQ_NC_CONN_STATE 3 #define MQ_NC_CONN_STATE_REPLY 4 #define MQ_NC_Q_STATE 5 #define MQ_NC_Q_STATE_REPLY 6 #define MQ_NC_QM_QUIESCING 7 #define MQ_NC_TXN_ALLOWED 8 #define MQ_NC_TXN_REVOKE 9 #define MQ_NC_TXN_REVOKE_REPLY 10 #define MQ_NC_CHECK_MSG 11 #define MQ_NC_BROWSE_FIRST 12 #define MQ_NC_MESSAGE_TOO_LARGE 13 #define MQ_NC_STREAMING_FAILURE 14 #define MQ_NC_CLIENT_ASYNC_EMPTY 15 #define MQ_NC_STREAMING_TXN_PAUSED 16 #define MQ_NC_RECONNECTION_COMPLETE 17 DEF_VALSB(notifcode) DEF_VALS2(NC_GET_INHIBITED , "GET_INHIBITED"), DEF_VALS2(NC_GET_ALLOWED , "GET_ALLOWED"), DEF_VALS2(NC_CONN_STATE , "CONN_STATE"), DEF_VALS2(NC_CONN_STATE_REPLY , "CONN_STATE_REPLY"), DEF_VALS2(NC_Q_STATE , "Q_STATE"), DEF_VALS2(NC_Q_STATE_REPLY , "Q_STATE_REPLY"), DEF_VALS2(NC_QM_QUIESCING , "QM_QUIESCING"), DEF_VALS2(NC_TXN_ALLOWED , "TXN_ALLOWED"), DEF_VALS2(NC_TXN_REVOKE , "TXN_REVOKE"), DEF_VALS2(NC_TXN_REVOKE_REPLY , "TXN_REVOKE_REPLY"), DEF_VALS2(NC_CHECK_MSG , "CHECK_MSG"), DEF_VALS2(NC_BROWSE_FIRST , "BROWSE_FIRST"), DEF_VALS2(NC_MESSAGE_TOO_LARGE , "MESSAGE_TOO_LARGE"), DEF_VALS2(NC_STREAMING_FAILURE , "STREAMING_FAILURE"), DEF_VALS2(NC_CLIENT_ASYNC_EMPTY, "CLIENT_ASYNC_EMPTY"), DEF_VALS2(NC_STREAMING_TXN_PAUSED, "STREAMING_TXN_PAUSED"), DEF_VALS2(NC_RECONNECTION_COMPLETE, "RECONNECTION_COMPLETE"), DEF_VALSE; DEF_VALSB(spi_verbs) DEF_VALS2(SPI_QUERY , "QUERY"), DEF_VALS2(SPI_PUT , "PUT"), DEF_VALS2(SPI_GET , "GET"), DEF_VALS2(SPI_ACTIVATE, "ACTIVATE"), DEF_VALS2(SPI_OPEN , "OPEN"), DEF_VALSE; DEF_VALSB(spi_activate) DEF_VALS2(SPI_ACTIVATE_ENABLE , "ENABLE"), DEF_VALS2(SPI_ACTIVATE_DISABLE, "DISABLE"), DEF_VALSE; DEF_VALSB(status) /* 1*/ DEF_VALS2(STATUS_ERR_NO_CHANNEL , "NO_CHANNEL"), /* 2*/ DEF_VALS2(STATUS_ERR_CHANNEL_WRONG_TYPE , "CHANNEL_WRONG_TYPE"), /* 3*/ DEF_VALS2(STATUS_ERR_QM_UNAVAILABLE , "QM_UNAVAILABLE"), /* 4*/ DEF_VALS2(STATUS_ERR_MSG_SEQUENCE_ERROR , "MSG_SEQUENCE_ERROR"), /* 5*/ DEF_VALS2(STATUS_ERR_QM_TERMINATING , "QM_TERMINATING"), /* 6*/ DEF_VALS2(STATUS_ERR_CAN_NOT_STORE , "CAN_NOT_STORE"), /* 7*/ DEF_VALS2(STATUS_ERR_USER_CLOSED , "USER_CLOSED"), /* 10*/ DEF_VALS2(STATUS_ERR_PROTOCOL_SEGMENT_TYPE , "REMOTE_PROTOCOL_ERROR"), /* 11*/ DEF_VALS2(STATUS_ERR_PROTOCOL_LENGTH_ERROR , "BIND_FAILED"), /* 12*/ DEF_VALS2(STATUS_ERR_PROTOCOL_INVALID_DATA , "MSGWRAP_DIFFERENT"), /* 14*/ DEF_VALS2(STATUS_ERR_PROTOCOL_ID_ERROR , "REMOTE_CHANNEL_UNAVAILABLE"), /* 15*/ DEF_VALS2(STATUS_ERR_PROTOCOL_MSH_ERROR , "TERMINATED_BY_REMOTE_EXIT"), /* 16*/ DEF_VALS2(STATUS_ERR_PROTOCOL_GENERAL , "PROTOCOL_GENERAL"), /* 17*/ DEF_VALS2(STATUS_ERR_BATCH_FAILURE , "BATCH_FAILURE"), /* 18*/ DEF_VALS2(STATUS_ERR_MESSAGE_LENGTH_ERROR , "MESSAGE_LENGTH_ERROR"), /* 19*/ DEF_VALS2(STATUS_ERR_SEGMENT_NUMBER_ERROR , "SEGMENT_NUMBER_ERROR"), /* 20*/ DEF_VALS2(STATUS_ERR_SECURITY_FAILURE , "SECURITY_FAILURE"), /* 21*/ DEF_VALS2(STATUS_ERR_WRAP_VALUE_ERROR , "WRAP_VALUE_ERROR"), /* 22*/ DEF_VALS2(STATUS_ERR_CHANNEL_UNAVAILABLE , "CHANNEL_UNAVAILABLE"), /* 23*/ DEF_VALS2(STATUS_ERR_CLOSED_BY_EXIT , "CLOSED_BY_EXIT"), /* 24*/ DEF_VALS2(STATUS_ERR_CIPHER_SPEC , "CIPHER_SPEC"), /* 25*/ DEF_VALS2(STATUS_ERR_PEER_NAME , "PEER_NAME"), /* 26*/ DEF_VALS2(STATUS_ERR_SSL_CLIENT_CERTIFICATE, "SSL_CLIENT_CERTIFICATE"), /* 27*/ DEF_VALS2(STATUS_ERR_RMT_RSRCS_IN_RECOVERY , "RMT_RSRCS_IN_RECOVERY"), /* 28*/ DEF_VALS2(STATUS_ERR_SSL_REFRESHING , "SSL_REFRESHING"), /* 29*/ DEF_VALS2(STATUS_ERR_INVALID_HOBJ , "INVALID_HOBJ"), /* 30*/ DEF_VALS2(STATUS_ERR_CONV_ID_ERROR , "CONV_ID_ERROR"), /* 31*/ DEF_VALS2(STATUS_ERR_SOCKET_ACTION_TYPE , "SOCKET_ACTION_TYPE"), /* 32*/ DEF_VALS2(STATUS_ERR_STANDBY_Q_MGR , "STANDBY_Q_MGR"), /* 240*/ DEF_VALS2(STATUS_ERR_CCSID_NOT_SUPPORTED , "CCSID_NOT_SUPPORTED"), /* 241*/ DEF_VALS2(STATUS_ERR_ENCODING_INVALID , "ENCODING_INVALID"), /* 242*/ DEF_VALS2(STATUS_ERR_FAP_LEVEL , "FAP_LEVEL"), /* 243*/ DEF_VALS2(STATUS_ERR_NEGOTIATION_FAILED , "NEGOTIATION_FAILED"), DEF_VALSE; DEF_VALS_EXTB(status); DEF_VALSB(opcode) /* 1*/ DEF_VALS2(TST_INITIAL , "INITIAL_DATA"), /* 2*/ DEF_VALS2(TST_RESYNC , "RESYNC_DATA"), /* 3*/ DEF_VALS2(TST_RESET , "RESET_DATA"), /* 4*/ DEF_VALS2(TST_MESSAGE , "MESSAGE_DATA"), /* 5*/ DEF_VALS2(TST_STATUS , "STATUS_DATA"), /* 6*/ DEF_VALS2(TST_SECURITY , "SECURITY_DATA"), /* 7*/ DEF_VALS2(TST_PING , "PING_DATA"), /* 8*/ DEF_VALS2(TST_USERID , "USERID_DATA"), /* 9*/ DEF_VALS2(TST_HEARTBEAT , "HEARTBEAT"), /* 10*/ DEF_VALS2(TST_CONAUTH_INFO , "CONAUTH_INFO"), /* 11*/ DEF_VALS2(TST_RENEGOTIATE_DATA , "RENEGOTIATE_DATA"), /* 12*/ DEF_VALS2(TST_SOCKET_ACTION , "SOCKET_ACTION"), /* 13*/ DEF_VALS2(TST_ASYNC_MESSAGE , "ASYNC_MESSAGE"), /* 14*/ DEF_VALS2(TST_REQUEST_MSGS , "REQUEST_MSGS"), /* 15*/ DEF_VALS2(TST_NOTIFICATION , "NOTIFICATION"), /* 129*/ DEF_VALS2(TST_MQCONN , "MQCONN"), /* 130*/ DEF_VALS2(TST_MQDISC , "MQDISC"), /* 131*/ DEF_VALS2(TST_MQOPEN , "MQOPEN"), /* 132*/ DEF_VALS2(TST_MQCLOSE , "MQCLOSE"), /* 133*/ DEF_VALS2(TST_MQGET , "MQGET"), /* 134*/ DEF_VALS2(TST_MQPUT , "MQPUT"), /* 135*/ DEF_VALS2(TST_MQPUT1 , "MQPUT1"), /* 136*/ DEF_VALS2(TST_MQSET , "MQSET"), /* 137*/ DEF_VALS2(TST_MQINQ , "MQINQ"), /* 138*/ DEF_VALS2(TST_MQCMIT , "MQCMIT"), /* 139*/ DEF_VALS2(TST_MQBACK , "MQBACK"), /* 140*/ DEF_VALS2(TST_SPI , "SPI"), /* 141*/ DEF_VALS2(TST_MQSTAT , "MQSTAT"), /* 142*/ DEF_VALS2(TST_MQSUB , "MQSUB"), /* 143*/ DEF_VALS2(TST_MQSUBRQ , "MQSUBRQ"), /* 145*/ DEF_VALS2(TST_MQCONN_REPLY , "MQCONN_REPLY"), /* 146*/ DEF_VALS2(TST_MQDISC_REPLY , "MQDISC_REPLY"), /* 147*/ DEF_VALS2(TST_MQOPEN_REPLY , "MQOPEN_REPLY"), /* 148*/ DEF_VALS2(TST_MQCLOSE_REPLY , "MQCLOSE_REPLY"), /* 149*/ DEF_VALS2(TST_MQGET_REPLY , "MQGET_REPLY"), /* 150*/ DEF_VALS2(TST_MQPUT_REPLY , "MQPUT_REPLY"), /* 151*/ DEF_VALS2(TST_MQPUT1_REPLY , "MQPUT1_REPLY"), /* 152*/ DEF_VALS2(TST_MQSET_REPLY , "MQSET_REPLY"), /* 153*/ DEF_VALS2(TST_MQINQ_REPLY , "MQINQ_REPLY"), /* 154*/ DEF_VALS2(TST_MQCMIT_REPLY , "MQCMIT_REPLY"), /* 155*/ DEF_VALS2(TST_MQBACK_REPLY , "MQBACK_REPLY"), /* 156*/ DEF_VALS2(TST_SPI_REPLY , "SPI_REPLY"), /* 157*/ DEF_VALS2(TST_MQSTAT_REPLY , "MQSTAT_REPLY"), /* 158*/ DEF_VALS2(TST_MQSUB_REPLY , "MQSUB_REPLY"), /* 159*/ DEF_VALS2(TST_MQSUBRQ_REPLY , "MQSUBRQ_REPLY"), /* 161*/ DEF_VALS2(TST_XA_START , "XA_START"), /* 162*/ DEF_VALS2(TST_XA_END , "XA_END"), /* 163*/ DEF_VALS2(TST_XA_OPEN , "XA_OPEN"), /* 164*/ DEF_VALS2(TST_XA_CLOSE , "XA_CLOSE"), /* 165*/ DEF_VALS2(TST_XA_PREPARE , "XA_PREPARE"), /* 166*/ DEF_VALS2(TST_XA_COMMIT , "XA_COMMIT"), /* 167*/ DEF_VALS2(TST_XA_ROLLBACK , "XA_ROLLBACK"), /* 168*/ DEF_VALS2(TST_XA_FORGET , "XA_FORGET"), /* 169*/ DEF_VALS2(TST_XA_RECOVER , "XA_RECOVER"), /* 170*/ DEF_VALS2(TST_XA_COMPLETE , "XA_COMPLETE"), /* 177*/ DEF_VALS2(TST_XA_START_REPLY , "XA_START_REPLY"), /* 178*/ DEF_VALS2(TST_XA_END_REPLY , "XA_END_REPLY"), /* 179*/ DEF_VALS2(TST_XA_OPEN_REPLY , "XA_OPEN_REPLY"), /* 180*/ DEF_VALS2(TST_XA_CLOSE_REPLY , "XA_CLOSE_REPLY"), /* 181*/ DEF_VALS2(TST_XA_PREPARE_REPLY , "XA_PREPARE_REPLY"), /* 182*/ DEF_VALS2(TST_XA_COMMIT_REPLY , "XA_COMMIT_REPLY"), /* 183*/ DEF_VALS2(TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY"), /* 184*/ DEF_VALS2(TST_XA_FORGET_REPLY , "XA_FORGET_REPLY"), /* 185*/ DEF_VALS2(TST_XA_RECOVER_REPLY , "XA_RECOVER_REPLY"), /* 186*/ DEF_VALS2(TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY"), DEF_VALSE; DEF_VALS_EXTB(opcode); DEF_VALSB(xaer) DEF_VALS2(XA_RBROLLBACK , "XA_RBROLLBACK"), DEF_VALS2(XA_RBCOMMFAIL , "XA_RBCOMMFAIL"), DEF_VALS2(XA_RBDEADLOCK , "XA_RBDEADLOCK"), DEF_VALS2(XA_RBINTEGRITY, "XA_RBINTEGRITY"), DEF_VALS2(XA_RBOTHER , "XA_RBOTHER"), DEF_VALS2(XA_RBPROTO , "XA_RBPROTO"), DEF_VALS2(XA_RBTIMEOUT , "XA_RBTIMEOUT"), DEF_VALS2(XA_RBTRANSIENT, "XA_RBTRANSIENT"), DEF_VALS2(XA_NOMIGRATE , "XA_NOMIGRATE"), DEF_VALS2(XA_HEURHAZ , "XA_HEURHAZ"), DEF_VALS2(XA_HEURCOM , "XA_HEURCOM"), DEF_VALS2(XA_HEURRB , "XA_HEURRB"), DEF_VALS2(XA_HEURMIX , "XA_HEURMIX"), DEF_VALS2(XA_RETRY , "XA_RETRY"), DEF_VALS2(XA_RDONLY , "XA_RDONLY"), DEF_VALS2(XA_OK , "XA_OK"), DEF_VALS2(XAER_ASYNC , "XAER_ASYNC"), DEF_VALS2(XAER_RMERR , "XAER_RMERR"), DEF_VALS2(XAER_NOTA , "XAER_NOTA"), DEF_VALS2(XAER_INVAL , "XAER_INVAL"), DEF_VALS2(XAER_PROTO , "XAER_PROTO"), DEF_VALS2(XAER_RMFAIL , "XAER_RMFAIL"), DEF_VALS2(XAER_DUPID , "XAER_DUPID"), DEF_VALS2(XAER_OUTSIDE , "XAER_OUTSIDE"), DEF_VALSE; DEF_VALSB(StructID) DEF_VALS2(STRUCTID_CAUT , MQ_TEXT_CAUT), DEF_VALS2(STRUCTID_CIH , MQ_TEXT_CIH), DEF_VALS2(STRUCTID_DH , MQ_TEXT_DH), DEF_VALS2(STRUCTID_DLH , MQ_TEXT_DLH), DEF_VALS2(STRUCTID_FCNO , MQ_TEXT_FCNO), DEF_VALS2(STRUCTID_FOPA , MQ_TEXT_FOPA), DEF_VALS2(STRUCTID_GMO , MQ_TEXT_GMO), DEF_VALS2(STRUCTID_ID , MQ_TEXT_ID), DEF_VALS2(STRUCTID_IIH , MQ_TEXT_IIH), DEF_VALS2(STRUCTID_LPOO , MQ_TEXT_LPOO), DEF_VALS2(STRUCTID_MD , MQ_TEXT_MD), DEF_VALS2(STRUCTID_MDE , MQ_TEXT_MDE), DEF_VALS2(STRUCTID_MSH , MQ_TEXT_MSH), DEF_VALS2(STRUCTID_OD , MQ_TEXT_OD), DEF_VALS2(STRUCTID_PMO , MQ_TEXT_PMO), DEF_VALS2(STRUCTID_RFH , MQ_TEXT_RFH), DEF_VALS2(STRUCTID_RMH , MQ_TEXT_RMH), DEF_VALS2(STRUCTID_SPAI , MQ_TEXT_SPAI), DEF_VALS2(STRUCTID_SPAO , MQ_TEXT_SPAO), DEF_VALS2(STRUCTID_SPAU , MQ_TEXT_SPAU), DEF_VALS2(STRUCTID_SPGI , MQ_TEXT_SPGI), DEF_VALS2(STRUCTID_SPGO , MQ_TEXT_SPGO), DEF_VALS2(STRUCTID_SPGU , MQ_TEXT_SPGU), DEF_VALS2(STRUCTID_SPOI , MQ_TEXT_SPOI), DEF_VALS2(STRUCTID_SPOO , MQ_TEXT_SPOO), DEF_VALS2(STRUCTID_SPOU , MQ_TEXT_SPOU), DEF_VALS2(STRUCTID_SPPI , MQ_TEXT_SPPI), DEF_VALS2(STRUCTID_SPPO , MQ_TEXT_SPPO), DEF_VALS2(STRUCTID_SPPU , MQ_TEXT_SPPU), DEF_VALS2(STRUCTID_SPQI , MQ_TEXT_SPQI), DEF_VALS2(STRUCTID_SPQO , MQ_TEXT_SPQO), DEF_VALS2(STRUCTID_SPQU , MQ_TEXT_SPQU), DEF_VALS2(STRUCTID_TM , MQ_TEXT_TM), DEF_VALS2(STRUCTID_TMC2 , MQ_TEXT_TMC2), DEF_VALS2(STRUCTID_TSH , MQ_TEXT_TSH), DEF_VALS2(STRUCTID_TSHC , MQ_TEXT_TSHC), DEF_VALS2(STRUCTID_TSHM , MQ_TEXT_TSHM), DEF_VALS2(STRUCTID_UID , MQ_TEXT_UID), DEF_VALS2(STRUCTID_WIH , MQ_TEXT_WIH), DEF_VALS2(STRUCTID_XQH , MQ_TEXT_XQH), DEF_VALS2(STRUCTID_CAUT_EBCDIC, MQ_TEXT_CAUT), DEF_VALS2(STRUCTID_CIH_EBCDIC , MQ_TEXT_CIH), DEF_VALS2(STRUCTID_DH_EBCDIC , MQ_TEXT_DH), DEF_VALS2(STRUCTID_DLH_EBCDIC , MQ_TEXT_DLH), DEF_VALS2(STRUCTID_FCNO_EBCDIC, MQ_TEXT_FCNO), DEF_VALS2(STRUCTID_GMO_EBCDIC , MQ_TEXT_GMO), DEF_VALS2(STRUCTID_ID_EBCDIC , MQ_TEXT_ID), DEF_VALS2(STRUCTID_IIH_EBCDIC , MQ_TEXT_IIH), DEF_VALS2(STRUCTID_LPOO_EBCDIC, MQ_TEXT_LPOO), DEF_VALS2(STRUCTID_MD_EBCDIC , MQ_TEXT_MD), DEF_VALS2(STRUCTID_MDE_EBCDIC , MQ_TEXT_MDE), DEF_VALS2(STRUCTID_FOPA_EBCDIC, MQ_TEXT_FOPA), DEF_VALS2(STRUCTID_OD_EBCDIC , MQ_TEXT_OD), DEF_VALS2(STRUCTID_PMO_EBCDIC , MQ_TEXT_PMO), DEF_VALS2(STRUCTID_RFH_EBCDIC , MQ_TEXT_RFH), DEF_VALS2(STRUCTID_RMH_EBCDIC , MQ_TEXT_RMH), DEF_VALS2(STRUCTID_SPAI_EBCDIC, MQ_TEXT_SPAI), DEF_VALS2(STRUCTID_SPAO_EBCDIC, MQ_TEXT_SPAO), DEF_VALS2(STRUCTID_SPAU_EBCDIC, MQ_TEXT_SPAU), DEF_VALS2(STRUCTID_SPGI_EBCDIC, MQ_TEXT_SPGI), DEF_VALS2(STRUCTID_SPGO_EBCDIC, MQ_TEXT_SPGO), DEF_VALS2(STRUCTID_SPGU_EBCDIC, MQ_TEXT_SPGU), DEF_VALS2(STRUCTID_SPOI_EBCDIC, MQ_TEXT_SPOI), DEF_VALS2(STRUCTID_SPOO_EBCDIC, MQ_TEXT_SPOO), DEF_VALS2(STRUCTID_SPOU_EBCDIC, MQ_TEXT_SPOU), DEF_VALS2(STRUCTID_SPPI_EBCDIC, MQ_TEXT_SPPI), DEF_VALS2(STRUCTID_SPPO_EBCDIC, MQ_TEXT_SPPO), DEF_VALS2(STRUCTID_SPPU_EBCDIC, MQ_TEXT_SPPU), DEF_VALS2(STRUCTID_SPQI_EBCDIC, MQ_TEXT_SPQI), DEF_VALS2(STRUCTID_SPQO_EBCDIC, MQ_TEXT_SPQO), DEF_VALS2(STRUCTID_SPQU_EBCDIC, MQ_TEXT_SPQU), DEF_VALS2(STRUCTID_TM_EBCDIC , MQ_TEXT_TM), DEF_VALS2(STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2), DEF_VALS2(STRUCTID_TSH_EBCDIC , MQ_TEXT_TSH), DEF_VALS2(STRUCTID_TSHC_EBCDIC, MQ_TEXT_TSHC), DEF_VALS2(STRUCTID_TSHM_EBCDIC, MQ_TEXT_TSHM), DEF_VALS2(STRUCTID_UID_EBCDIC , MQ_TEXT_UID), DEF_VALS2(STRUCTID_WIH_EBCDIC , MQ_TEXT_WIH), DEF_VALS2(STRUCTID_XQH_EBCDIC , MQ_TEXT_XQH), DEF_VALSE; DEF_VALS_EXTB(StructID); DEF_VALSB(byteorder) DEF_VALS2(LITTLE_ENDIAN, "Little endian"), DEF_VALS2(BIG_ENDIAN , "Big endian"), DEF_VALSE; DEF_VALSB(conn_version) DEF_VALS2(CONN_VERSION , "MQCONN"), DEF_VALS2(CONNX_VERSION, "MQCONNX"), DEF_VALSE; DEF_VALSB(sidtype) DEF_VALS1(MQSIDT_NONE), DEF_VALS1(MQSIDT_NT_SECURITY_ID), DEF_VALS1(MQSIDT_WAS_SECURITY_ID), DEF_VALSE; static gint dissect_mq_encoding(proto_tree *tree, int hfindex, tvbuff_t *tvb, const gint start, gint length, const guint encoding) { gchar sEnc[128] = ""; gchar *pEnc; guint uEnc; if (length == 2) { uEnc = (gint)tvb_get_guint16(tvb, start, encoding); } else { uEnc = tvb_get_guint32(tvb, start, encoding); } pEnc = sEnc; #define CHECK_ENC(M, T) ((uEnc & M) == T) #define DOPRT(A) pEnc += g_snprintf(pEnc, (gulong)(sizeof(sEnc)-1-(pEnc-sEnc)), A); if (CHECK_ENC(MQ_MQENC_FLOAT_MASK, MQ_MQENC_FLOAT_UNDEFINED)) { DOPRT("FLT_UNDEFINED"); } else if (CHECK_ENC(MQ_MQENC_FLOAT_MASK, MQ_MQENC_FLOAT_IEEE_NORMAL)) { DOPRT("FLT_IEEE_NORMAL"); } else if (CHECK_ENC(MQ_MQENC_FLOAT_MASK, MQ_MQENC_FLOAT_IEEE_REVERSED)) { DOPRT("FLT_IEEE_REVERSED"); } else if (CHECK_ENC(MQ_MQENC_FLOAT_MASK, MQ_MQENC_FLOAT_S390)) { DOPRT("FLT_S390"); } else if (CHECK_ENC(MQ_MQENC_FLOAT_MASK, MQ_MQENC_FLOAT_TNS)) { DOPRT("FLT_TNS"); } else { DOPRT("FLT_UNKNOWN"); } DOPRT("/"); if (CHECK_ENC(MQ_MQENC_DECIMAL_MASK, MQ_MQENC_DECIMAL_UNDEFINED)) { DOPRT("DEC_UNDEFINED"); } else if (CHECK_ENC(MQ_MQENC_DECIMAL_MASK, MQ_MQENC_DECIMAL_NORMAL)) { DOPRT("DEC_NORMAL"); } else if (CHECK_ENC(MQ_MQENC_DECIMAL_MASK, MQ_MQENC_DECIMAL_REVERSED)) { DOPRT("DEC_REVERSED"); } else { DOPRT("DEC_UNKNOWN"); } DOPRT("/"); if (CHECK_ENC(MQ_MQENC_INTEGER_MASK, MQ_MQENC_INTEGER_UNDEFINED)) { DOPRT("INT_UNDEFINED"); } else if (CHECK_ENC(MQ_MQENC_INTEGER_MASK, MQ_MQENC_INTEGER_NORMAL)) { DOPRT("INT_NORMAL"); } else if (CHECK_ENC(MQ_MQENC_INTEGER_MASK, MQ_MQENC_INTEGER_REVERSED)) { DOPRT("INT_REVERSED"); } else { DOPRT("INT_UNKNOWN"); } #undef CHECK_ENC #undef DOPRT proto_tree_add_uint_format_value(tree, hfindex, tvb, start, length, uEnc, "%8x-%d (%s)", uEnc, uEnc, sEnc); return length; } static gint dissect_mq_MQMO(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, gint ett_subtree, mq_parm_t *p_mq_parm) { guint uMoOpt; uMoOpt = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (uMoOpt == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hf_mq_gmo_matchoptions, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */ mq_tree_sub = proto_item_add_subtree(ti, ett_subtree); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQMO_NONE); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_gmo_matchoptions, ett_subtree, pf_flds_mtchopt, p_mq_parm->mq_int_enc); } return 4; } static gint dissect_mq_LPOO_LPIOPTS(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, gint ett_subtree, mq_parm_t *p_mq_parm) { guint uLpiOpts; uLpiOpts = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (uLpiOpts == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hf_mq_lpoo_lpiopts, tvb, offset, 4, p_mq_parm->mq_int_enc); mq_tree_sub = proto_item_add_subtree(ti, ett_subtree); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_LPOOOPT_NONE); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_lpoo_lpiopts, ett_subtree, pf_flds_lpooopt, p_mq_parm->mq_int_enc); } return 4; } static gint dissect_mq_MQGMO(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, gint ett_subtree, mq_parm_t *p_mq_parm) { guint uGmoOpt; uGmoOpt = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (uGmoOpt == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hf_mq_gmo_options, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */ mq_tree_sub = proto_item_add_subtree(ti, ett_subtree); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQGMO_NONE); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_gmo_options, ett_subtree, pf_flds_gmoopt, p_mq_parm->mq_int_enc); } return 4; } static gint dissect_mq_MQPMO(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, gint ett_subtree, mq_parm_t *p_mq_parm) { guint uPmoOpt; uPmoOpt = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (uPmoOpt == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hf_mq_pmo_options, tvb, offset, 4, p_mq_parm->mq_int_enc); /* ENC_BIG_ENDIAN); */ mq_tree_sub = proto_item_add_subtree(ti, ett_subtree); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_MQPMO_NONE); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_pmo_options, ett_subtree, pf_flds_pmoopt, p_mq_parm->mq_int_enc); } return 4; } static gint dissect_mq_MQOO(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, gint ett_subtree, gint hfindex, mq_parm_t *p_mq_parm) { guint uOpenOpt; uOpenOpt = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (uOpenOpt == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hfindex, tvb, offset, 4, p_mq_parm->mq_int_enc); mq_tree_sub = proto_item_add_subtree(ti, ett_subtree); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_subtree, NULL, MQ_TEXT_BIND_READAHEAD_AS_Q_DEF); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hfindex, ett_subtree, pf_flds_opnopt, p_mq_parm->mq_int_enc); } return 4; } static gint dissect_mq_MQCO(tvbuff_t *tvb, proto_tree *mq_tree, gint offset, mq_parm_t *p_mq_parm) { guint iCloseOpt; iCloseOpt = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (iCloseOpt == 0) { proto_item *ti; proto_tree *mq_tree_sub; ti = proto_tree_add_item(mq_tree, hf_mq_close_options, tvb, offset, 4, p_mq_parm->mq_int_enc); mq_tree_sub = proto_item_add_subtree(ti, ett_mq_close_option); proto_tree_add_subtree_format(mq_tree_sub, tvb, offset, 4, ett_mq_close_option, NULL, MQ_TEXT_IMMEDIATE_NONE); } else { proto_tree_add_bitmask(mq_tree, tvb, offset, hf_mq_close_options, ett_mq_close_option, pf_flds_clsopt, ENC_BIG_ENDIAN); } return 4; } static gint dissect_mq_charv(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iSize, gint idx, const char *pStr, mq_parm_t *p_mq_parm) { proto_tree *mq_tree_sub; guint32 lStr; guint32 oStr; gint32 eStr; const char *sStr; lStr = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); oStr = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); eStr = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); if (lStr && oStr) { sStr = (const char *)tvb_get_string_enc(wmem_packet_scope(), tvb, oStr, lStr, p_mq_parm->mq_str_enc); } else sStr = NULL; mq_tree_sub = proto_tree_add_subtree_format(tree, tvb, offset, iSize, idx, NULL, "%s - %s", pStr, (sStr) ? sStr : "[Empty]"); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsptr , tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsoffset , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsbufsize, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vslength , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsccsid , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree_sub, hf_mq_charv_vsvalue , tvb, oStr, lStr, (eStr == 500) ? ENC_EBCDIC : ENC_ASCII); return 20; } static gint dissect_mq_pmr(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iNbrRecords, gint offsetPMR, guint32 recFlags, mq_parm_t *p_mq_parm) { gint iSizePMR1 = 0; gint iSizePMR = 0; iSizePMR1 = ((((recFlags & MQ_PMRF_MSG_ID) != 0) * 24) +(((recFlags & MQ_PMRF_CORREL_ID) != 0) * 24) +(((recFlags & MQ_PMRF_GROUP_ID) != 0) * 24) +(((recFlags & MQ_PMRF_FEEDBACK) != 0) * 4) +(((recFlags & MQ_PMRF_ACCOUNTING_TOKEN) != 0) * 32)); if (offsetPMR != 0 && iSizePMR1 != 0) { iSizePMR = iNbrRecords * iSizePMR1; if (tvb_reported_length_remaining(tvb, offset) >= iSizePMR) { if (tree) { gint iOffsetPMR = 0; gint iRecord = 0; for (iRecord = 0; iRecord < iNbrRecords; iRecord++) { proto_tree *mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetPMR, iSizePMR1, ett_mq_pmr, NULL, MQ_TEXT_PMR); if ((recFlags & MQ_PMRF_MSG_ID) != 0) { proto_tree_add_item(mq_tree, hf_mq_pmr_msgid, tvb, offset + iOffsetPMR, 24, ENC_NA); iOffsetPMR += 24; } if ((recFlags & MQ_PMRF_CORREL_ID) != 0) { proto_tree_add_item(mq_tree, hf_mq_pmr_correlid, tvb, offset + iOffsetPMR, 24, ENC_NA); iOffsetPMR += 24; } if ((recFlags & MQ_PMRF_GROUP_ID) != 0) { proto_tree_add_item(mq_tree, hf_mq_pmr_groupid, tvb, offset + iOffsetPMR, 24, ENC_NA); iOffsetPMR += 24; } if ((recFlags & MQ_PMRF_FEEDBACK) != 0) { proto_tree_add_item(mq_tree, hf_mq_pmr_feedback, tvb, offset + iOffsetPMR, 4, p_mq_parm->mq_int_enc); iOffsetPMR += 4; } if ((recFlags & MQ_PMRF_ACCOUNTING_TOKEN) != 0) { proto_tree_add_item(mq_tree, hf_mq_pmr_acttoken, tvb, offset + iOffsetPMR, 32, ENC_NA); iOffsetPMR += 32; } } } } else iSizePMR = 0; } return iSizePMR; } static gint dissect_mq_or(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iNbrRecords, gint offsetOR, mq_parm_t *p_mq_parm) { gint iSizeOR = 0; if (offsetOR != 0) { iSizeOR = iNbrRecords * 96; if (tvb_reported_length_remaining(tvb, offset) >= iSizeOR) { if (tree) { gint iOffsetOR = 0; gint iRecord = 0; for (iRecord = 0; iRecord < iNbrRecords ; iRecord++) { proto_tree *mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetOR, 96, ett_mq_or, NULL, MQ_TEXT_OR); proto_tree_add_item(mq_tree, hf_mq_or_objname, tvb, offset + iOffsetOR, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_or_objqmgrname, tvb, offset + iOffsetOR + 48, 48, p_mq_parm->mq_str_enc); iOffsetOR += 96; } } } else iSizeOR = 0; } return iSizeOR; } static gint dissect_mq_rr(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iNbrRecords, gint offsetRR, mq_parm_t *p_mq_parm) { gint iSizeRR = 0; if (offsetRR != 0) { iSizeRR = iNbrRecords * 8; if (tvb_reported_length_remaining(tvb, offset) >= iSizeRR) { if (tree) { gint iOffsetRR = 0; gint iRecord = 0; for (iRecord = 0; iRecord < iNbrRecords; iRecord++) { proto_tree *mq_tree = proto_tree_add_subtree(tree, tvb, offset + iOffsetRR, 8, ett_mq_rr, NULL, MQ_TEXT_RR); proto_tree_add_item(mq_tree, hf_mq_rr_compcode, tvb, offset + iOffsetRR, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rr_reascode, tvb, offset + iOffsetRR + 4, 4, p_mq_parm->mq_int_enc); iOffsetRR += 8; } } } else iSizeRR = 0; } return iSizeRR; } static gint dissect_mq_gmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, mq_parm_t *p_mq_parm) { gint iSize = 0; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_GMO || p_mq_parm->mq_strucID == MQ_STRUCTID_GMO_EBCDIC) { guint32 iVersion = 0; iVersion = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); /* Compute length according to version */ switch (iVersion) { case 1: iSize = 72; break; case 2: iSize = 80; break; case 3: iSize = 100; break; } if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sQueue; sQueue = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 24, 48, p_mq_parm->mq_str_enc); if (strip_trailing_blanks(sQueue, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue); } if (tree) { proto_tree *mq_tree; mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_gmo, NULL, MQ_TEXT_GMO); proto_tree_add_item(mq_tree, hf_mq_gmo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_gmo_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); dissect_mq_MQGMO(tvb, mq_tree, offset + 8, ett_mq_gmo_option, p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_gmo_waitinterval, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_gmo_signal1 , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_gmo_signal2 , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_gmo_resolvqname , tvb, offset + 24, 48, p_mq_parm->mq_str_enc); if (iVersion >= 2) { /*proto_tree_add_item(mq_tree, hf_mq_gmo_matchoptions, tvb, offset + 72, 4, ENC_BIG_ENDIAN);*/ dissect_mq_MQMO(tvb, mq_tree, offset + 8, ett_mq_gmo_matchoption, p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_gmo_groupstatus , tvb, offset + 76, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_gmo_segmstatus , tvb, offset + 77, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_gmo_segmentation, tvb, offset + 78, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_gmo_reserved , tvb, offset + 79, 1, ENC_BIG_ENDIAN); } if (iVersion >= 3) { proto_tree_add_item(mq_tree, hf_mq_gmo_msgtoken , tvb, offset + 80, 16, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_gmo_returnedlen, tvb, offset + 96, 4, p_mq_parm->mq_int_enc); } } } } return iSize; } static gint dissect_mq_pmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, mq_parm_t *p_mq_parm, gint *iDistributionListSize) { gint iSize = 0; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_PMO || p_mq_parm->mq_strucID == MQ_STRUCTID_PMO_EBCDIC) { guint32 iVersion = 0; iVersion = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); /* Compute length according to version */ switch (iVersion) { case 1: iSize = 128; break; case 2: iSize = 152;break; } if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sQueue; sQueue = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 32, 48, p_mq_parm->mq_str_enc); if (strip_trailing_blanks(sQueue, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue); } if (tree) { proto_tree *mq_tree; mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_pmo, NULL, MQ_TEXT_PMO); proto_tree_add_item(mq_tree, hf_mq_pmo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); dissect_mq_MQPMO(tvb, mq_tree, offset + 8, ett_mq_pmo_option, p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_pmo_timeout , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_context , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_knowndstcnt, tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_unkndstcnt , tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_invaldstcnt, tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_resolvqname, tvb, offset + 32, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_resolvqmgr , tvb, offset + 80, 48, p_mq_parm->mq_str_enc); if (iVersion >= 2) { proto_tree_add_item(mq_tree, hf_mq_pmo_recspresent , tvb, offset + 128, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecfld, tvb, offset + 132, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecofs, tvb, offset + 136, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_resprecofs , tvb, offset + 140, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecptr, tvb, offset + 144, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_pmo_resprecptr , tvb, offset + 148, 4, p_mq_parm->mq_int_enc); } } if (iVersion >= 2) { gint iNbrRecords = 0; guint32 iRecFlags = 0; iNbrRecords = tvb_get_guint32(tvb, offset + 128, p_mq_parm->mq_int_enc); iRecFlags = tvb_get_guint32(tvb, offset + 132, p_mq_parm->mq_int_enc); if (iNbrRecords > 0) { gint iOffsetPMR = 0; gint iOffsetRR = 0; *iDistributionListSize = iNbrRecords; iOffsetPMR = tvb_get_guint32(tvb, offset + 136, p_mq_parm->mq_int_enc); iOffsetRR = tvb_get_guint32(tvb, offset + 140, p_mq_parm->mq_int_enc); iSize += dissect_mq_pmr(tvb, tree, offset + iSize, iNbrRecords, iOffsetPMR, iRecFlags, p_mq_parm); iSize += dissect_mq_rr(tvb, tree, offset + iSize, iNbrRecords, iOffsetRR, p_mq_parm); } } } } return iSize; } static gint dissect_mq_od(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint offset, mq_parm_t *p_mq_parm, gint *iDistributionListSize) { gint iSize = 0; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_OD || p_mq_parm->mq_strucID == MQ_STRUCTID_OD_EBCDIC) { /* The OD struct can be present in several messages at different levels */ guint32 iVersion = 0; iVersion = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); /* Compute length according to version */ switch (iVersion) { case 1: iSize = 168; break; case 2: iSize = 200; break; case 3: iSize = 336; break; case 4: iSize = 336+3*20+4; break; } if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { gint iNbrRecords = 0; guint8 *sObj; guint32 uTyp; if (iVersion >= 2) iNbrRecords = tvb_get_guint32(tvb, offset + 168, p_mq_parm->mq_int_enc); uTyp = tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); sObj = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 12, 48, p_mq_parm->mq_str_enc); col_append_fstr(pinfo->cinfo, COL_INFO, " Typ=%s", try_val_to_str_ext(uTyp, GET_VALS_EXTP(objtype))); if (strip_trailing_blanks(sObj, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sObj); } if (tree) { proto_tree *mq_tree; mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_od, NULL, MQ_TEXT_OD); proto_tree_add_item(mq_tree, hf_mq_od_StructID , tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_objecttype , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_objectname , tvb, offset + 12, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_objqmgrname, tvb, offset + 60, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_dynqname , tvb, offset + 108, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_altuserid , tvb, offset + 156, 12, p_mq_parm->mq_str_enc); if (iVersion >= 2) { proto_tree_add_item(mq_tree, hf_mq_od_recspresent , tvb, offset + 168, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_knowndstcnt , tvb, offset + 172, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_unknowdstcnt, tvb, offset + 176, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_invaldstcnt , tvb, offset + 180, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_objrecofs , tvb, offset + 184, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_resprecofs , tvb, offset + 188, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_objrecptr , tvb, offset + 192, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_od_resprecptr , tvb, offset + 196, 4, p_mq_parm->mq_int_enc); } if (iVersion >= 3) { proto_tree_add_item(mq_tree, hf_mq_od_altsecurid , tvb, offset + 200, 40, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_resolvqname , tvb, offset + 240, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_od_resolvqmgrnm, tvb, offset + 288, 48, p_mq_parm->mq_str_enc); } if (iVersion >= 4) { dissect_mq_charv(tvb, mq_tree, offset+336, 20, ett_mq_od_objstr, "Object string", p_mq_parm); dissect_mq_charv(tvb, mq_tree, offset+356, 20, ett_mq_od_selstr, "Selection string", p_mq_parm); dissect_mq_charv(tvb, mq_tree, offset+376, 20, ett_mq_od_resobjstr, "Resolved object string", p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_od_resolvobjtyp, tvb, offset + 396, 4, p_mq_parm->mq_int_enc); } } if (iNbrRecords > 0) { gint iOffsetOR = 0; gint iOffsetRR = 0; *iDistributionListSize = iNbrRecords; iOffsetOR = tvb_get_guint32(tvb, offset + 184, p_mq_parm->mq_int_enc); iOffsetRR = tvb_get_guint32(tvb, offset + 188, p_mq_parm->mq_int_enc); iSize += dissect_mq_or(tvb, tree, offset, iNbrRecords, iOffsetOR, p_mq_parm); iSize += dissect_mq_rr(tvb, tree, offset, iNbrRecords, iOffsetRR, p_mq_parm); } } } return iSize; } static gint dissect_mq_xid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm, gint offset) { gint iSizeXid = 0; if (tvb_reported_length_remaining(tvb, offset) >= 6) { guint8 iXidLength = 0; guint8 iBqLength = 0; iXidLength = tvb_get_guint8(tvb, offset + 4); iBqLength = tvb_get_guint8(tvb, offset + 5); iSizeXid = 6 + iXidLength + iBqLength; if (tvb_reported_length_remaining(tvb, offset) >= iSizeXid) { if (tree) { proto_tree *mq_tree; mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSizeXid, ett_mq_xa_xid, NULL, MQ_TEXT_XID); proto_tree_add_item(mq_tree, hf_mq_xa_xid_formatid , tvb, offset , 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_xa_xid_glbxid_len, tvb, offset + 4 , 1, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq_length, tvb, offset + 5 , 1, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_xa_xid_globalxid , tvb, offset + 6 , iXidLength, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq , tvb, offset + 6 + iXidLength, iBqLength, ENC_NA); } iSizeXid += (4 - (iSizeXid % 4)) % 4; /* Pad for alignment with 4 byte word boundary */ if (tvb_reported_length_remaining(tvb, offset) < iSizeXid) iSizeXid = 0; } else iSizeXid = 0; } return iSizeXid; } static gint dissect_mq_sid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm, gint offset) { guint8 iSIDL; guint8 iSID; char *sid_str; gint bOffset = offset; iSIDL = tvb_get_guint8(tvb, offset); proto_tree_add_item(tree, hf_mq_sidlen, tvb, offset, 1, p_mq_parm->mq_int_enc); offset++; if (iSIDL > 0) { iSID = tvb_get_guint8(tvb, offset); proto_tree_add_item(tree, hf_mq_sidtyp, tvb, offset, 1, p_mq_parm->mq_int_enc); offset++; if (iSID == MQ_MQSIDT_NT_SECURITY_ID) { offset = dissect_nt_sid(tvb, offset, tree, "SID", &sid_str, -1); } else { proto_tree_add_item(tree, hf_mq_securityid, tvb, offset, 40, ENC_NA); offset += 40; } } return offset - bOffset; } static void dissect_mq_addCR_colinfo(packet_info *pinfo, mq_parm_t *p_mq_parm) { if (p_mq_parm->mq_convID) col_append_fstr(pinfo->cinfo, COL_INFO, " C.R=%d.%d", p_mq_parm->mq_convID, p_mq_parm->mq_rqstID); } static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_tree, gint offset, mq_parm_t *p_mq_parm) { guint8 iFAPLvl; gint iSize; iFAPLvl = tvb_get_guint8(tvb, offset + 4); if (iFAPLvl < 4) iSize = 44; else if (iFAPLvl < 10) iSize = 102; else iSize = 208; if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sChannel; sChannel = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 24, 20, p_mq_parm->mq_str_enc); dissect_mq_addCR_colinfo(pinfo, p_mq_parm); col_append_fstr(pinfo->cinfo, COL_INFO, " FAPLvl=%d", iFAPLvl); if (strip_trailing_blanks(sChannel, 20) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, ", CHL=%s", sChannel); } if (iFAPLvl >= 4) { guint8 *sQMgr; sQMgr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 48, p_mq_parm->mq_str_enc); if (strip_trailing_blanks(sQMgr, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, ", QM=%s", sQMgr); } p_mq_parm->mq_id_ccsid.ccsid = (guint32)tvb_get_guint16(tvb, offset + 46, p_mq_parm->mq_int_enc); } if (mqroot_tree) { proto_tree *mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_id, NULL, MQ_TEXT_ID); proto_tree_add_item(mq_tree, hf_mq_id_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_id_FapLevel, tvb, offset + 4, 1, ENC_BIG_ENDIAN); /* ID Capability flags 1 */ proto_tree_add_bitmask(mq_tree, tvb, offset + 5, hf_mq_id_icf1, ett_mq_id_icf1, pf_flds_icf1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Eicf1, tvb, offset + 6, 1, ENC_BIG_ENDIAN); /* Error flags 1*/ proto_tree_add_bitmask(mq_tree, tvb, offset + 7, hf_mq_id_ief1, ett_mq_id_ief1, pf_flds_ief1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Reserved , tvb, offset + 8, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_MaxMsgBatch, tvb, offset + 10, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_MaxTrSize , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_MaxMsgSize , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_SeqWrapVal , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_channel , tvb, offset + 24, 20, p_mq_parm->mq_str_enc); if (iFAPLvl >= 4) { /* ID Capability flags 2 */ proto_tree_add_bitmask(mq_tree, tvb, offset + 44, hf_mq_id_icf2, ett_mq_id_icf2, pf_flds_icf2, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Eicf2, tvb, offset + 45, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_ccsid , tvb, offset + 46, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_qmgrname , tvb, offset + 48, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_id_HBInterval, tvb, offset + 96, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_EFLLength , tvb, offset + 100, 2, p_mq_parm->mq_int_enc); if (iFAPLvl >= 10) { /* Error flags 2*/ proto_tree_add_bitmask(mq_tree, tvb, offset + 102, hf_mq_id_ief2, ett_mq_id_ief2, pf_flds_ief2, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Reserved1 , tvb, offset + 103, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_MsgCprsLst, tvb, offset + 106, 16, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_Reserved2 , tvb, offset + 122, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst , tvb, offset + 124, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt , tvb, offset + 128, 4, p_mq_parm->mq_int_enc); /* ID Capability flags 3 */ proto_tree_add_bitmask(mq_tree, tvb, offset + 132, hf_mq_id_icf3, ett_mq_id_icf3, pf_flds_icf3, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Eicf3, tvb, offset + 133, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_ThreadId , tvb, offset + 140, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_TraceId , tvb, offset + 144, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_id_ProdId , tvb, offset + 148, 12, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_id_mqmid , tvb, offset + 160, 48, p_mq_parm->mq_str_enc); } } } } return iSize; } static gint dissect_mq_md(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_parm_t *p_mq_parm, gboolean bDecode) { gint iSize = 0; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_MD || p_mq_parm->mq_strucID == MQ_STRUCTID_MD_EBCDIC) { guint32 iVersion = 0; iVersion = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); /* Compute length according to version */ switch (iVersion) { case 1: iSize = 324; break; case 2: iSize = 364; break; } if (bDecode && iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { p_mq_parm->iOfsEnc = offset + 24; p_mq_parm->iOfsCcs = offset + 28; p_mq_parm->iOfsFmt = offset + 32; p_mq_parm->mq_md_ccsid.encod = tvb_get_guint32(tvb, offset + 24, p_mq_parm->mq_int_enc); p_mq_parm->mq_md_ccsid.ccsid = tvb_get_guint32(tvb, offset + 28, p_mq_parm->mq_int_enc); if (tree) { proto_tree *mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_md, NULL, MQ_TEXT_MD); proto_tree_add_item(mq_tree, hf_mq_md_StructID , tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_report , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_msgtype , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_expiry , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_feedback , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); dissect_mq_encoding(mq_tree, hf_mq_md_encoding , tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_ccsid , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_format , tvb, offset + 32, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_priority , tvb, offset + 40, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_persistence, tvb, offset + 44, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_msgid , tvb, offset + 48, 24, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_md_correlid , tvb, offset + 72, 24, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_md_backoutcnt , tvb, offset + 96, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_replytoq , tvb, offset + 100, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_replytoqmgr, tvb, offset + 148, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_userid , tvb, offset + 196, 12, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_acttoken , tvb, offset + 208, 32, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_md_appliddata , tvb, offset + 240, 32, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_putappltype, tvb, offset + 272, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_putapplname, tvb, offset + 276, 28, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_putdate , tvb, offset + 304, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_puttime , tvb, offset + 312, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_md_apporigdata, tvb, offset + 320, 4, p_mq_parm->mq_str_enc); if (iVersion >= 2) { proto_tree_add_item(mq_tree, hf_mq_md_groupid, tvb, offset + 324, 24, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_md_msgseqnumber, tvb, offset + 348, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 352, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 356, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_origlen, tvb, offset + 360, 4, p_mq_parm->mq_int_enc); } } } } return iSize; } static gint dissect_mq_fopa(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_parm_t *p_mq_parm) { gint iSize = 0; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA || p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA_EBCDIC) { iSize = tvb_get_guint32(tvb, offset+8, p_mq_parm->mq_int_enc); if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { if (tree) { proto_tree *mq_tree = proto_tree_add_subtree(tree, tvb, offset, iSize, ett_mq_fopa, NULL, MQ_TEXT_FOPA); proto_tree_add_item(mq_tree, hf_mq_fopa_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_unknown1, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_unknown2, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_unknown3, tvb, offset + 20, 8, p_mq_parm->mq_str_enc); if (iSize > 28) { proto_tree_add_item(mq_tree, hf_mq_fopa_qprotect, tvb, offset + 28, 48, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_unknown4, tvb, offset + 76, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_fopa_unknown5, tvb, offset + 80, 4, p_mq_parm->mq_int_enc); } } } } return iSize; } static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { gint offset = 0; guint32 iSegmentLength = 0; guint32 iSizePayload = 0; gint iSizeMD = 0; gboolean bPayload = FALSE; gboolean bEBCDIC = FALSE; gint iDistributionListSize = 0; gint capLen; mq_parm_t *p_mq_parm; heur_dtbl_entry_t *hdtbl_entry; p_mq_parm = wmem_new0(wmem_packet_scope(), mq_parm_t); p_mq_parm->mq_strucID = MQ_STRUCTID_NULL; p_mq_parm->mq_int_enc = ENC_BIG_ENDIAN; p_mq_parm->mq_str_enc = ENC_UTF_8|ENC_NA; col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ"); p_mq_parm->iOfsEnc = 0; p_mq_parm->iOfsFmt = 0; p_mq_parm->iOfsCcs = 0; if (tvb_reported_length(tvb) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); if (((p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 28) { proto_tree *mq_tree = NULL; proto_tree *mqroot_tree = NULL; proto_item *ti = NULL; /* An MQ packet always starts with this structure*/ gint iSizeTSH = 28; gint iSizeMPF = 0; /* Size Of Multiplexed Field */ if ((p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC) { bEBCDIC = TRUE; p_mq_parm->mq_str_enc = ENC_EBCDIC|ENC_NA; } iSegmentLength = tvb_get_ntohl(tvb, offset + 4); if (p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM || p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM_EBCDIC) { if (tvb_reported_length_remaining(tvb, offset) < 36) return; iSizeMPF += 8; iSizeTSH = 36; p_mq_parm->mq_convID = tvb_get_ntohl(tvb, offset + 8); p_mq_parm->mq_rqstID = tvb_get_ntohl(tvb, offset + 12); } p_mq_parm->mq_opcode = tvb_get_guint8(tvb, offset + iSizeMPF + 9); if (p_mq_parm->mq_opcode == MQ_TST_REQUEST_MSGS || p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE) { p_mq_parm->iOfsEnc = offset + iSizeMPF + 20; p_mq_parm->iOfsCcs = offset + iSizeMPF + 24; p_mq_parm->iOfsFmt = offset ; } p_mq_parm->mq_int_enc = (tvb_get_guint8(tvb, offset + iSizeMPF + 8) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN); p_mq_parm->mq_ctlf1 = tvb_get_guint8(tvb, offset + iSizeMPF + 10); p_mq_parm->mq_ctlf2 = tvb_get_guint8(tvb, offset + iSizeMPF + 11); p_mq_parm->mq_tsh_ccsid.encod = tvb_get_guint32(tvb, offset + iSizeMPF + 20, p_mq_parm->mq_int_enc); p_mq_parm->mq_tsh_ccsid.ccsid = tvb_get_guint16(tvb, offset + iSizeMPF + 24, p_mq_parm->mq_int_enc); if (p_mq_parm->mq_tsh_ccsid.ccsid == 500 && !bEBCDIC) { bEBCDIC = TRUE; p_mq_parm->mq_str_enc = ENC_EBCDIC|ENC_NA; } if (!mq_in_reassembly) { col_clear(pinfo->cinfo, COL_INFO); col_append_sep_fstr(pinfo->cinfo, COL_INFO, " | ", "%-17s", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); col_set_fence(pinfo->cinfo, COL_INFO); } if (tree) { if (p_mq_parm->mq_opcode!=MQ_TST_ASYNC_MESSAGE) { ti = proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA); proto_item_append_text(ti, " (%s)", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); if (bEBCDIC == TRUE) proto_item_append_text(ti, " (EBCDIC)"); mqroot_tree = proto_item_add_subtree(ti, ett_mq); } else { mqroot_tree = tree; } mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeTSH, ett_mq_tsh, NULL, MQ_TEXT_TSH); proto_tree_add_item(mq_tree, hf_mq_tsh_StructID, tvb, offset + 0, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_tsh_mqseglen, tvb, offset + 4, 4, ENC_BIG_ENDIAN); if (iSizeTSH == 36) { proto_tree_add_item(mq_tree, hf_mq_tsh_convid, tvb, offset + 8, 4, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_tsh_requestid, tvb, offset + 12, 4, ENC_BIG_ENDIAN); } proto_tree_add_item(mq_tree, hf_mq_tsh_byteorder, tvb, offset + iSizeMPF + 8, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_tsh_opcode, tvb, offset + iSizeMPF + 9, 1, ENC_BIG_ENDIAN); proto_tree_add_bitmask(mq_tree, tvb, offset + iSizeMPF + 10, hf_mq_tsh_ctlflgs1, ett_mq_tsh_tcf, pf_flds_tcf, ENC_BIG_ENDIAN); proto_tree_add_bitmask(mq_tree, tvb, offset + iSizeMPF + 11, hf_mq_tsh_ctlflgs2, ett_mq_tsh_tcf2, pf_flds_tcf2, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_tsh_luwid, tvb, offset + iSizeMPF + 12, 8, ENC_NA); dissect_mq_encoding(mq_tree, hf_mq_tsh_encoding, tvb, offset + iSizeMPF + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_tsh_ccsid, tvb, offset + iSizeMPF + 24, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_tsh_reserved, tvb, offset + iSizeMPF + 26, 2, p_mq_parm->mq_int_enc); } offset += iSizeTSH; /* Now dissect the embedded structures */ if (tvb_reported_length_remaining(tvb, offset) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); if (((p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST) != 0) || p_mq_parm->mq_opcode < 0x80) { /* First MQ segment (opcodes below 0x80 never span several TSH) */ gint iSizeAPI = 16; if (p_mq_parm->mq_opcode >= 0x80 && p_mq_parm->mq_opcode <= 0x9F && tvb_reported_length_remaining(tvb, offset) >= 16) { guint32 iReturnCode = 0; guint32 iHdl = 0; iReturnCode = tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); iHdl = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); dissect_mq_addCR_colinfo(pinfo, p_mq_parm); if (iHdl != 0 && iHdl != 0xffffffff) col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x", iHdl); if (iReturnCode != 0) col_append_fstr(pinfo->cinfo, COL_INFO, " [RC=%d]", iReturnCode); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeAPI, ett_mq_api, NULL, MQ_TEXT_API); proto_tree_add_item(mq_tree, hf_mq_api_replylen, tvb, offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_api_compcode, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_api_reascode, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_api_objecthdl, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); } offset += iSizeAPI; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } capLen = tvb_reported_length_remaining(tvb , offset); if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && capLen >= 20) { gint iSize = 20; iSizePayload = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); bPayload = TRUE; if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_msh, NULL, MQ_TEXT_MSH); proto_tree_add_item(mq_tree, hf_mq_msh_StructID, tvb, offset + 0, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_msh_seqnum, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msh_datalength, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msh_unknown1, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msh_msglength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); } offset += iSize; } else if (p_mq_parm->mq_opcode == MQ_TST_CONAUTH_INFO && capLen >= 20) { gint iSize = 24; gint iUsr = 0; gint iPsw = 0; iUsr = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); iPsw = tvb_get_guint32(tvb, offset + 20, p_mq_parm->mq_int_enc); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_caut, NULL, MQ_TEXT_CAUT); proto_tree_add_item(mq_tree, hf_mq_caut_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_caut_AuthType, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_caut_UsrMaxLen, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_caut_PwdMaxLen, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_caut_UsrLength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_caut_PwdLength, tvb, offset + 20, 4, p_mq_parm->mq_int_enc); if (iUsr) proto_tree_add_item(mq_tree, hf_mq_caut_usr, tvb, offset + 24, iUsr, p_mq_parm->mq_str_enc); if (iPsw) proto_tree_add_item(mq_tree, hf_mq_caut_psw, tvb, offset + 24 + iUsr, iPsw, p_mq_parm->mq_str_enc); } offset += iSize + iUsr + iPsw; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && capLen >= 20) { gint iSize = 20; gint iTy; gint iP1; gint iP2; p_mq_parm->mq_convID = tvb_get_guint32(tvb, offset , p_mq_parm->mq_int_enc); p_mq_parm->mq_rqstID = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); dissect_mq_addCR_colinfo(pinfo, p_mq_parm); iTy = tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); iP1 = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); iP2 = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%d, P1=%d, P2=%d", iTy, iP1, iP2); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeAPI, ett_mq_socket, NULL, MQ_TEXT_SOCKET); proto_tree_add_item(mq_tree, hf_mq_socket_conversid, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_socket_requestid, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_socket_type, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_socket_parm1, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_socket_parm2, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); } offset += iSize; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && capLen >= 8) { /* Some status are 28 bytes long and some are 36 bytes long */ gint iStatus = 0; gint iStatusLength = 0; iStatus = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iStatusLength = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (tvb_reported_length_remaining(tvb, offset) >= iStatusLength) { if (iStatus != 0) col_append_fstr(pinfo->cinfo, COL_INFO, " Code=%s", val_to_str_ext(iStatus, GET_VALS_EXTP(status), "Unknown (0x%08x)")); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 8, ett_mq_status, NULL, MQ_TEXT_STAT); proto_tree_add_item(mq_tree, hf_mq_status_length, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_status_code, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); if (iStatusLength >= 12) proto_tree_add_item(mq_tree, hf_mq_status_value, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } offset += iStatusLength; } } else if (p_mq_parm->mq_opcode == MQ_TST_PING && capLen > 4) { if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_ping, NULL, MQ_TEXT_PING); proto_tree_add_item(mq_tree, hf_mq_ping_length, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_ping_buffer, tvb, offset + 4, -1, ENC_NA); } offset = tvb_reported_length(tvb); } else if (p_mq_parm->mq_opcode == MQ_TST_RESET && capLen >= 8) { if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_reset, NULL, MQ_TEXT_RESET); proto_tree_add_item(mq_tree, hf_mq_reset_length, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_reset_seqnum, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); } offset = tvb_reported_length(tvb); } else if ((p_mq_parm->mq_opcode == MQ_TST_MQOPEN || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE || p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY) && capLen >= 4) { offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 4, ett_mq_open, NULL, MQ_TEXT_OPEN); if (p_mq_parm->mq_opcode == MQ_TST_MQOPEN || p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY) { dissect_mq_MQOO(tvb, mq_tree, offset, ett_mq_open_option, hf_mq_open_options, p_mq_parm); } if (p_mq_parm->mq_opcode == MQ_TST_MQCLOSE || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY) { dissect_mq_MQCO(tvb, mq_tree, offset, p_mq_parm); } } offset += 4; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; offset += dissect_mq_fopa(tvb, mqroot_tree, offset, p_mq_parm); } else if ((p_mq_parm->mq_opcode == MQ_TST_MQCONN || p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY) && capLen > 0) { gint iSizeCONN = 0; /*iSizeCONN = ((iVersionID == 4 || iVersionID == 6) ? 120 : 112);*/ /* guess */ /* The iVersionID is available in the previous ID segment, we should keep a state * Instead we rely on the segment length announced in the TSH */ /* The MQCONN structure is special because it does not start with a structid */ iSizeCONN = iSegmentLength - iSizeTSH - iSizeAPI; if (iSizeCONN != 112 && iSizeCONN != 120 && iSizeCONN != 260 && iSizeCONN != 332) iSizeCONN = 0; if (iSizeCONN != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeCONN) { gchar *sApplicationName; gchar *sQMgr; guint32 iEnc; guint32 iCod; guint32 iApp; gchar cChr; /* We have to handle the ccsid/coding of the MQCONN REPLY on z/OS it is always EBCDIC integer are always BIG_ENDIAN */ if (p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY) { iApp = tvb_get_letohl(tvb, offset + 48 + 28); if (iApp <= 65536) iCod = ENC_LITTLE_ENDIAN; else iCod = ENC_BIG_ENDIAN; cChr = tvb_get_guint8(tvb, offset + 48); if ((cChr >= 'A' && cChr <= 'Z') || (cChr >= 'a' && cChr <= 'z') || (cChr >= '0' && cChr <= '9') || (cChr == '\\')) { iEnc = p_mq_parm->mq_str_enc; } else { iEnc = ENC_EBCDIC; } } else { iCod = p_mq_parm->mq_int_enc; iEnc = p_mq_parm->mq_str_enc; } iApp = tvb_get_guint32(tvb, offset + 48 + 28, iCod); sApplicationName = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 28, iEnc), 28, '.'); if (strip_trailing_blanks((guint8 *)sApplicationName, 28) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " App=%s", sApplicationName); } sQMgr = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 48, iEnc), 48, '.'); if (strip_trailing_blanks((guint8 *)sQMgr, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQMgr); } if (tree) { ptvcursor_t *cursor; mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeCONN, ett_mq_conn, NULL, MQ_TEXT_CONN); cursor = ptvcursor_new(mq_tree, tvb, offset); ptvcursor_add(cursor, hf_mq_conn_QMgr, 48, iEnc); ptvcursor_add(cursor, hf_mq_conn_appname, 28, iEnc); ptvcursor_add(cursor, hf_mq_conn_apptype, 4, iCod); ptvcursor_add(cursor, hf_mq_conn_acttoken, 32, ENC_NA); if (iSizeCONN >= 120) { ptvcursor_add(cursor, hf_mq_conn_version, 4, iCod); ptvcursor_add(cursor, hf_mq_conn_options, 4, iCod); } if (iSizeCONN >= 260) { proto_tree *mq_tree_sub; gint iVersion = 0; gint nofs = ptvcursor_current_offset(cursor); iVersion = tvb_get_guint32(tvb, nofs + 4, iCod); mq_tree_sub = proto_tree_add_subtree(mq_tree, tvb, nofs, iSizeCONN - nofs, ett_mq_fcno, NULL, MQ_TEXT_FCNO); ptvcursor_set_tree(cursor, mq_tree_sub); ptvcursor_add(cursor, hf_mq_fcno_StructID, 4, iEnc); ptvcursor_add(cursor, hf_mq_fcno_version, 4, iCod); ptvcursor_add(cursor, hf_mq_fcno_option, 4, iCod); if (iVersion == 2) { ptvcursor_add(cursor, hf_mq_fcno_msgid, 12, iEnc); ptvcursor_add(cursor, hf_mq_fcno_mqmid, 48, iEnc); ptvcursor_add(cursor, hf_mq_fcno_unknown02, 68, ENC_NA); } if (iVersion == 1) { if (iApp == MQ_MQAT_JAVA) { ptvcursor_add(cursor, hf_mq_fcno_msgid, 12, iEnc); ptvcursor_add(cursor, hf_mq_fcno_mqmid, 48, iEnc); ptvcursor_add(cursor, hf_mq_fcno_unknown02, 68, ENC_NA); } else { ptvcursor_add(cursor, hf_mq_fcno_connid, 24, iEnc); ptvcursor_add(cursor, hf_mq_fcno_unknown02, 116, ENC_NA); ptvcursor_add(cursor, hf_mq_fcno_msgid, 12, iEnc); ptvcursor_add(cursor, hf_mq_fcno_mqmid, 48, iEnc); } } if (iSizeCONN >= 332) { dissect_mqpcf_parm(tvb, pinfo, mq_tree_sub, ptvcursor_current_offset(cursor), (guint32)-1, iCod, TRUE); } } ptvcursor_free(cursor); } offset += iSizeCONN; } } 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) { /* The MQINQ/MQSET structure is special because it does not start with a structid */ gint iNbSelectors; gint iNbIntegers; gint iCharLen; gint iOffsetINQ; gint iSelector; iNbSelectors = tvb_get_guint32(tvb, offset , p_mq_parm->mq_int_enc); iNbIntegers = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iCharLen = tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_inq, NULL, MQ_TEXT_INQ); proto_tree_add_item(mq_tree, hf_mq_inq_nbsel, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_inq_charlen, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } iOffsetINQ = 12; if (tvb_reported_length_remaining(tvb, offset + iOffsetINQ) >= iNbSelectors * 4) { if (tree) { for (iSelector = 0; iSelector < iNbSelectors; iSelector++) { proto_tree_add_item(mq_tree, hf_mq_inq_sel, tvb, offset + iOffsetINQ + iSelector * 4, 4, p_mq_parm->mq_int_enc); } } iOffsetINQ += iNbSelectors * 4; if (p_mq_parm->mq_opcode == MQ_TST_MQINQ_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQSET) { gint iSizeINQValues; iSizeINQValues = iNbIntegers * 4 + iCharLen; if (tvb_reported_length_remaining(tvb, offset + iOffsetINQ) >= iSizeINQValues) { gint iInteger; if (tree) { for (iInteger = 0; iInteger < iNbIntegers; iInteger++) { proto_tree_add_item(mq_tree, hf_mq_inq_intvalue, tvb, offset + iOffsetINQ + iInteger * 4, 4, p_mq_parm->mq_int_enc); } } iOffsetINQ += iNbIntegers * 4; if (iCharLen != 0) { if (tree) { proto_tree_add_item(mq_tree, hf_mq_inq_charvalues, tvb, offset + iOffsetINQ, iCharLen, p_mq_parm->mq_str_enc); } } } } } offset += tvb_reported_length(tvb); } else if (p_mq_parm->mq_opcode == MQ_TST_NOTIFICATION) { guint uHdl; guint uCod; uHdl = tvb_get_guint32(tvb, offset+4, p_mq_parm->mq_int_enc); uCod = tvb_get_guint32(tvb, offset+8, p_mq_parm->mq_int_enc); dissect_mq_addCR_colinfo(pinfo, p_mq_parm); col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x Cod=%s(0x%x)", uHdl, try_val_to_str(uCod, GET_VALSV(notifcode)), uCod); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_notif, NULL, MQ_TEXT_NOTIFICATION); proto_tree_add_item(mq_tree, hf_mq_notif_vers, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_notif_handle, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_notif_code, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_notif_value, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); } offset+=16; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_REQUEST_MSGS) { gint iHdl; gint iFlags; gint iGlbMsgIdx; gint iMaxMsgLen; gint xOfs; gint iOpt; xOfs = 0; iHdl = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iMaxMsgLen = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); iFlags = tvb_get_guint32(tvb, offset + 32, p_mq_parm->mq_int_enc); iGlbMsgIdx = tvb_get_guint32(tvb, offset + 36, p_mq_parm->mq_int_enc); if (iFlags & 0x00000010) { p_mq_parm->mq_msgreq_ccsid.encod = tvb_get_guint32(tvb, offset + 44, p_mq_parm->mq_int_enc); p_mq_parm->mq_msgreq_ccsid.ccsid = tvb_get_guint32(tvb, offset + 48, p_mq_parm->mq_int_enc); } dissect_mq_addCR_colinfo(pinfo, p_mq_parm); col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, MaxLen=%d", iHdl, iGlbMsgIdx, iMaxMsgLen); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_msg, NULL, MQ_TEXT_REQMSG); proto_tree_add_item(mq_tree, hf_mq_msgreq_version , tvb, offset , 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_handle , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_RecvBytes, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_RqstBytes, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_MaxMsgLen, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); dissect_mq_MQGMO(tvb, mq_tree, offset + 20, ett_mq_gmo_option, p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_msgreq_WaitIntrv, tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_QueStatus, tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_RqstFlags, tvb, offset + 32, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_GlbMsgIdx, tvb, offset + 36, 4, p_mq_parm->mq_int_enc); if (iFlags & 0x00000010) { proto_tree_add_item(mq_tree, hf_mq_msgreq_SelectIdx, tvb, offset + 40, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_MQMDVers , tvb, offset + 42, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_ccsid , tvb, offset + 44, 4, p_mq_parm->mq_int_enc); dissect_mq_encoding(mq_tree, hf_mq_msgreq_encoding , tvb, offset + 48, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_MsgSeqNum, tvb, offset + 52, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgreq_offset , tvb, offset + 56, 4, p_mq_parm->mq_int_enc); dissect_mq_MQMO(tvb, mq_tree, offset + 60, ett_mq_gmo_matchoption, p_mq_parm); iOpt = tvb_get_guint32(tvb, offset + 60, p_mq_parm->mq_int_enc); if (iOpt & MQ_MQMO_MATCH_MSG_ID) { proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchMsgId, tvb, offset + 64 + xOfs, 24, p_mq_parm->mq_str_enc); xOfs += 24; } if (iOpt & MQ_MQMO_MATCH_CORREL_ID) { proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchCorId, tvb, offset + 64 + xOfs, 24, p_mq_parm->mq_str_enc); xOfs += 24; } if (iOpt & MQ_MQMO_MATCH_GROUP_ID) { proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchGrpid, tvb, offset + 64 + xOfs, 24, p_mq_parm->mq_str_enc); xOfs += 24; } if (iOpt & MQ_MQMO_MATCH_MSG_TOKEN) { proto_tree_add_item(mq_tree, hf_mq_msgreq_mtchMsgTk, tvb, offset + 64 + xOfs, 16, p_mq_parm->mq_str_enc); xOfs += 16; } } } offset += (iFlags & 0x00000010) ? (64+xOfs) : 40; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE) { gint iSegmIndex; gint iGlbMsgIdx; gint iPadLen; gint iSegLength; gint8 iStrLen; gint iHdl; gint iHdrL; iHdl = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iGlbMsgIdx = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); iSegLength = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); iSegmIndex = tvb_get_guint16(tvb, offset + 20, p_mq_parm->mq_int_enc); if (iSegmIndex == 0) { iStrLen = tvb_get_guint8(tvb, offset + 54); iPadLen = (2+1+iStrLen) % 4; iPadLen = (iPadLen) ? 4-iPadLen : 0; } else { iPadLen = 0; iStrLen = 0; } iHdrL = (iSegmIndex == 0) ? (54+1+iStrLen+iPadLen) : 24; if (!mq_in_reassembly) { dissect_mq_addCR_colinfo(pinfo, p_mq_parm); col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); } if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iHdrL, ett_mq_msg, NULL, MQ_TEXT_ASYMSG); proto_tree_add_item(mq_tree, hf_mq_msgasy_version , tvb, offset , 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_handle , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_MsgIndex , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_GlbMsgIdx, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_SegLength, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_SegmIndex, tvb, offset + 20, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_SeleIndex, tvb, offset + 22, 2, p_mq_parm->mq_int_enc); if (p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST) { proto_tree_add_item(mq_tree, hf_mq_msgasy_ReasonCod, tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_ActMsgLen, tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_TotMsgLen, tvb, offset + 32, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_MsgToken , tvb, offset + 36, 16, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_Status , tvb, offset + 52, 2, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_msgasy_resolQNLn, tvb, offset + 54, 1, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_msgasy_resolQNme, tvb, offset + 55, iStrLen, p_mq_parm->mq_str_enc); if (iPadLen) proto_tree_add_item(mq_tree, hf_mq_msgasy_padding , tvb, offset + 55 + iStrLen, iPadLen, p_mq_parm->mq_str_enc); } } offset+=iHdrL; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; iSizePayload = tvb_reported_length_remaining(tvb, offset); bPayload = (iSizePayload>0); } else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && capLen >= 12) { gint iOffsetSPI = 0; guint32 iSpiVerb = 0; p_mq_parm->iOfsEnc = offset + 12; p_mq_parm->iOfsCcs = offset + 16; p_mq_parm->iOfsFmt = offset + 20; iSpiVerb = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); col_append_fstr(pinfo->cinfo, COL_INFO, " (%s)", val_to_str(iSpiVerb, mq_spi_verbs_vals, "Unknown (0x%08x)")); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi, NULL, MQ_TEXT_SPI); proto_tree_add_item(mq_tree, hf_mq_spi_verb , tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_version, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } offset += 12; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (((p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 12) { gint iSizeSPIMD = 0; if (tree) { guint8 *sStructId; sStructId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 4, ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx) ? ENC_ASCII : ENC_EBCDIC); mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi_base, NULL, (const char *)sStructId); proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } offset += 12; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if ((iSizeSPIMD = dissect_mq_md(tvb, mqroot_tree, offset, p_mq_parm, TRUE)) != 0) { offset += iSizeSPIMD; offset += dissect_mq_gmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm); offset += dissect_mq_pmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); if (((p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxO || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxO_EBCDIC || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 12) { if (tree) { /* Dissect the common part of these structures */ guint8 *sStructId; sStructId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 4, ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx) ? ENC_ASCII : ENC_EBCDIC); mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_spi_base, NULL, (const char *)sStructId); proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 16) { if (tree) { gint iVerbNumber = 0; proto_tree_add_item(mq_tree, hf_mq_spi_spqo_nbverb, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); iVerbNumber = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); if (tvb_reported_length_remaining(tvb, offset) >= iVerbNumber * 20 + 16) { gint iVerb = 0; iOffsetSPI = offset + 16; for (iVerb = 0; iVerb < iVerbNumber; iVerb++) { proto_tree_add_item(mq_tree, hf_mq_spi_spqo_verbid , tvb, iOffsetSPI, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxiover, tvb, iOffsetSPI + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinver, tvb, iOffsetSPI + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxouver, tvb, iOffsetSPI + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spqo_flags , tvb, iOffsetSPI + 16, 4, p_mq_parm->mq_int_enc); iOffsetSPI += 20; } offset += iVerbNumber * 20 + 16; } } } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 136) { if (tree) { proto_tree_add_item(mq_tree, hf_mq_spi_spai_mode , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown1, tvb, offset + 16, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown2, tvb, offset + 64, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spai_msgid , tvb, offset + 112, 24, p_mq_parm->mq_str_enc); } offset += 136; } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 24) { if (tree) { proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchsz , tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchint, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_spgi_maxmsgsz, tvb, offset + 20, 4, p_mq_parm->mq_int_enc); } offset += 24; } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 20) { if (tree) { proto_tree_add_bitmask(mq_tree, tvb, offset + 12, hf_mq_spi_spgo_options, ett_mq_spi_options, pf_flds_spiopt, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_spi_spgo_size, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); } iSizePayload = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); offset += 20; bPayload = TRUE; } else { offset += 12; } p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } } } else if ((p_mq_parm->mq_opcode >= 0xA0 && p_mq_parm->mq_opcode <= 0xB9) && capLen >= 16) { /* The XA structures are special because they do not start with a structid */ if (tree) { mq_tree = proto_tree_add_subtree_format(mqroot_tree, tvb, offset, 16, ett_mq_xa, NULL, "%s (%s)", MQ_TEXT_XA, val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); proto_tree_add_item(mq_tree, hf_mq_xa_length, tvb, offset, 4, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_xa_returnvalue, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_bitmask(mq_tree, tvb, offset + 8, hf_mq_xa_tmflags, ett_mq_xa_tmflags, pf_flds_tmflags, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_xa_rmid, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); } offset += 16; 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 || 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 || p_mq_parm->mq_opcode == MQ_TST_XA_COMPLETE) { gint iSizeXid = 0; if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, p_mq_parm, offset)) != 0) offset += iSizeXid; } else if ((p_mq_parm->mq_opcode == MQ_TST_XA_OPEN || p_mq_parm->mq_opcode == MQ_TST_XA_CLOSE) && tvb_reported_length_remaining(tvb, offset) >= 1) { guint8 iXAInfoLength = 0; iXAInfoLength = tvb_get_guint8(tvb, offset); if (tvb_reported_length_remaining(tvb, offset) >= iXAInfoLength + 1) { if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iXAInfoLength + 1, ett_mq_xa_info, NULL, MQ_TEXT_XINF); proto_tree_add_item(mq_tree, hf_mq_xa_xainfo_length, tvb, offset, 1, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_xa_xainfo_value , tvb, offset + 1, iXAInfoLength, p_mq_parm->mq_str_enc); } } offset += 1 + iXAInfoLength; } else if ((p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER || p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER_REPLY) && tvb_reported_length_remaining(tvb, offset) >= 4) { gint iNbXid = 0; iNbXid = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (tree) { proto_tree_add_item(mq_tree, hf_mq_xa_count, tvb, offset, 4, p_mq_parm->mq_int_enc); } offset += 4; if (p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER_REPLY) { gint iXid = 0; for (iXid = 0; iXid < iNbXid; iXid++) { gint iSizeXid = 0; if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, p_mq_parm, offset)) != 0) offset += iSizeXid; else break; } } } } 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) { guint iVersion; guint iXtraData = 0; gint iSize = 32; iVersion = tvb_get_guint32(tvb, offset+4, p_mq_parm->mq_int_enc); if (iVersion >= 3) { iSize += 56; iXtraData = tvb_get_guint32(tvb, offset + 84, p_mq_parm->mq_int_enc); } if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSize, ett_mq_lpoo, NULL, MQ_TEXT_LPOO); proto_tree_add_item(mq_tree, hf_mq_lpoo_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); dissect_mq_MQOO(tvb, mq_tree, offset+8, ett_mq_lpoo_options, hf_mq_lpoo_options, p_mq_parm); dissect_mq_LPOO_LPIOPTS(tvb, mq_tree, offset+12, ett_mq_lpoo_lpiopts, p_mq_parm); proto_tree_add_item(mq_tree, hf_mq_lpoo_unknown5 , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defpersist , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defputresptype, tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defreadahead , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); if (iVersion >= 3) { proto_tree_add_item(mq_tree, hf_mq_lpoo_qprotect, tvb, offset + 32, 48, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_unknown6, tvb, offset + 80, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_xtradata, tvb, offset + 84, 4, p_mq_parm->mq_int_enc); } } offset += iSize; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (iXtraData>0) { if (p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) { bPayload = TRUE; iSizePayload = iXtraData; p_mq_parm->iOfsFmt = (offset-iSize); } } } } 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) { offset += dissect_mq_id(tvb, pinfo, mqroot_tree, offset, p_mq_parm); p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } 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) { gint iSizeUID; /* iSizeUID = (iVersionID < 5 ? 28 : 132); guess */ /* The iVersionID is available in the previous ID segment, we should keep a state * * Instead we rely on the segment length announced in the TSH */ iSizeUID = iSegmentLength - iSizeTSH; if (iSizeUID != 28 && iSizeUID != 132) iSizeUID = 0; if (iSizeUID != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeUID) { guint8 *sUserId; sUserId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 4, 12, p_mq_parm->mq_str_enc); dissect_mq_addCR_colinfo(pinfo, p_mq_parm); if (strip_trailing_blanks(sUserId, 12) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " User=%s", sUserId); } if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeUID, ett_mq_uid, NULL, MQ_TEXT_UID); proto_tree_add_item(mq_tree, hf_mq_uid_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_uid_userid , tvb, offset + 4, 12, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_uid_password, tvb, offset + 16, 12, p_mq_parm->mq_str_enc); } if (iSizeUID == 132) { if (tree) { proto_tree_add_item(mq_tree, hf_mq_uid_longuserid, tvb, offset + 28, 64, p_mq_parm->mq_str_enc); dissect_mq_sid(tvb, mq_tree, p_mq_parm, offset + 92); } } } offset += iSizeUID; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); if ((iSizeMD = dissect_mq_md(tvb, mqroot_tree, offset, p_mq_parm, TRUE)) != 0) { gint iSizeGMO = 0; gint iSizePMO = 0; offset += iSizeMD; if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm)) != 0) { offset += iSizeGMO; bPayload = TRUE; } else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize)) != 0) { offset += iSizePMO; bPayload = TRUE; } if (tvb_reported_length_remaining(tvb, offset) >= 4) { if (bPayload == TRUE && (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE)) { iSizePayload = tvb_get_guint32(tvb, offset, p_mq_parm->mq_int_enc); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 4, ett_mq_put, NULL, MQ_TEXT_PUT); proto_tree_add_item(mq_tree, hf_mq_put_length, tvb, offset, 4, p_mq_parm->mq_int_enc); } offset += 4; } } } if (iDistributionListSize > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " (Distribution List, Size=%d)", iDistributionListSize); } if (bPayload == TRUE) { if (iSizePayload != 0 && tvb_reported_length_remaining(tvb, offset) > 0) { /* For the following header structures, each structure has a "format" field which announces the type of the following structure. For dissection we do not use it and rely on the structid instead. */ guint32 iHeadersLength = 0; if (tvb_reported_length_remaining(tvb, offset) >= 4) { gint iSizeMD2 = 0; p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); 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) { /* if MD.format == MQXMIT */ gint iSizeXQH = 104; if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeXQH, ett_mq_xqh, NULL, MQ_TEXT_XQH); proto_tree_add_item(mq_tree, hf_mq_xqh_StructID , tvb, offset , 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_xqh_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_xqh_remoteq , tvb, offset + 8, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_xqh_remoteqmgr, tvb, offset + 56, 48, p_mq_parm->mq_str_enc); } offset += iSizeXQH; iHeadersLength += iSizeXQH; if ((iSizeMD2 = dissect_mq_md(tvb, mqroot_tree, offset, p_mq_parm, TRUE)) != 0) { offset += iSizeMD2; iHeadersLength += iSizeMD2; } p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } 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) { /* if MD.format == MQDEAD */ gint iSizeDLH = 172; p_mq_parm->iOfsEnc = offset + 108; p_mq_parm->iOfsCcs = offset + 112; p_mq_parm->iOfsFmt = offset + 116; p_mq_parm->mq_dlh_ccsid.encod = tvb_get_guint32(tvb, offset + 108, p_mq_parm->mq_int_enc); p_mq_parm->mq_dlh_ccsid.ccsid = tvb_get_guint32(tvb, offset + 112, p_mq_parm->mq_int_enc); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeDLH, ett_mq_dlh, NULL, MQ_TEXT_DLH); proto_tree_add_item(mq_tree, hf_mq_dlh_StructID , tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_reason , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_destq , tvb, offset + 12, 48, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_destqmgr , tvb, offset + 60, 48, p_mq_parm->mq_str_enc); dissect_mq_encoding(mq_tree, hf_mq_dlh_encoding , tvb, offset + 108, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_ccsid , tvb, offset + 112, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_format , tvb, offset + 116, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_putappltype, tvb, offset + 124, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_putapplname, tvb, offset + 128, 28, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_putdate , tvb, offset + 156, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_dlh_puttime , tvb, offset + 164, 8, p_mq_parm->mq_str_enc); } offset += iSizeDLH; iHeadersLength += iSizeDLH; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MDE || p_mq_parm->mq_strucID == MQ_STRUCTID_MDE_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 12) { /* Dissect the generic part of the other pre-defined headers */ /* We assume that only one such header is present */ gint iSizeHeader; iSizeHeader = (gint) tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); /* XXX - 32 is inferred from the code below. What's the * correct minimum? */ if (iSizeHeader <= 32) THROW(ReportedBoundsError); p_mq_parm->mq_head_ccsid.encod = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc); p_mq_parm->mq_head_ccsid.ccsid = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc); if (tvb_reported_length_remaining(tvb, offset) >= iSizeHeader) { gint iTmp; gint iVer; gint iLen; gint oEnc = p_mq_parm->mq_str_enc; p_mq_parm->iOfsEnc = offset + 12; p_mq_parm->iOfsCcs = offset + 16; p_mq_parm->iOfsFmt = offset + 20; iVer = (gint)tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc); iLen = (gint)tvb_get_guint32(tvb, offset + 8, p_mq_parm->mq_int_enc); iTmp = p_mq_parm->mq_head_ccsid.ccsid; if (iTmp == 0) iTmp = p_mq_parm->mq_md_ccsid.ccsid; if (iTmp == 500) p_mq_parm->mq_str_enc = ENC_EBCDIC|ENC_NA; else p_mq_parm->mq_str_enc = ENC_UTF_8|ENC_NA; if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeHeader, ett_mq_head, NULL, val_to_str_ext(p_mq_parm->mq_strucID, GET_VALS_EXTP(StructID), "Unknown (0x%08x)")); proto_tree_add_item(mq_tree, hf_mq_head_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_head_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_head_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); dissect_mq_encoding(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_head_ccsid , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_head_format , tvb, offset + 20, 8, p_mq_parm->mq_str_enc); if (p_mq_parm->mq_strucID == MQ_STRUCTID_DH || p_mq_parm->mq_strucID == MQ_STRUCTID_DH_EBCDIC) { gint iRec; iRec = tvb_get_guint32(tvb, offset + 36, p_mq_parm->mq_int_enc); proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_dh_flags, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecfld, tvb, offset + 32, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dh_recspresent , tvb, offset + 36, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dh_objrecofs , tvb, offset + 40, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecofs, tvb, offset + 44, 4, p_mq_parm->mq_int_enc); if (iRec) { gint iOfs1; gint iOfs2; gint iFlgs; gint iSize; iFlgs = (gint)tvb_get_guint32(tvb, offset + 32, p_mq_parm->mq_int_enc); iOfs1 = (gint)tvb_get_guint32(tvb, offset + 40, p_mq_parm->mq_int_enc); iOfs2 = (gint)tvb_get_guint32(tvb, offset + 44, p_mq_parm->mq_int_enc); iSize = dissect_mq_or(tvb, mq_tree, offset + 48, iRec, iOfs1, p_mq_parm); /*iSize = */dissect_mq_pmr(tvb, mqroot_tree, offset + 48 + iSize, iRec, iOfs2, iFlgs, p_mq_parm); } } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_MDE || p_mq_parm->mq_strucID == MQ_STRUCTID_MDE_EBCDIC) { proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_groupid , tvb, offset + 32, 24, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_md_msgseqnumber, tvb, offset + 56, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_offset , tvb, offset + 60, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_msgflags , tvb, offset + 64, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_md_origlen , tvb, offset + 68, 4, p_mq_parm->mq_int_enc); } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_IIH || p_mq_parm->mq_strucID == MQ_STRUCTID_IIH_EBCDIC) { proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_iih_flags, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_iih_ltermoverride, tvb, offset + 32, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_mfsmapname , tvb, offset + 40, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_replytofmt , tvb, offset + 48, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_authenticator, tvb, offset + 56, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_transinstid , tvb, offset + 64, 16, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_iih_transstate , tvb, offset + 80, 1, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_commimode , tvb, offset + 81, 1, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_securityscope, tvb, offset + 82, 1, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_iih_reserved , tvb, offset + 83, 1, p_mq_parm->mq_str_enc); } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_CIH || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH_EBCDIC) { proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_cih_flags, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_cih_returncode , tvb, offset + 32, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_compcode , tvb, offset + 36, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_reasoncode , tvb, offset + 40, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_uowcontrols , tvb, offset + 44, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_getwaitintv , tvb, offset + 48, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_linktype , tvb, offset + 52, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_outdatalen , tvb, offset + 56, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_facilkeeptime, tvb, offset + 60, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_adsdescriptor, tvb, offset + 64, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_converstask , tvb, offset + 68, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_taskendstatus, tvb, offset + 72, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_bridgefactokn, tvb, offset + 76, 8, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_cih_function , tvb, offset + 84, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_abendcode , tvb, offset + 88, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_authenticator, tvb, offset + 92, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_reserved , tvb, offset + 100, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_replytofmt , tvb, offset + 108, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_remotesysid , tvb, offset + 116, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_remotetransid, tvb, offset + 120, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_transactionid, tvb, offset + 124, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_facilitylike , tvb, offset + 128, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_attentionid , tvb, offset + 132, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_startcode , tvb, offset + 136, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_cancelcode , tvb, offset + 140, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_nexttransid , tvb, offset + 144, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_reserved2 , tvb, offset + 148, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_cih_reserved3 , tvb, offset + 156, 8, p_mq_parm->mq_str_enc); if (iVer == 2) { proto_tree_add_item(mq_tree, hf_mq_cih_cursorpos , tvb, offset + 164, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_erroroffset , tvb, offset + 168, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_inputitem , tvb, offset + 172, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_cih_reserved4 , tvb, offset + 176, 4, p_mq_parm->mq_int_enc); } } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_RMH || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH_EBCDIC) { proto_tree_add_bitmask(mq_tree, tvb, offset + 28, hf_mq_head_flags, ett_mq_head_flags, pf_flds_rmh_flags, ENC_BIG_ENDIAN); proto_tree_add_item(mq_tree, hf_mq_rmh_objecttype , tvb, offset + 32, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_objectinstid , tvb, offset + 36, 24, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_rmh_srcenvlen , tvb, offset + 60, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_srcenvofs , tvb, offset + 64, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_srcnamelen , tvb, offset + 68, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_srcnameofs , tvb, offset + 72, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_dstenvlen , tvb, offset + 76, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_dstenvofs , tvb, offset + 80, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_dstnamelen , tvb, offset + 84, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_dstnameofs , tvb, offset + 88, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_datalogiclen , tvb, offset + 92, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_datalogicofsl, tvb, offset + 96, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rmh_datalogicofsh, tvb, offset + 100, 4, p_mq_parm->mq_int_enc); } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_WIH || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH_EBCDIC) { proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_wih_servicename , tvb, offset + 32, 32, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_wih_servicestep , tvb, offset + 64, 8, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_wih_msgtoken , tvb, offset + 72, 16, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_wih_reserved , tvb, offset + 88, 32, p_mq_parm->mq_str_enc); } else if (p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC) { int iPos, iEnd, iCCSID; int iLenStr; guint8 *sStr; proto_tree *rfh_tree; proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); iPos = offset + 32; iEnd = offset + iLen - 32; if ( iVer > 1 ) { iCCSID = (int)tvb_get_guint32(tvb, iPos, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_rfh_ccsid, tvb, iPos, 4, p_mq_parm->mq_int_enc); iPos += 4; iEnd -= 4; } else iCCSID = iTmp; while (iPos < iEnd) { iLenStr = (int)tvb_get_guint32(tvb, iPos, p_mq_parm->mq_int_enc); sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, iPos + 4, iLenStr, (iCCSID != 500) ? ENC_ASCII : ENC_EBCDIC); if (*sStr) strip_trailing_blanks(sStr, iLenStr); if (*sStr) format_text_chr(sStr, strlen((const char *)sStr), '.'); rfh_tree = proto_tree_add_subtree_format(mq_tree, tvb, iPos, iLenStr+4, ett_mq_rfh_ValueName, NULL, "NameValue: %s", sStr); proto_tree_add_item(rfh_tree, hf_mq_rfh_length, tvb, iPos, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(rfh_tree, hf_mq_rfh_string, tvb, iPos + 4, iLenStr, p_mq_parm->mq_str_enc); iPos += (iLenStr + 4); } } else { proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_head_struct, tvb, offset + 32, iSizeHeader - 32, ENC_NA); } } offset += iSizeHeader; iHeadersLength += iSizeHeader; p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; p_mq_parm->mq_str_enc = oEnc; } } } col_append_fstr(pinfo->cinfo, COL_INFO, " (%d bytes)", iSizePayload - iHeadersLength); if (!mq_in_reassembly) { /* Call subdissector for the payload */ tvbuff_t *next_tvb; p_mq_parm->mq_cur_ccsid.encod = tvb_get_guint32(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc); p_mq_parm->mq_cur_ccsid.ccsid = tvb_get_guint32(tvb, p_mq_parm->iOfsCcs, p_mq_parm->mq_int_enc); memcpy(p_mq_parm->mq_format, tvb_get_string_enc(wmem_packet_scope(), tvb, p_mq_parm->iOfsFmt, sizeof(p_mq_parm->mq_format), p_mq_parm->mq_str_enc), sizeof(p_mq_parm->mq_format)); next_tvb = tvb_new_subset_remaining(tvb, offset); if (!dissector_try_heuristic(mq_heur_subdissector_list, next_tvb, pinfo, mqroot_tree, &hdtbl_entry, p_mq_parm)) call_data_dissector(next_tvb, pinfo, mqroot_tree); } else { tvbuff_t *next_tvb; next_tvb = tvb_new_subset_remaining(tvb, offset); call_data_dissector(next_tvb, pinfo, mqroot_tree); } } offset = tvb_reported_length(tvb); } /* After all recognised structures have been dissected, process remaining structure*/ if (tvb_reported_length_remaining(tvb, offset) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); proto_tree_add_subtree_format(mqroot_tree, tvb, offset, -1, ett_mq_structid, NULL, "%s", val_to_str_ext(p_mq_parm->mq_strucID, GET_VALS_EXTP(StructID), "Unknown (0x%08x)")); } } else { /* This is a MQ segment continuation (if MQ reassembly is not enabled) */ col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]"); call_data_dissector(tvb_new_subset_remaining(tvb, offset), pinfo, tree); } } } else { /* This packet is a TCP continuation of a segment (if desegmentation is not enabled) */ col_append_str(pinfo->cinfo, COL_INFO, " [Undesegmented]"); if (tree) { proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA); } call_data_dissector(tvb_new_subset_remaining(tvb, offset), pinfo, tree); } } } static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) { mq_parm_t mq_parm; /* Reassembly of the MQ messages that span several PDU (several TSH) */ /* Typically a TCP PDU is 1460 bytes and a MQ PDU is 32766 bytes */ if (tvb_reported_length(tvb) < 28) return 0; memset(&mq_parm, 0, sizeof(mq_parm_t)); mq_parm.mq_strucID = tvb_get_ntohl(tvb, 0); if ( (mq_parm.mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (mq_parm.mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC ) { guint8 iCtlF = 0; gint32 iSegL = 0; gint32 iBegL = 0; gint32 iEnco = 0; gint32 iMulS = 0; gint32 iHdrL = 0; gint32 iNxtP = 0; guint8 iOpcd = 0; gboolean bSeg1st = FALSE; gboolean bSegLst = FALSE; gboolean bMore = FALSE; gint32 iHdl = 0; gint32 iGlbMsgIdx = 0; gint32 iSegLength = 0; gint16 iSegmIndex = 0; guint32 uStrL = 0; guint32 uPadL = 0; /* TSHM structure as 8 bytes more after the length (convid/requestid) */ if (mq_parm.mq_strucID == MQ_STRUCTID_TSHM || mq_parm.mq_strucID == MQ_STRUCTID_TSHM_EBCDIC) iMulS = 8; /* Get the Semgnet Length */ iSegL = tvb_get_ntohl ( tvb, 4); if (iMulS==8) { mq_parm.mq_convID = tvb_get_ntohl (tvb, 8); mq_parm.mq_rqstID = tvb_get_ntohl (tvb, 12); } else { mq_parm.mq_convID = 0; mq_parm.mq_rqstID = 0; } /* Get the Encoding scheme */ iEnco = (tvb_get_guint8(tvb, 8 + iMulS) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN); mq_parm.mq_int_enc = iEnco; /* Get the Operation Code */ iOpcd = tvb_get_guint8( tvb, 9 + iMulS); mq_parm.mq_opcode = iOpcd; /* Get the Control Flag */ iCtlF = tvb_get_guint8( tvb, 10 + iMulS); mq_parm.mq_ctlf1 = iCtlF; /* First Segment ? */ bSeg1st = ((iCtlF & MQ_TCF_FIRST) != 0); /* Last Segment */ bSegLst = ((iCtlF & MQ_TCF_LAST) != 0); mq_in_reassembly = FALSE; if ((iOpcd > 0x80 && !(bSeg1st && bSegLst)) || iOpcd == MQ_TST_ASYNC_MESSAGE) { proto_tree *mq_tree = NULL; /* Optimisation : only fragmented segments go through the reassembly process */ /* It seems that after a PUT on a Queue, when doing a GET, MQ first get a small part of the response (4096 bytes) The response contain the number of bytes returned for this request (ActMsgLen) and the total number of bytes of this reply (TotMsgLen) this mean the flow seems to be : PUT REQUEST_MSG (MaxLen=4096) ASYNC_MSG (1st/Lst Segment, ActMsgLen=4096, TotMsgLen=279420) as ActMsgLen!=TotMsgLen, this mean the MSG is not complete, we only receive some of 279420 bytes REQUEST_MSG (MaxLen=279420) ASYNC_MSG (1st Segment, SegIndex=0 ActMsgLen=279420, TotMsgLen=279420) ASYNC_MSG (Mid Segment, SegIndex=1) ASYNC_MSG (Mid Segment, SegIndex=2) . ASYNC_MSG (Lst Segment, SegIndex=n) End of reassembling (we have 279420 bytes to decode) */ if (mq_reassembly) { fragment_head *fd_head; guint32 iConnectionId = (pinfo->srcport + pinfo->destport); iHdrL = 28 + iMulS; /* Get the MQ Handle of the Object */ iHdl = tvb_get_guint32(tvb, iHdrL + 4, iEnco); /* Get the Global Message Index */ iGlbMsgIdx = tvb_get_guint32(tvb, iHdrL + 12, iEnco); /* Get the Segment Length */ iSegLength = tvb_get_guint32(tvb, iHdrL + 16, iEnco); /* Get the Segment Index */ iSegmIndex = tvb_get_guint16(tvb, iHdrL +20, iEnco); /* if SegmIndex == 0, it has 54 bytes + the length and padding of a variable string at the end of the Header */ if (iSegmIndex == 0) { uStrL = tvb_get_guint8(tvb, iHdrL + 54); uPadL = ((((2+1+uStrL)/4)+1)*4)-(2+1+uStrL); } bMore = !bSegLst; /* First segment has a longer header */ iNxtP = iHdrL + ((bSeg1st) ? (54 + 1 + uStrL + uPadL) : (24)); iNxtP += dissect_mq_md(tvb, NULL, iNxtP, &mq_parm, FALSE); /* if it is the 1st Segment, it means we are of the beginning of a reassembling. We must take the whole segment (with tSHM, and headers) */ iBegL = (bSeg1st) ? 0 : iNxtP; fd_head = fragment_add_seq_next(&mq_reassembly_table, tvb, iBegL, pinfo, iConnectionId, NULL, iSegL - iBegL, bMore); if (tree) { proto_item *ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA); if (bMore) { proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]", val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); dissect_mq_addCR_colinfo(pinfo, &mq_parm); proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); } else { proto_item_append_text(ti, " %s", val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); dissect_mq_addCR_colinfo(pinfo, &mq_parm); proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); } mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb); } else { mq_tree = tree; } if (fd_head != NULL && pinfo->num == fd_head->reassembled_in) { tvbuff_t *next_tvb; /* Reassembly finished */ if (fd_head->next != NULL) { /* 2 or more fragments */ next_tvb = tvb_new_chain(tvb, fd_head->tvb_data); add_new_data_source(pinfo, next_tvb, "Reassembled MQ"); } else { /* Only 1 fragment */ next_tvb = tvb; } dissect_mq_pdu(next_tvb, pinfo, mq_tree); return tvb_reported_length(tvb); } else { mq_in_reassembly = TRUE; /* Reassembly in progress */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ"); col_add_fstr(pinfo->cinfo, COL_INFO, "[%s of a Reassembled MQ Segment]", val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)")); dissect_mq_addCR_colinfo(pinfo, &mq_parm); col_add_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); dissect_mq_pdu(tvb, pinfo, mq_tree); return tvb_reported_length(tvb); } } else { dissect_mq_pdu(tvb, pinfo, tree); if (bSeg1st) { /* MQ segment is the first of a unreassembled series */ col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]"); } return tvb_reported_length(tvb); } } /* Reassembly not enabled or non-fragmented message */ dissect_mq_pdu(tvb, pinfo, tree); } return tvb_reported_length(tvb); } static guint get_mq_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset, void *data _U_) { if (tvb_reported_length_remaining(tvb, offset) >= 8) { guint32 mq_strucID = tvb_get_ntohl(tvb, 0); if ( (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC ) { return tvb_get_ntohl(tvb, offset + 4); } } return 0; } static int dissect_mq_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data) { tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq, data); return tvb_captured_length(tvb); } static int dissect_mq_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data _U_) { /* Since SPX has no standard desegmentation, MQ cannot be performed as well */ dissect_mq_pdu(tvb, pinfo, tree); return tvb_captured_length(tvb); } static gboolean dissect_mq_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gboolean is_tcp, dissector_handle_t *ssl_app_handle) { if ((tvb_captured_length(tvb) >= 4) && (tvb_reported_length(tvb) >= 28)) { guint32 mq_strucID = tvb_get_ntohl(tvb, 0); if ( (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC ) { /* Register this dissector for this conversation */ conversation_t *conversation; conversation = find_or_create_conversation(pinfo); if (is_tcp) conversation_set_dissector(conversation, mq_handle); else if (ssl_app_handle) *ssl_app_handle = mq_handle; /* Dissect the packet */ reassemble_mq(tvb, pinfo, tree, NULL); return TRUE; } } return FALSE; } static gboolean dissect_mq_heur_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { return dissect_mq_heur(tvb, pinfo, tree, TRUE, NULL); } static gboolean dissect_mq_heur_nontcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { return dissect_mq_heur(tvb, pinfo, tree, FALSE, NULL); } static gboolean dissect_mq_heur_ssl(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { dissector_handle_t *app_handle = (dissector_handle_t *) data; return dissect_mq_heur(tvb, pinfo, tree, FALSE, app_handle); } static void mq_init(void) { reassembly_table_init(&mq_reassembly_table, &addresses_reassembly_table_functions); } static void mq_cleanup(void) { reassembly_table_destroy(&mq_reassembly_table); } void proto_register_mq(void) { static hf_register_info hf[] = { { &hf_mq_tsh_StructID , {"StructID..", "mq.tsh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_tsh_mqseglen , {"MQSegmLen.", "mq.tsh.seglength", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH MQ Segment length", HFILL }}, { &hf_mq_tsh_convid , {"Convers ID", "mq.tsh.convid", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Conversation ID", HFILL }}, { &hf_mq_tsh_requestid, {"Request ID", "mq.tsh.requestid", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Request ID", HFILL }}, { &hf_mq_tsh_byteorder, {"Byte order", "mq.tsh.byteorder", FT_UINT8, BASE_HEX, VALS(GET_VALSV(byteorder)), 0x0, "TSH Byte order", HFILL }}, { &hf_mq_tsh_opcode , {"SegmType..", "mq.tsh.type", FT_UINT8, BASE_HEX | BASE_EXT_STRING, GET_VALS_EXTP(opcode), 0x0, "TSH MQ segment type", HFILL }}, { &hf_mq_tsh_ctlflgs1 , {"Ctl Flag 1", "mq.tsh.cflags1", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags 1", HFILL }}, { &hf_mq_tsh_ctlflgs2 , {"Ctl Flag 2", "mq.tsh.cflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags 2", HFILL }}, { &hf_mq_tsh_luwid , {"LUW Ident.", "mq.tsh.luwid", FT_BYTES, BASE_NONE, NULL, 0x0, "TSH logical unit of work identifier", HFILL }}, { &hf_mq_tsh_encoding , {"Encoding..", "mq.tsh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Encoding", HFILL }}, { &hf_mq_tsh_ccsid , {"CCSID.....", "mq.tsh.ccsid", FT_INT16, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "TSH CCSID", HFILL }}, { &hf_mq_tsh_reserved , {"Reserved..", "mq.tsh.reserved", FT_UINT16, BASE_HEX, NULL, 0x0, "TSH Reserved", HFILL }}, { &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 }}, { &hf_mq_tsh_tcf_error , {"Error", "mq.tsh.tcf.error", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_ERROR, "TSH TCF Error", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_tsh_tcf2_CSH , {"CSH", "mq.tsh.tcf2.csh" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_CSH , "TSH TCF2 CSH", HFILL }}, { &hf_mq_tsh_tcf2_CmitIntv , {"ComitIntvl", "mq.tsh.tcf.cmitintv", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF2_CMIT_INTERVAL, "TSH TCF2 Commit Interval", HFILL }}, { &hf_mq_api_replylen , {"Reply len..", "mq.api.replylength", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reply length", HFILL }}, { &hf_mq_api_compcode , {"Compl Code.", "mq.api.completioncode", FT_UINT32, BASE_DEC, VALS(GET_VALSV(mqcc)), 0x0, "API Completion code", HFILL }}, { &hf_mq_api_reascode , {"Reason Code", "mq.api.reasoncode", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqrc), 0x0, "API Reason code", HFILL }}, { &hf_mq_api_objecthdl, {"Object Hdl.", "mq.api.hobj", FT_UINT32, BASE_HEX, NULL, 0x0, "API Object handle", HFILL }}, { &hf_mq_socket_conversid, {"ConversId", "mq.socket.conversid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Conversation Id", HFILL }}, { &hf_mq_socket_requestid, {"RequestId", "mq.socket.requestid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Request Id", HFILL }}, { &hf_mq_socket_type , {"Type.....", "mq.socket.type", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Type", HFILL }}, { &hf_mq_socket_parm1 , {"Parm1....", "mq.socket.parm1", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Parameter 1", HFILL }}, { &hf_mq_socket_parm2 , {"Parm2....", "mq.socket.parm2", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "Socket Parameter 2", HFILL }}, { &hf_mq_caut_StructID , {"StructID.", "mq.caut.structid" , FT_STRINGZ, BASE_NONE , NULL, 0x0, NULL, HFILL }}, { &hf_mq_caut_AuthType , {"AuthType.", "mq.caut.authtype" , FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "CAUT Authority Type", HFILL }}, { &hf_mq_caut_UsrMaxLen, {"UsrMaxLen", "mq.caut.usrmaxlen", FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "CAUT userid Maximum length", HFILL }}, { &hf_mq_caut_PwdMaxLen, {"PwdMaxLen", "mq.caut.pwdmaxlen", FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "CAUT password Maximum length", HFILL }}, { &hf_mq_caut_UsrLength, {"UsrLength", "mq.caut.usrlength", FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "CAUT userid length", HFILL }}, { &hf_mq_caut_PwdLength, {"PwdLength", "mq.caut.pswlength", FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "CAUT password length", HFILL }}, { &hf_mq_caut_usr , {"userid...", "mq.msh.userid" , FT_STRINGZ, BASE_NONE , NULL, 0x0, "CAUT UserId", HFILL }}, { &hf_mq_caut_psw , {"password.", "mq.msh.password" , FT_STRINGZ, BASE_NONE , NULL, 0x0, "CAUT Password", HFILL }}, { &hf_mq_msh_StructID , {"StructID", "mq.msh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_msh_seqnum , {"Seq Numb", "mq.msh.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH sequence number", HFILL }}, { &hf_mq_msh_datalength, {"Buf len.", "mq.msh.buflength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH buffer length", HFILL }}, { &hf_mq_msh_unknown1 , {"Unknown1", "mq.msh.unknown1", FT_UINT32, BASE_HEX, NULL, 0x0, "MSH unknown1", HFILL }}, { &hf_mq_msh_msglength , {"Msg len.", "mq.msh.msglength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH message length", HFILL }}, { &hf_mq_xqh_StructID , {"StructID", "mq.xqh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_xqh_version , {"Version.", "mq.xqh.version", FT_UINT32, BASE_DEC, NULL, 0x0, "XQH version", HFILL }}, { &hf_mq_xqh_remoteq , {"Remote Q", "mq.xqh.remoteq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue", HFILL }}, { &hf_mq_xqh_remoteqmgr, {"Rmt QMgr", "mq.xqh.remoteqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue manager", HFILL }}, { &hf_mq_id_StructID , {"Structid..", "mq.id.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_id_FapLevel , {"FAP level.", "mq.id.level", FT_UINT8, BASE_DEC, NULL, 0x0, "ID Formats And Protocols level", HFILL }}, { &hf_mq_id_icf1 , {"CapFlag1..", "mq.id.idflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability Flags 1", HFILL }}, { &hf_mq_id_Eicf1 , {"ECapFlag1.", "mq.id.ideflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID E Capability Flags 1", HFILL }}, { &hf_mq_id_ief1 , {"IniErrFlg1", "mq.id.ief", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Initial Error Flags 1", HFILL }}, { &hf_mq_id_Reserved , {"Reserved..", "mq.id.unknown04", FT_UINT16, BASE_HEX, NULL, 0x0, "ID Reserved", HFILL }}, { &hf_mq_id_MaxMsgBatch, {"MaxMsgBtch", "mq.id.MaxMsgBatch", FT_UINT16, BASE_DEC, NULL, 0x0, "ID max msg per batch", HFILL }}, { &hf_mq_id_MaxTrSize , {"MaxTrSize.", "mq.id.MaxTrSize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max trans size", HFILL }}, { &hf_mq_id_MaxMsgSize , {"MaxMsgSize", "mq.id.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max msg size", HFILL }}, { &hf_mq_id_SeqWrapVal , {"SeqWrapVal", "mq.id.seqwrap", FT_UINT32, BASE_DEC, NULL, 0x0, "ID seq wrap value", HFILL }}, { &hf_mq_id_channel , {"ChannelNme", "mq.id.channelname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID channel name", HFILL }}, { &hf_mq_id_icf2 , {"CapFlag2..", "mq.id.idflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability flags 2", HFILL }}, { &hf_mq_id_Eicf2 , {"ECapFlag2.", "mq.id.ideflags2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID E Capabitlity flags 2", HFILL }}, { &hf_mq_id_ccsid , {"ccsid.....", "mq.id.ccsid", FT_INT16, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "ID Coded Character Set ID", HFILL }}, { &hf_mq_id_qmgrname , {"QMgrName..", "mq.id.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Queue Manager Name", HFILL }}, { &hf_mq_id_HBInterval , {"HBInterval", "mq.id.hbint", FT_UINT32, BASE_DEC, NULL, 0x0, "ID Heartbeat interval", HFILL }}, { &hf_mq_id_EFLLength , {"EFLLength.", "mq.id.efllength", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID EFL Length", HFILL }}, { &hf_mq_id_ief2 , {"IniErrFlg2", "mq.id.inierrflg2", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Initial Error Flags 2", HFILL }}, { &hf_mq_id_Reserved1 , {"Reserved1.", "mq.id.reserved1", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 1", HFILL }}, { &hf_mq_id_HdrCprsLst , {"HdrCprsLst", "mq.id.hdrcprslst", FT_BYTES, BASE_NONE, NULL, 0x0, "ID Hdr Cprs Lst", HFILL }}, { &hf_mq_id_MsgCprsLst , {"MsgCprsLst", "mq.id.msgcprslst", FT_BYTES, BASE_NONE, NULL, 0x0, "ID Msg Cprs Lst", HFILL }}, { &hf_mq_id_Reserved2 , {"Reserved2.", "mq.id.reserved2", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 2", HFILL }}, { &hf_mq_id_SSLKeyRst , {"SSLKeyRst.", "mq.id.sslkeyrst", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID SSL Key Reset", HFILL }}, { &hf_mq_id_ConvBySkt , {"ConvBySkt.", "mq.id.convbyskt", FT_INT32, BASE_DEC, NULL, 0x0, "ID Conv Per Socket", HFILL }}, { &hf_mq_id_icf3 , {"CapFlag3..", "mq.id.idflags3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID Capability flags 3", HFILL }}, { &hf_mq_id_Eicf3 , {"ECapFlag3.", "mq.id.ideflags3", FT_UINT8, BASE_HEX_DEC, NULL, 0x0, "ID E Capability flags 3", HFILL }}, { &hf_mq_id_Reserved3 , {"Reserved3.", "mq.id.reserved3", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "ID Reserved 3", HFILL }}, { &hf_mq_id_ProcessId , {"ProcessId.", "mq.id.processid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Process Identifier", HFILL }}, { &hf_mq_id_ThreadId , {"ThreadId..", "mq.id.threadid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Thread Identifier", HFILL }}, { &hf_mq_id_TraceId , {"TraceId...", "mq.id.traceid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Trace Identifier", HFILL }}, { &hf_mq_id_ProdId , {"ProdId....", "mq.id.prodid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Product Identifier", HFILL }}, { &hf_mq_id_mqmid , {"MQM ID....", "mq.id.mqmid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID MQM ID", HFILL }}, { &hf_mq_id_icf1_msgseq , {"Message sequence", "mq.id.icf.msgseq" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_MSG_SEQ, "ID ICF Message sequence", HFILL }}, { &hf_mq_id_icf1_convcap , {"Conversion capable", "mq.id.icf.convcap" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL }}, { &hf_mq_id_icf1_splitmsg, {"Split messages", "mq.id.icf.splitmsg", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_SPLIT_MESSAGE, "ID ICF Split message", HFILL }}, { &hf_mq_id_icf1_RqstInit, {"Request Initiation", "mq.id.icf.rqstinit", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_REQUEST_INITIATION, "ID ICF Request Initiation", HFILL }}, { &hf_mq_id_icf1_RqstSecu, {"Request Security", "mq.id.icf.rqstsecu", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_REQUEST_SECURITY, "ID ICF Request Security", HFILL }}, { &hf_mq_id_icf1_mqreq , {"MQ request", "mq.id.icf.mqreq" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_MQREQUEST, "ID ICF MQ request", HFILL }}, { &hf_mq_id_icf1_svrsec , {"Srvr Con security", "mq.id.icf.svrsec" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_SVRCONN_SECURITY, "ID ICF Server connection security", HFILL }}, { &hf_mq_id_icf1_runtime , {"Runtime applic", "mq.id.icf.runtime" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_RUNTIME, "ID ICF Runtime application", HFILL }}, { &hf_mq_id_icf2_CanDstLst, {"DistListCapable", "mq.id.icf2.distlistcap" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_DIST_LIST_CAPABLE, "ID ICF2 Distribution List Capable", HFILL }}, { &hf_mq_id_icf2_FstMsgReq, {"Fast Msg Reqrd", "mq.id.icf2.fastmsgrqrd" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_FAST_MESSAGES_REQUIRED, "ID ICF2 Fast Message Required", HFILL }}, { &hf_mq_id_icf2_RespConv , {"RspndrConversion", "mq.id.icf2.respndrconvers", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_RESPONDER_CONVERSION, "ID ICF2 Responder Conversion", HFILL }}, { &hf_mq_id_icf2_XARequest, {"XARequest", "mq.id.icf2.xarequest" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_XAREQUEST, "ID ICF2 XA Request", HFILL }}, { &hf_mq_id_icf2_XARunTApp, {"XARunTypApp", "mq.id.icf2.xaruntypapp" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_XARUNTIME_APP, "ID ICF2 XA Runtime App", HFILL }}, { &hf_mq_id_icf2_SPIRqst , {"SPIRequest", "mq.id.icf2.spirequest" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_SPIREQUEST, "ID ICF2 SPI Request", HFILL }}, { &hf_mq_id_icf2_DualUOW , {"DualUOW", "mq.id.icf2.dualuow" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_DUAL_UOW, "ID ICF2 Dual UOW", HFILL }}, { &hf_mq_id_icf2_CanTrcRte, {"Trace Rte Capab", "mq.id.icf2.cantraceroute" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF2_TRACE_ROUTE_CAPABLE, "ID ICF2 Trace Route Capable", HFILL }}, { &hf_mq_id_icf3_CanMsgPrp, {"Msg Property Cap", "mq.id.icf.msgprpcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF3_MSG_PROP_CAPABLE, "ID ICF3 Message PropertyCapable", HFILL }}, { &hf_mq_id_icf3_Unknown02, {"Unknownx02", "mq.id.icf.unknown02", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF3_UNKNOWNX02, "ID ICF3 Unknown Falg x02", HFILL }}, { &hf_mq_id_ief1_ccsid , {"Invalid CCSID", "mq.id.ief1.ccsid", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_CCSID, "ID invalid CCSID", HFILL }}, { &hf_mq_id_ief1_enc , {"Invalid encoding", "mq.id.ief1.enc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF1_ENCODING, "ID invalid encoding", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_uid_StructID , {"Structid", "mq.uid.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_uid_userid , {"User ID.", "mq.uid.userid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID structid", HFILL }}, { &hf_mq_uid_password , {"Password", "mq.uid.password", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID password", HFILL }}, { &hf_mq_uid_longuserid, {"Long UID", "mq.uid.longuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID long user id", HFILL }}, { &hf_mq_sidlen , {"SID Len.", "mq.uid.sidlen", FT_UINT8, BASE_DEC, NULL, 0x0, "Sid Len", HFILL }}, { &hf_mq_sidtyp , {"SIDType.", "mq.uid.sidtyp", FT_UINT8, BASE_DEC, VALS(GET_VALSV(sidtype)), 0x0, "Sid Typ", HFILL }}, { &hf_mq_securityid , {"SecurID.", "mq.uid.securityid", FT_BYTES, BASE_NONE, NULL, 0x0, "Security ID", HFILL }}, { &hf_mq_conn_QMgr , {"QMgr....", "mq.conn.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN queue manager", HFILL }}, { &hf_mq_conn_appname , {"ApplName", "mq.conn.appname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN application name", HFILL }}, { &hf_mq_conn_apptype , {"ApplType", "mq.conn.apptype", FT_INT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqat), 0x0, "CONN application type", HFILL }}, { &hf_mq_conn_acttoken , {"AccntTok", "mq.conn.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN accounting token", HFILL }}, { &hf_mq_conn_version , {"Version.", "mq.conn.version", FT_UINT32, BASE_DEC, VALS(mq_conn_version_vals), 0x0, "CONN version", HFILL }}, { &hf_mq_conn_options , {"Options.", "mq.conn.options", FT_UINT32, BASE_HEX, NULL, 0x0, "CONN options", HFILL }}, { &hf_mq_fcno_StructID , {"StructId.", "mq.fcno.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_fcno_version , {"version..", "mq.fcno.version", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO version", HFILL }}, { &hf_mq_fcno_option , {"Option...", "mq.fcno.option", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO option", HFILL }}, { &hf_mq_fcno_connid , {"connId...", "mq.fcno.connid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FCNO Connection ID", HFILL }}, { &hf_mq_fcno_unknown02, {"unknown02", "mq.fcno.unknown02", FT_BYTES, BASE_NONE, NULL, 0x0, "FCNO unknown02", HFILL }}, { &hf_mq_fcno_msgid , {"msgid....", "mq.fcno.msgid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FCNO Msg ID", HFILL }}, { &hf_mq_fcno_mqmid , {"MqmId....", "mq.fcno.mqmid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FCNO Mqm ID", HFILL }}, { &hf_mq_inq_nbsel , {"Selector count..", "mq.inq.nbsel", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Selector count", HFILL }}, { &hf_mq_inq_nbint , {"Integer count...", "mq.inq.nbint", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Integer count", HFILL }}, { &hf_mq_inq_charlen , {"Character length", "mq.inq.charlen", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Character length", HFILL }}, { &hf_mq_inq_sel , {"Selector........", "mq.inq.sel", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(selector), 0x0, "INQ Selector", HFILL }}, { &hf_mq_inq_intvalue , {"Integer value...", "mq.inq.intvalue", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Integer value", HFILL }}, { &hf_mq_inq_charvalues, {"Char values.....", "mq.inq.charvalues", FT_STRINGZ, BASE_NONE, NULL, 0x0, "INQ Character values", HFILL }}, { &hf_mq_spi_verb , {"SPI Verb", "mq.spi.verb", FT_UINT32, BASE_DEC, VALS(GET_VALSV(spi_verbs)), 0x0, NULL, HFILL }}, { &hf_mq_spi_version , {"Version", "mq.spi.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Version", HFILL }}, { &hf_mq_spi_length , {"Max reply size", "mq.spi.replength", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Max reply size", HFILL }}, { &hf_mq_spi_base_StructID, {"SPI Structid", "mq.spib.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_spi_base_version , {"Version", "mq.spib.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Base Version", HFILL }}, { &hf_mq_spi_base_length , {"Length", "mq.spib.length", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Base Length", HFILL }}, { &hf_mq_spi_spqo_nbverb , {"Number of verbs", "mq.spqo.nbverb", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Number of verbs", HFILL }}, { &hf_mq_spi_spqo_verbid , {"Verb", "mq.spqo.verb", FT_UINT32, BASE_DEC, VALS(GET_VALSV(spi_verbs)), 0x0, "SPI Query Output VerbId", HFILL }}, { &hf_mq_spi_spqo_maxiover, {"Max InOut Version", "mq.spqo.maxiov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max InOut Version", HFILL }}, { &hf_mq_spi_spqo_maxinver, {"Max In Version", "mq.spqo.maxiv", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max In Version", HFILL }}, { &hf_mq_spi_spqo_maxouver, {"Max Out Version", "mq.spqo.maxov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max Out Version", HFILL }}, { &hf_mq_spi_spqo_flags , {"Flags", "mq.spqo.flags", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output flags", HFILL }}, { &hf_mq_spi_spai_mode , {"Mode", "mq.spai.mode", FT_UINT32, BASE_DEC, VALS(GET_VALSV(spi_activate)), 0x0, "SPI Activate Input mode", HFILL }}, { &hf_mq_spi_spai_unknown1, {"Unknown1", "mq.spai.unknown1", FT_STRINGZ, BASE_NONE, NULL, 0x0, "SPI Activate Input unknown1", HFILL }}, { &hf_mq_spi_spai_unknown2, {"Unknown2", "mq.spai.unknown2", FT_STRINGZ, BASE_NONE, NULL, 0x0, "SPI Activate Input unknown2", HFILL }}, { &hf_mq_spi_spai_msgid , {"Message Id", "mq.spai.msgid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "SPI Activate Input message id", HFILL }}, { &hf_mq_spi_spgi_batchsz , {"Batch size", "mq.spgi.batchsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch size", HFILL }}, { &hf_mq_spi_spgi_batchint, {"Batch interval", "mq.spgi.batchint", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch interval", HFILL }}, { &hf_mq_spi_spgi_maxmsgsz, {"Max message size", "mq.spgi.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input max message size", HFILL }}, { &hf_mq_spi_spgo_options , {"Options", "mq.spgo.options", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Output options", HFILL }}, { &hf_mq_spi_spgo_size , {"Size", "mq.spgo.size", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Output size", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_put_length , {"Data length", "mq.put.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PUT Data length", HFILL }}, { &hf_mq_close_options , {"Options", "mq.close.options", FT_UINT32, BASE_HEX, NULL, 0x0, "CLOSE options", HFILL }}, { &hf_mq_close_options_DELETE , {"DELETE", "mq.close.options.Delete", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_DELETE, "CLOSE options DELETE", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_close_options_QUIESCE , {"QUIESCE", "mq.close.options.Quiesce", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQCO_QUIESCE, "CLOSE options QUIESCE", HFILL }}, { &hf_mq_open_options , {"Options", "mq.open.options", FT_UINT32, BASE_HEX, NULL, 0x0, "OPEN options", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_open_options_BROWSE , {"BROWSE", "mq.open.options.Browse", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_BROWSE, "OPEN options BROWSE", HFILL }}, { &hf_mq_open_options_OUTPUT , {"OUTPUT", "mq.open.options.Output", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_OUTPUT, "OPEN options OUTPUT", HFILL }}, { &hf_mq_open_options_INQUIRE , {"INQUIRE", "mq.open.options.Inquire", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_INQUIRE, "OPEN options INQUIRE", HFILL }}, { &hf_mq_open_options_SET , {"SET", "mq.open.options.Set", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQOO_SET, "OPEN options SET", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_fopa_StructID, {"StructId", "mq.fopa.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_fopa_version , {"Version.", "mq.fopa.version", FT_UINT32, BASE_DEC, NULL, 0x0, "FOPA Version", HFILL }}, { &hf_mq_fopa_length , {"Length..", "mq.fopa.length", FT_UINT32, BASE_DEC, NULL, 0x0, "FOPA Length", HFILL }}, { &hf_mq_fopa_unknown1, {"Unknown1", "mq.fopa.unknown1", FT_UINT32, BASE_HEX, NULL, 0x0, "FOPA unknown1", HFILL }}, { &hf_mq_fopa_unknown2, {"Unknown2", "mq.fopa.unknown2", FT_UINT32, BASE_HEX, NULL, 0x0, "FOPA unknown2", HFILL }}, { &hf_mq_fopa_unknown3, {"Unknown3", "mq.fopa.unknown3", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FOPA unknown3", HFILL }}, { &hf_mq_fopa_qprotect, {"qprotect", "mq.fopa.qprotect", FT_STRINGZ, BASE_NONE, NULL, 0x0, "FOPA queue protection", HFILL }}, { &hf_mq_fopa_unknown4, {"Unknown4", "mq.fopa.unknown4", FT_UINT32, BASE_HEX, NULL, 0x0, "FOPA unknown4", HFILL }}, { &hf_mq_fopa_unknown5, {"Unknown5", "mq.fopa.unknown5", FT_UINT32, BASE_HEX, NULL, 0x0, "FOPA unknown5", HFILL }}, { &hf_mq_msgreq_version , {"version..", "mq.msgreq.version" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ version", HFILL }}, { &hf_mq_msgreq_handle , {"handle...", "mq.msgreq.handle" , FT_UINT32, BASE_HEX, NULL, 0x0, "MSGREQ handle", HFILL }}, { &hf_mq_msgreq_RecvBytes, {"RecvBytes", "mq.msgreq.unknown1" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Received Bytes", HFILL }}, { &hf_mq_msgreq_RqstBytes, {"RqstBytes", "mq.msgreq.rqstbytes", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Requesed Bytes", HFILL }}, { &hf_mq_msgreq_MaxMsgLen, {"MaxMsgLen", "mq.msgreq.maxmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Maximum Msg Length", HFILL }}, { &hf_mq_msgreq_WaitIntrv, {"WaitIntrv", "mq.msgreq.waitintrv", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Wait Interval", HFILL }}, { &hf_mq_msgreq_QueStatus, {"QueStatus", "mq.msgreq.questatus", FT_UINT32, BASE_HEX , NULL, 0x0, "MSGREQ Queue Status", HFILL }}, { &hf_mq_msgreq_RqstFlags, {"RqstFlags", "mq.msgreq.rqstflags", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Request Flags", HFILL }}, { &hf_mq_msgreq_GlbMsgIdx, {"GlbMsgIdx", "mq.msgreq.glbmsgidx", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Global Message Index", HFILL }}, { &hf_mq_msgreq_SelectIdx, {"SelectIdx", "mq.msgreq.selectIdx", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Selection Index", HFILL }}, { &hf_mq_msgreq_MQMDVers , {"MQMDVers.", "mq.msgreq.mqmdvers" , FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGREQ MQMD Version", HFILL }}, { &hf_mq_msgreq_ccsid , {"CCSID....", "mq.msgreq.ccsid" , FT_INT32 , BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "MSGREQ ccsid", HFILL }}, { &hf_mq_msgreq_encoding , {"Encoding.", "mq.msgreq.encoding" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ encoding", HFILL }}, { &hf_mq_msgreq_MsgSeqNum, {"MsgSeqNum", "mq.msgreq.msgseqnum", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Message Sequence Number", HFILL }}, { &hf_mq_msgreq_offset , {"Offset...", "mq.msgreq.offset" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGREQ Offset", HFILL }}, { &hf_mq_msgreq_mtchMsgId, {"mtchMsgId", "mq.msgreq.mtchMsgId", FT_BYTES , BASE_NONE , NULL, 0x0, "MSGREQ match MsgID", HFILL }}, { &hf_mq_msgreq_mtchCorId, {"mtchCorID", "mq.msgreq.mtchcorid", FT_BYTES , BASE_NONE , NULL, 0x0, "MSGREQ match Correlation Id", HFILL }}, { &hf_mq_msgreq_mtchGrpid, {"mtchGrpID", "mq.msgreq.mtchgrpid", FT_BYTES , BASE_NONE , NULL, 0x0, "MSGREQ match Group ID", HFILL }}, { &hf_mq_msgreq_mtchMsgTk, {"mtchMsgTk", "mq.msgreq.mtchmsgtk", FT_BYTES , BASE_NONE , NULL, 0x0, "MSGREQ match Message Token", HFILL }}, { &hf_mq_msgasy_version , {"version..", "mq.msgasy.version" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC version", HFILL }}, { &hf_mq_msgasy_handle , {"handle...", "mq.msgasy.handle" , FT_UINT32, BASE_HEX, NULL, 0x0, "MSGASYNC handle", HFILL }}, { &hf_mq_msgasy_MsgIndex , {"MsgIndex.", "mq.msgasy.msgindex" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Message Index", HFILL }}, { &hf_mq_msgasy_GlbMsgIdx, {"GlbMsgIdx", "mq.msgasy.glbmsgidx", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Global Message Index", HFILL }}, { &hf_mq_msgasy_SegLength, {"SegLength", "mq.msgasy.seglength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Length", HFILL }}, { &hf_mq_msgasy_SegmIndex, {"SegmIndex", "mq.msgasy.segmindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Index", HFILL }}, { &hf_mq_msgasy_SeleIndex, {"SeleIndex", "mq.msgasy.seleindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Selection Index", HFILL }}, { &hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_HEX , NULL, 0x0, "MSGASYNC Reason Code", HFILL }}, { &hf_mq_msgasy_ActMsgLen, {"ActMsgLen", "mq.msgasy.actmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Actual Message Length", HFILL }}, { &hf_mq_msgasy_TotMsgLen, {"TotMsgLen", "mq.msgasy.totmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Total Message Length", HFILL }}, { &hf_mq_msgasy_MsgToken , {"MsgToken.", "mq.msgasy.msgtoken" , FT_BYTES , BASE_NONE , NULL, 0x0, "MSGASYNC Mesasage Token", HFILL }}, { &hf_mq_msgasy_Status , {"status...", "mq.msgasy.status" , FT_UINT16, BASE_HEX , NULL, 0x0, "MSGASYNC Status", HFILL }}, { &hf_mq_msgasy_resolQNLn, {"resolQNLn", "mq.msgasy.resolqnln", FT_UINT8 , BASE_DEC , NULL, 0x0, "MSGASYNC Resolved Queue Name Length", HFILL }}, { &hf_mq_msgasy_resolQNme, {"resolQNme", "mq.msgasy.resolqnme", FT_STRINGZ, BASE_NONE , NULL, 0x0, "MSGASYNC Resolved Queue Name", HFILL }}, { &hf_mq_msgasy_padding , {"Padding..", "mq.msgasy.padding" , FT_BYTES , BASE_NONE , NULL, 0x0, "MSGASYNC Padding", HFILL }}, { &hf_mq_notif_vers , {"version.", "mq.notif.vers" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "NOTIFICATION version", HFILL }}, { &hf_mq_notif_handle , {"handle..", "mq.notif.handle", FT_UINT32, BASE_HEX , NULL, 0x0, "NOTIFICATION handle", HFILL }}, { &hf_mq_notif_code , {"code....", "mq.notif.code" , FT_UINT32, BASE_HEX_DEC, VALS(GET_VALSV(notifcode)), 0x0, "NOTIFICATION code", HFILL }}, { &hf_mq_notif_value , {"value...", "mq.notif.value" , FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "NOTIFICATION MQRC", HFILL }}, { &hf_mq_ping_length , {"Length", "mq.ping.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PING length", HFILL }}, { &hf_mq_ping_buffer , {"Buffer", "mq.ping.buffer", FT_BYTES, BASE_NONE, NULL, 0x0, "PING buffer", HFILL }}, { &hf_mq_reset_length , {"Length", "mq.reset.length", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET length", HFILL }}, { &hf_mq_reset_seqnum , {"SeqNum", "mq.reset.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET sequence number", HFILL }}, { &hf_mq_status_length , {"Length", "mq.status.length", FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS length", HFILL }}, { &hf_mq_status_code , {"Code..", "mq.status.code" , FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(status), 0x0, "STATUS code", HFILL }}, { &hf_mq_status_value , {"Value.", "mq.status.value" , FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS value", HFILL }}, { &hf_mq_od_StructID , {"StructID.........", "mq.od.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_od_version , {"version..........", "mq.od.version", FT_UINT32, BASE_DEC, NULL, 0x0, "OD version", HFILL }}, { &hf_mq_od_objecttype , {"ObjType..........", "mq.od.objtype", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(objtype), 0x0, "OD object type", HFILL }}, { &hf_mq_od_objectname , {"ObjName..........", "mq.od.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object name", HFILL }}, { &hf_mq_od_objqmgrname , {"ObjQMgr..........", "mq.od.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object queue manager name", HFILL }}, { &hf_mq_od_dynqname , {"DynQName.........", "mq.od.dynqname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD dynamic queue name", HFILL }}, { &hf_mq_od_altuserid , {"AltUserID........", "mq.od.altuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate userid", HFILL }}, { &hf_mq_od_recspresent , {"NbrRecord........", "mq.od.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "OD number of records", HFILL }}, { &hf_mq_od_knowndstcnt , {"Known Dest Count.", "mq.od.kdestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD known destination count", HFILL }}, { &hf_mq_od_unknowdstcnt, {"Unknown Dest Cnt.", "mq.od.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD unknown destination count", HFILL }}, { &hf_mq_od_invaldstcnt , {"Invalid Dest Cnt.", "mq.od.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD invalid destination count", HFILL }}, { &hf_mq_od_objrecofs , {"Offset of 1st OR.", "mq.od.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first OR", HFILL }}, { &hf_mq_od_resprecofs , {"Offset of 1st RR.", "mq.od.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first RR", HFILL }}, { &hf_mq_od_objrecptr , {"Addr of 1st OR.", "mq.od.addror", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first OR", HFILL }}, { &hf_mq_od_resprecptr , {"Addr of 1st RR.", "mq.od.addrrr", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first RR", HFILL }}, { &hf_mq_od_altsecurid , {"Alt security id..", "mq.od.altsecid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate security id", HFILL }}, { &hf_mq_od_resolvqname , {"Resolved Q Name..", "mq.od.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue name", HFILL }}, { &hf_mq_od_resolvqmgrnm, {"Resolved QMgrName", "mq.od.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue manager name", HFILL }}, { &hf_mq_od_resolvobjtyp, {"Resolv Obj Type..", "mq.od.resolvedobjtype", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(objtype), 0x0, "OD resolved object type", HFILL }}, { &hf_mq_or_objname , {"Object name...", "mq.or.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object name", HFILL }}, { &hf_mq_or_objqmgrname , {"Object QMgr Nm", "mq.or.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object queue manager name", HFILL }}, { &hf_mq_rr_compcode , {"Comp Code", "mq.rr.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR completion code", HFILL }}, { &hf_mq_rr_reascode , {"Reas Code", "mq.rr.reasoncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR reason code", HFILL }}, { &hf_mq_pmr_msgid , {"Message Id", "mq.pmr.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR Message Id", HFILL }}, { &hf_mq_pmr_correlid , {"Correlation Id", "mq.pmr.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR Correlation Id", HFILL }}, { &hf_mq_pmr_groupid , {"GroupId", "mq.pmr.groupid", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR GroupId", HFILL }}, { &hf_mq_pmr_feedback , {"Feedback", "mq.pmr.feedback", FT_UINT32, BASE_DEC, NULL, 0x0, "PMR Feedback", HFILL }}, { &hf_mq_pmr_acttoken , {"Accounting token", "mq.pmr.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR accounting token", HFILL }}, { &hf_mq_md_StructID , {"StructID.", "mq.md.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_md_version , {"Version..", "mq.md.version", FT_UINT32, BASE_DEC, NULL, 0x0, "MD version", HFILL }}, { &hf_mq_md_report , {"Report...", "mq.md.report", FT_UINT32, BASE_DEC, NULL, 0x0, "MD report", HFILL }}, { &hf_mq_md_msgtype , {"Msg Type.", "mq.md.msgtype", FT_UINT32, BASE_DEC, NULL, 0x0, "MD message type", HFILL }}, { &hf_mq_md_expiry , {"Expiry .", "mq.md.expiry", FT_INT32, BASE_DEC, NULL, 0x0, "MD expiry", HFILL }}, { &hf_mq_md_feedback , {"Feedback.", "mq.md.feedback", FT_UINT32, BASE_DEC, NULL, 0x0, "MD feedback", HFILL }}, { &hf_mq_md_encoding , {"Encoding.", "mq.md.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "MD encoding", HFILL }}, { &hf_mq_md_ccsid , {"CCSID....", "mq.md.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "MD character set", HFILL }}, { &hf_mq_md_format , {"Format...", "mq.md.format", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD format", HFILL }}, { &hf_mq_md_priority , {"Priority.", "mq.md.priority", FT_INT32, BASE_DEC, NULL, 0x0, "MD priority", HFILL }}, { &hf_mq_md_persistence , {"Persist..", "mq.md.persistence", FT_UINT32, BASE_DEC, NULL, 0x0, "MD persistence", HFILL }}, { &hf_mq_md_msgid , {"Msg ID...", "mq.md.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Message Id", HFILL }}, { &hf_mq_md_correlid , {"CorrelID.", "mq.md.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Correlation Id", HFILL }}, { &hf_mq_md_backoutcnt , {"BackoCnt.", "mq.md.backount", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Backout count", HFILL }}, { &hf_mq_md_replytoq , {"ReplyToQ.", "mq.md.replytoq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD ReplyTo queue", HFILL }}, { &hf_mq_md_replytoqmgr , {"RepToQMgr", "mq.md.replytoqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD ReplyTo queue manager", HFILL }}, { &hf_mq_md_userid , {"UserId...", "mq.md.userid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD UserId", HFILL }}, { &hf_mq_md_acttoken , {"AccntTok.", "mq.md.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "MD accounting token", HFILL }}, { &hf_mq_md_appliddata , {"AppIdData", "mq.md.appldata", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put applicationId data", HFILL }}, { &hf_mq_md_putappltype , {"PutAppTyp", "mq.md.appltype", FT_INT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqat), 0x0, "MD Put application type", HFILL }}, { &hf_mq_md_putapplname , {"PutAppNme", "mq.md.applname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put application name", HFILL }}, { &hf_mq_md_putdate , {"PutDatGMT", "mq.md.date", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put date", HFILL }}, { &hf_mq_md_puttime , {"PutTimGMT", "mq.md.time", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put time", HFILL }}, { &hf_mq_md_apporigdata , {"AppOriDat", "mq.md.origdata", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Application original data", HFILL }}, { &hf_mq_md_groupid , {"GroupId..", "mq.md.groupid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD GroupId", HFILL }}, { &hf_mq_md_msgseqnumber, {"MsgSeqNum", "mq.md.msgseqnumber", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Message sequence number", HFILL }}, { &hf_mq_md_offset , {"Offset...", "mq.md.offset", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Offset", HFILL }}, { &hf_mq_md_msgflags , {"Msg flags", "mq.md.msgflags", FT_UINT32, BASE_HEX, NULL, 0x0, "MD Message flags", HFILL }}, { &hf_mq_md_origlen , {"Orig len.", "mq.md.origlength", FT_INT32, BASE_DEC, NULL, 0x0, "MD Original length", HFILL }}, { &hf_mq_dlh_StructID , {"StructID.", "mq.dlh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_dlh_version , {"Version..", "mq.dlh.version", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH version", HFILL }}, { &hf_mq_dlh_reason , {"Reason...", "mq.dlh.reason", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH reason", HFILL }}, { &hf_mq_dlh_destq , {"Dest Q...", "mq.dlh.destq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH destination queue", HFILL }}, { &hf_mq_dlh_destqmgr , {"DestQMgr.", "mq.dlh.destqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH destination queue manager", HFILL }}, { &hf_mq_dlh_encoding , {"Encoding.", "mq.dlh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH encoding", HFILL }}, { &hf_mq_dlh_ccsid , {"CCSID....", "mq.dlh.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "DLH character set", HFILL }}, { &hf_mq_dlh_format , {"Format...", "mq.dlh.format", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH format", HFILL }}, { &hf_mq_dlh_putappltype, {"PutAppTyp", "mq.dlh.putappltype", FT_INT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqat), 0x0, "DLH put application type", HFILL }}, { &hf_mq_dlh_putapplname, {"PutAppNme", "mq.dlh.putapplname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put application name", HFILL }}, { &hf_mq_dlh_putdate , {"PutDatGMT", "mq.dlh.putdate", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put date", HFILL }}, { &hf_mq_dlh_puttime , {"PutTimGMT", "mq.dlh.puttime", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put time", HFILL }}, { &hf_mq_gmo_StructID , {"StructID.", "mq.gmo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_gmo_version , {"Version..", "mq.gmo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "GMO version", HFILL }}, { &hf_mq_gmo_options , {"GetMsgOpt", "mq.gmo.getmsgopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO Get Message Options", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_gmo_options_CONVERT , {"CONVERT", "mq.gmo.options.CONVERT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_CONVERT , "GMO options CONVERT", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_gmo_options_UNLOCK , {"UNLOCK", "mq.gmo.options.UNLOCK", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_UNLOCK , "GMO options UNLOCK", HFILL }}, { &hf_mq_gmo_options_LOCK , {"LOCK", "mq.gmo.options.LOCK", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_LOCK , "GMO options LOCK", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_gmo_options_SYNCPOINT , {"SYNCPOINT", "mq.gmo.options.SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_SYNCPOINT , "GMO options SYNCPOINT", HFILL }}, { &hf_mq_gmo_options_WAIT , {"WAIT", "mq.gmo.options.WAIT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQGMO_WAIT , "GMO options WAIT", HFILL }}, { &hf_mq_gmo_waitinterval, {"WaitIntv.", "mq.gmo.waitint", FT_INT32, BASE_DEC, NULL, 0x0, "GMO wait interval", HFILL }}, { &hf_mq_gmo_signal1 , {"Signal 1.", "mq.gmo.signal1", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO signal 1", HFILL }}, { &hf_mq_gmo_signal2 , {"Signal 2.", "mq.gmo.signal2", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO signal 2", HFILL }}, { &hf_mq_gmo_resolvqname , {"ResQName.", "mq.gmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "GMO resolved queue name", HFILL }}, { &hf_mq_gmo_matchoptions, {"MatchOpt.", "mq.gmo.matchopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO match options", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_gmo_groupstatus , {"GrpStatus", "mq.gmo.grpstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO group status", HFILL }}, { &hf_mq_gmo_segmstatus , {"SegStatus", "mq.gmo.sgmtstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segment status", HFILL }}, { &hf_mq_gmo_segmentation, {"Segmentat", "mq.gmo.segmentation", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segmentation", HFILL }}, { &hf_mq_gmo_reserved , {"Reserved.", "mq.gmo.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO reserved", HFILL }}, { &hf_mq_gmo_msgtoken , {"MsgToken.", "mq.gmo.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "GMO message token", HFILL }}, { &hf_mq_gmo_returnedlen , {"RtnLength", "mq.gmo.retlen", FT_INT32, BASE_DEC, NULL, 0x0, "GMO returned length", HFILL }}, { &hf_mq_lpoo_StructID , {"StructID......", "mq.lpoo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_lpoo_version , {"Version.......", "mq.lpoo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "LPOO version", HFILL }}, { &hf_mq_lpoo_options , {"Options.......", "mq.lpoo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO options", HFILL }}, { &hf_mq_lpoo_lpiopts , {"LpiOpts.......", "mq.lpoo.lpioopts", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Lpi Options", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_lpoo_unknown5 , {"Unknown5......", "mq.lpoo.unknown5", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO unknown5", HFILL }}, { &hf_mq_lpoo_defpersist , {"DefPersitence.", "mq.lpoo.defpersist", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Persitence", HFILL }}, { &hf_mq_lpoo_defputresptype, {"DefPutRespType", "mq.lpoo.defputresptype", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Put Response Type", HFILL }}, { &hf_mq_lpoo_defreadahead , {"DefReadAHead..", "mq.lpoo.defreadahead", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Read AHead", HFILL }}, { &hf_mq_lpoo_qprotect , {"qprotect......", "mq.lpoo.qprotect", FT_STRINGZ, BASE_NONE, NULL, 0x0, "LPOO queue protection", HFILL }}, { &hf_mq_lpoo_unknown6 , {"Unknown6......", "mq.lpoo.unknown6", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO unknown6", HFILL }}, { &hf_mq_lpoo_xtradata , {"ExtraData.....", "mq.lpoo.extradata", FT_UINT32, BASE_DEC, NULL, 0x0, "LPOO Extra Data", HFILL }}, { &hf_mq_pmo_StructID , {"StructID.", "mq.pmo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }}, { &hf_mq_pmo_version , {"Version..", "mq.pmo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO version", HFILL }}, { &hf_mq_pmo_options , {"Options..", "mq.pmo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO options", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_pmo_options_RETAIN , {"RETAIN", "mq.pmo.options.RETAIN", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_RETAIN , "PMO options RETAIN", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_pmo_options_SYNCPOINT , {"SYNCPOINT", "mq.pmo.options.SYNCPOINT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQPMO_SYNCPOINT , "PMO options SYNCPOINT", HFILL }}, { &hf_mq_pmo_timeout , {"Timeout..", "mq.pmo.timeout", FT_INT32, BASE_DEC, NULL, 0x0, "PMO time out", HFILL }}, { &hf_mq_pmo_context , {"Context..", "mq.pmo.context", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO context", HFILL }}, { &hf_mq_pmo_knowndstcnt , {"KnDstCnt.", "mq.pmo.kdstcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO known destination count", HFILL }}, { &hf_mq_pmo_unkndstcnt , {"UkDstCnt.", "mq.pmo.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO unknown destination count", HFILL }}, { &hf_mq_pmo_invaldstcnt , {"InDstCnt.", "mq.pmo.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO invalid destination count", HFILL }}, { &hf_mq_pmo_resolvqname , {"ResQName.", "mq.pmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue name", HFILL }}, { &hf_mq_pmo_resolvqmgr , {"ResQMgr..", "mq.pmo.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue manager name", HFILL }}, { &hf_mq_pmo_recspresent , {"NumRecs..", "mq.pmo.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO number of records", HFILL }}, { &hf_mq_pmo_putmsgrecfld, {"PMR Flag.", "mq.pmo.flagspmr", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO flags PMR fields", HFILL }}, { &hf_mq_pmo_putmsgrecofs, {"Ofs1stPMR", "mq.pmo.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first PMR", HFILL }}, { &hf_mq_pmo_resprecofs , {"Off1stRR.", "mq.pmo.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first RR", HFILL }}, { &hf_mq_pmo_putmsgrecptr, {"Adr1stPMR", "mq.pmo.addrrec", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first record", HFILL }}, { &hf_mq_pmo_resprecptr , {"Adr1stRR.", "mq.pmo.addrres", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first response record", HFILL }}, { &hf_mq_xa_length , {"Length.......", "mq.xa.length", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Length", HFILL }}, { &hf_mq_xa_returnvalue , {"Return value.", "mq.xa.returnvalue", FT_INT32, BASE_DEC, VALS(mq_xaer_vals), 0x0, "XA Return Value", HFILL }}, { &hf_mq_xa_tmflags , {"TransMgrFlags", "mq.xa.tmflags", FT_UINT32, BASE_HEX, NULL, 0x0, "XA Transaction Manager Flags", HFILL }}, { &hf_mq_xa_rmid , {"ResourceMgrID", "mq.xa.rmid", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Resource Manager ID", HFILL }}, { &hf_mq_xa_count , {"Number of Xid", "mq.xa.nbxid", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Number of Xid", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_xa_xid_formatid , {"Format ID....", "mq.xa.xid.formatid", FT_INT32, BASE_DEC, NULL, 0x0, "XA Xid Format ID", HFILL }}, { &hf_mq_xa_xid_glbxid_len, {"GlbTransIDLen", "mq.xa.xid.gxidl", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Global TransactionId Length", HFILL }}, { &hf_mq_xa_xid_brq_length, {"BranchQualLen", "mq.xa.xid.bql", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Branch Qualifier Length", HFILL }}, { &hf_mq_xa_xid_globalxid , {"GlbTransactID", "mq.xa.xid.gxid", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Global TransactionId", HFILL }}, { &hf_mq_xa_xid_brq , {"BranchQualif.", "mq.xa.xid.bq", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Branch Qualifier", HFILL }}, { &hf_mq_xa_xainfo_length , {"Length.......", "mq.xa.xainfo.length", FT_UINT8, BASE_DEC, NULL, 0x0, "XA XA_info Length", HFILL }}, { &hf_mq_xa_xainfo_value , {"Value........", "mq.xa.xainfo.value", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XA XA_info Value", HFILL }}, { &hf_mq_charv_vsptr , {"VLStr Addr.", "mq.charv.vsptr", FT_UINT32, BASE_HEX, NULL, 0x0, "VS Address", HFILL }}, { &hf_mq_charv_vsoffset , {"VLStr Offs.", "mq.charv.vsoffset", FT_UINT32, BASE_DEC, NULL, 0x0, "VS Offset", HFILL }}, { &hf_mq_charv_vsbufsize , {"VLStr BufSz", "mq.charv.vsbufsize", FT_UINT32, BASE_DEC, NULL, 0x0, "VS BufSize", HFILL }}, { &hf_mq_charv_vslength , {"VLStr Len..", "mq.charv.vslength", FT_UINT32, BASE_DEC, NULL, 0x0, "VS Length", HFILL }}, { &hf_mq_charv_vsccsid , {"VLStr Ccsid", "mq.charv.vsccsid", FT_INT32, BASE_DEC, NULL, 0x0, "VS CCSID", HFILL }}, { &hf_mq_charv_vsvalue , {"VLStr Value", "mq.charv.vsvalue", FT_STRINGZ, BASE_NONE, NULL, 0x0, "VS value", HFILL }}, { &hf_mq_head_StructID , {"Structid", "mq.head.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Header structid", HFILL }}, { &hf_mq_head_version , {"version.", "mq.head.version", FT_UINT32, BASE_DEC, NULL, 0x0, "Header version", HFILL }}, { &hf_mq_head_length , {"Length..", "mq.head.length", FT_UINT32, BASE_DEC, NULL, 0x0, "Header length", HFILL }}, { &hf_mq_head_encoding , {"Encoding", "mq.head.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "Header encoding", HFILL }}, { &hf_mq_head_ccsid , {"CCSID...", "mq.head.ccsid", FT_INT32, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "Header character set", HFILL }}, { &hf_mq_head_format , {"Format..", "mq.head.format", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Header format", HFILL }}, { &hf_mq_head_flags , {"Flags...", "mq.head.flags", FT_UINT32, BASE_HEX, NULL, 0x0, "Header flags", HFILL }}, { &hf_mq_head_struct , {"Struct..", "mq.head.struct", FT_BYTES, BASE_NONE, NULL, 0x0, "Header struct", HFILL }}, { &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 }}, { &hf_mq_dh_putmsgrecfld, {"Flags PMR", "mq.dh.flagspmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH flags PMR", HFILL }}, { &hf_mq_dh_recspresent , {"NumOfRecs", "mq.dh.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "DH number of records", HFILL }}, { &hf_mq_dh_objrecofs , {"Ofs1stOR.", "mq.dh.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first OR", HFILL }}, { &hf_mq_dh_putmsgrecofs, {"Ofs1stPMR", "mq.dh.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first PMR", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_iih_ltermoverride, {"LTerm Override", "mq.iih.ltermoverrid" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Logical Terminal Override", HFILL }}, { &hf_mq_iih_mfsmapname , {"MFS Map Name..", "mq.iih.mfsmapname" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "MFS Map Name", HFILL }}, { &hf_mq_iih_replytofmt , {"ReplyToFormat.", "mq.iih.replytofmt" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reply To Format", HFILL }}, { &hf_mq_iih_authenticator, {"Authenticator.", "mq.iih.authenticator", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Password or Passcode", HFILL }}, { &hf_mq_iih_transinstid , {"TransInstIdent", "mq.iih.transinstid" , FT_BYTES, BASE_NONE, NULL, 0x0, "Transaction Instance Identifier", HFILL }}, { &hf_mq_iih_transstate , {"TransactState.", "mq.iih.transstate" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Transaction State", HFILL }}, { &hf_mq_iih_commimode , {"Commit Mode...", "mq.iih.commimode" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Commit Mode", HFILL }}, { &hf_mq_iih_securityscope, {"SecurityScope.", "mq.iih.securityscope", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Security Scope", HFILL }}, { &hf_mq_iih_reserved , {"Reserved......", "mq.iih.reserved" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved", HFILL }}, { &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 }}, { &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 }}, { &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 }}, { &hf_mq_cih_returncode , {"ReturnCode...", "mq.cih.returncode" , FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "Return Code", HFILL }}, { &hf_mq_cih_compcode , {"ComplCode....", "mq.cih.compcode" , FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "Completion Code", HFILL }}, { &hf_mq_cih_reasoncode , {"ReasonCode...", "mq.cih.reasoncode" , FT_UINT32 , BASE_HEX_DEC, NULL, 0x0, "Reason Code", HFILL }}, { &hf_mq_cih_uowcontrols , {"UOWControls..", "mq.cih.uowcontrols" , FT_UINT32 , BASE_HEX_DEC, VALS(GET_VALSV(UOWControls)), 0x0, "Unit Of Work Controls", HFILL }}, { &hf_mq_cih_getwaitintv , {"GetWaitIntv..", "mq.cih.getwaitintv" , FT_INT32 , BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(WaitIntv)), 0x0, "Get Wait Interval", HFILL }}, { &hf_mq_cih_linktype , {"LinkType.....", "mq.cih.linktype" , FT_UINT32 , BASE_DEC , VALS(GET_VALSV(LinkType)), 0x0, "LinkType", HFILL }}, { &hf_mq_cih_outdatalen , {"OutDataLen...", "mq.cih.outdatalen" , FT_INT32 , BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(OutDataLen)), 0x0, "Output Data Len", HFILL }}, { &hf_mq_cih_facilkeeptime, {"FacilKeepTime", "mq.cih.facilkeeptime", FT_UINT32 , BASE_DEC , NULL, 0x0, "Facility Keep Time", HFILL }}, { &hf_mq_cih_adsdescriptor, {"ADSDescriptor", "mq.cih.adsdescr" , FT_UINT32 , BASE_DEC , VALS(GET_VALSV(ADSDescr)), 0x0, "ADS Descriptor", HFILL }}, { &hf_mq_cih_converstask , {"ConversTask..", "mq.cih.converstask" , FT_UINT32 , BASE_DEC , VALS(GET_VALSV(ConvTaskOpt)), 0x0, "Conversational Task", HFILL }}, { &hf_mq_cih_taskendstatus, {"TaskEndStatus", "mq.cih.taskendstatus", FT_UINT32 , BASE_DEC , VALS(GET_VALSV(TaskEndStatus)), 0x0, "Status at End of Task", HFILL }}, { &hf_mq_cih_bridgefactokn, {"BridgeFacTokn", "mq.cih.bridgefactokn", FT_BYTES , BASE_NONE, NULL, 0x0, "Bridge facility token", HFILL }}, { &hf_mq_cih_function , {"Function.....", "mq.cih.function" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "MQ call name or CICS EIBFN function", HFILL }}, { &hf_mq_cih_abendcode , {"AbendCode....", "mq.cih.abendcode" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Abend Code", HFILL }}, { &hf_mq_cih_authenticator, {"Authenticator", "mq.cih.authenticator", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Password or Passcode", HFILL }}, { &hf_mq_cih_reserved , {"Reserved.....", "mq.cih.reserved" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved", HFILL }}, { &hf_mq_cih_replytofmt , {"ReplyToFormat", "mq.cih.replytofmt" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reply To Format", HFILL }}, { &hf_mq_cih_remotesysid , {"RemoteSysId..", "mq.cih.remotesysid" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Remote System Id", HFILL }}, { &hf_mq_cih_remotetransid, {"RemoteTransId", "mq.cih.remotetransid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Remote Transaction Id", HFILL }}, { &hf_mq_cih_transactionid, {"TransactionId", "mq.cih.transactionid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Transaction to attach", HFILL }}, { &hf_mq_cih_facilitylike , {"FacilityLike.", "mq.cih.facilitylike" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Terminal emulated attributes", HFILL }}, { &hf_mq_cih_attentionid , {"AttentionID..", "mq.cih.attentionid" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Attention Id (AID) Key", HFILL }}, { &hf_mq_cih_startcode , {"StartCode....", "mq.cih.startcode" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Transaction Start Code", HFILL }}, { &hf_mq_cih_cancelcode , {"CancelCode...", "mq.cih.cancelcode" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Abend transaction code", HFILL }}, { &hf_mq_cih_nexttransid , {"NextTransId..", "mq.cih.nexttransid" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Next transaction to attach", HFILL }}, { &hf_mq_cih_reserved2 , {"Reserved3....", "mq.cih.reserved2" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved 2", HFILL }}, { &hf_mq_cih_reserved3 , {"Reserved3....", "mq.cih.reserved3" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved 3", HFILL }}, { &hf_mq_cih_cursorpos , {"CursorPos....", "mq.cih.cursorpos" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Cursor Posiution", HFILL }}, { &hf_mq_cih_erroroffset , {"ErrorOffset..", "mq.cih.erroroffset" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Offset of error in message", HFILL }}, { &hf_mq_cih_inputitem , {"InputItem....", "mq.cih.inputitem" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Input Item", HFILL }}, { &hf_mq_cih_reserved4 , {"Reserved4....", "mq.cih.reserved4" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved 4", HFILL }}, { &hf_mq_rfh_ccsid , {"NmeValCCSID", "mq.rfh.ccsid" , FT_INT32 , BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "RFH NameValue CCSID", HFILL }}, { &hf_mq_rfh_length , {"Len." , "mq.rfh.length" , FT_UINT32 , BASE_DEC , NULL, 0x0, "RFH NameValue Length", HFILL }}, { &hf_mq_rfh_string , {"Val." , "mq.rfh.string" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "RFH NameValue", HFILL }}, { &hf_mq_rmh_flags_last , {"LAST", "mq.rmh.flags.last", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQRMHF_LAST, "MQ RMH LAST", HFILL }}, { &hf_mq_rmh_objecttype , {"ObjectType...", "mq.rmh.objecttype" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Object Type", HFILL }}, { &hf_mq_rmh_objectinstid , {"ObjectInstId.", "mq.rmh.objectinstid" , FT_BYTES , BASE_NONE, NULL, 0x0, "Object Instance Identifier", HFILL }}, { &hf_mq_rmh_srcenvlen , {"SrcEnvLen....", "mq.rmh.srcenvlen" , FT_UINT32 , BASE_DEC , NULL, 0x0, "Length of source environment data", HFILL }}, { &hf_mq_rmh_srcenvofs , {"SrcEnvOfs....", "mq.rmh.srcenvofs" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Offset of source environment data", HFILL }}, { &hf_mq_rmh_srcnamelen , {"SrcNameLen...", "mq.rmh.srcnamelen" , FT_UINT32 , BASE_DEC , NULL, 0x0, "Length of source object name", HFILL }}, { &hf_mq_rmh_srcnameofs , {"SrcNameOfs...", "mq.rmh.srcnameofs" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Offset of source object name", HFILL }}, { &hf_mq_rmh_dstenvlen , {"DstEnvLen....", "mq.rmh.dstenvlen" , FT_UINT32 , BASE_DEC , NULL, 0x0, "Length of destination environment data", HFILL }}, { &hf_mq_rmh_dstenvofs , {"DstEnvOfs....", "mq.rmh.dstenvofs" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Offset of destination environment data", HFILL }}, { &hf_mq_rmh_dstnamelen , {"DstNameLen...", "mq.rmh.dstnamelen" , FT_UINT32 , BASE_DEC , NULL, 0x0, "Length of destination object name", HFILL }}, { &hf_mq_rmh_dstnameofs , {"DstNameOfs...", "mq.rmh.dstnameofs" , FT_UINT32 , BASE_DEC | BASE_HEX, NULL, 0x0, "Offset of destination object name", HFILL }}, { &hf_mq_rmh_datalogiclen , {"DataLogicLen.", "mq.rmh.datalogiclen" , FT_UINT32 , BASE_DEC , NULL, 0x0, "Length of bulk data", HFILL }}, { &hf_mq_rmh_datalogicofsl, {"DataLogicOfsL", "mq.rmh.datalogicofsl", FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Low offset of bulk data", HFILL }}, { &hf_mq_rmh_datalogicofsh, {"DataLogicOfsH", "mq.rmh.datalogicofsh", FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "High offset of bulk data", HFILL }}, { &hf_mq_wih_servicename , {"ServiceName..", "mq.wih.servicename" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Service Name", HFILL }}, { &hf_mq_wih_servicestep , {"ServiceStep..", "mq.wih.servicestep" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Service Step Name", HFILL }}, { &hf_mq_wih_msgtoken , {"MsgToken.....", "mq.wih.msgtoken" , FT_BYTES , BASE_NONE, NULL, 0x0, "Message Token", HFILL }}, { &hf_mq_wih_reserved , {"Reserved.....", "mq.wih.reserved" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved", HFILL }}, }; static gint *ett[] = { &ett_mq, &ett_mq_tsh, &ett_mq_tsh_tcf, &ett_mq_tsh_tcf2, &ett_mq_api, &ett_mq_socket, &ett_mq_msh, &ett_mq_caut, &ett_mq_xqh, &ett_mq_id, &ett_mq_id_icf1, &ett_mq_id_icf2, &ett_mq_id_icf3, &ett_mq_id_ief1, &ett_mq_id_ief2, &ett_mq_uid, &ett_mq_conn, &ett_mq_msg, &ett_mq_notif, &ett_mq_inq, &ett_mq_spi, &ett_mq_spi_base, &ett_mq_spi_options, &ett_mq_put, &ett_mq_open, &ett_mq_open_option, &ett_mq_close_option, &ett_mq_ping, &ett_mq_reset, &ett_mq_status, &ett_mq_od, &ett_mq_od_objstr, &ett_mq_od_selstr, &ett_mq_od_resobjstr, &ett_mq_or, &ett_mq_rr, &ett_mq_pmr, &ett_mq_md, &ett_mq_dlh, &ett_mq_dh, &ett_mq_gmo, &ett_mq_gmo_option, &ett_mq_gmo_matchoption, &ett_mq_pmo, &ett_mq_pmo_option, &ett_mq_fcno, &ett_mq_fopa, &ett_mq_lpoo, &ett_mq_lpoo_options, &ett_mq_lpoo_lpiopts, &ett_mq_head, &ett_mq_head_flags, &ett_mq_xa, &ett_mq_xa_tmflags, &ett_mq_xa_xid, &ett_mq_xa_info, &ett_mq_charv, &ett_mq_rfh_ValueName, &ett_mq_reaasemb, &ett_mq_structid }; module_t *mq_module; proto_mq = proto_register_protocol("WebSphere MQ", "MQ", "mq"); proto_register_field_array(proto_mq, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); mq_heur_subdissector_list = register_heur_dissector_list("mq", proto_mq); register_init_routine(mq_init); register_cleanup_routine(mq_cleanup); mq_module = prefs_register_protocol(proto_mq, NULL); mq_handle = register_dissector("mq", dissect_mq_tcp, proto_mq); prefs_register_bool_preference(mq_module, "desegment", "Reassemble MQ messages spanning multiple TCP segments", "Whether the MQ dissector should reassemble messages spanning multiple TCP segments." " To use this option, you must also enable \"Allow subdissectors to reassemble TCP streams\" in the TCP protocol settings.", &mq_desegment); prefs_register_bool_preference(mq_module, "reassembly", "Reassemble segmented MQ messages", "Whether the MQ dissector should reassemble MQ messages spanning multiple TSH segments", &mq_reassembly); } void proto_reg_handoff_mq(void) { /* Unlike some protocol (HTTP, POP3, ...) that clearly map to a standard * class of applications (web browser, e-mail client, ...) and have a very well * known port number, the MQ applications are most often specific to a business application */ mq_spx_handle = create_dissector_handle(dissect_mq_spx, proto_mq); dissector_add_for_decode_as("tcp.port", mq_handle); ssl_dissector_add(0, mq_handle); heur_dissector_add("tcp", dissect_mq_heur_tcp, "WebSphere MQ over TCP", "mq_tcp", proto_mq, HEURISTIC_ENABLE); heur_dissector_add("netbios", dissect_mq_heur_nontcp, "WebSphere MQ over Netbios", "mq_netbios", proto_mq, HEURISTIC_ENABLE); heur_dissector_add("http", dissect_mq_heur_nontcp, "WebSphere MQ over HTTP", "mq_http", proto_mq, HEURISTIC_ENABLE); heur_dissector_add("ssl", dissect_mq_heur_ssl, "WebSphere MQ over SSL", "mq_ssl", proto_mq, HEURISTIC_ENABLE); dissector_add_uint("spx.socket", MQ_SOCKET_SPX, mq_spx_handle); mqpcf_handle = find_dissector("mqpcf"); } /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: * c-basic-offset: 4 * tab-width: 8 * indent-tabs-mode: nil * End: * * vi: set shiftwidth=4 tabstop=8 expandtab: * :indentSize=4:tabSize=8:noTabs=true: */