diff options
Diffstat (limited to 'epan/dissectors/packet-mq.c')
-rw-r--r-- | epan/dissectors/packet-mq.c | 8203 |
1 files changed, 5006 insertions, 3197 deletions
diff --git a/epan/dissectors/packet-mq.c b/epan/dissectors/packet-mq.c index fc2d185f5e..3fc1917628 100644 --- a/epan/dissectors/packet-mq.c +++ b/epan/dissectors/packet-mq.c @@ -116,15 +116,15 @@ 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 + &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 */ @@ -134,11 +134,11 @@ 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 + &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; @@ -204,15 +204,15 @@ 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 + &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 */ @@ -226,15 +226,15 @@ 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 + &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 */ @@ -248,15 +248,15 @@ 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 + &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 */ @@ -265,10 +265,10 @@ 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_HdrCmpLst, - &hf_mq_id_ief2_MsgCmpLst, - &hf_mq_id_ief2_SSLReset , - NULL + &hf_mq_id_ief2_HdrCmpLst, + &hf_mq_id_ief2_MsgCmpLst, + &hf_mq_id_ief2_SSLReset , + NULL }; /* Initial Data Capability Flag 3 */ @@ -276,9 +276,9 @@ 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 + &hf_mq_id_icf3_Unknown02, + &hf_mq_id_icf3_CanMsgPrp, + NULL }; static int hf_mq_uid_StructID = -1; @@ -336,10 +336,10 @@ 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 + &hf_mq_spi_opt_deferred, + &hf_mq_spi_opt_syncp, + &hf_mq_spi_opt_blank, + NULL }; static int hf_mq_put_length = -1; @@ -352,12 +352,12 @@ 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 + &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; @@ -386,30 +386,30 @@ 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 + &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; @@ -558,35 +558,35 @@ 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 + &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; @@ -597,13 +597,13 @@ 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 + &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; @@ -623,10 +623,10 @@ 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_IDENTITY_CTXT, - &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, - &hf_mq_lpoo_lpiopts_SAVE_USER_CTXT, - NULL + &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, + &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, + &hf_mq_lpoo_lpiopts_SAVE_USER_CTXT, + NULL }; @@ -698,29 +698,29 @@ 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 + &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; @@ -733,15 +733,15 @@ 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 + &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; @@ -1193,29 +1193,29 @@ static reassembly_table mq_reassembly_table; /* 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_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_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" @@ -1283,3186 +1283,4995 @@ static reassembly_table mq_reassembly_table; #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_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_VALSE; DEF_VALSB(opcode) - DEF_VALS2(TST_INITIAL, "INITIAL_DATA"), - DEF_VALS2(TST_RESYNC, "RESYNC_DATA"), - DEF_VALS2(TST_RESET, "RESET_DATA"), - DEF_VALS2(TST_MESSAGE, "MESSAGE_DATA"), - DEF_VALS2(TST_STATUS, "STATUS_DATA"), - DEF_VALS2(TST_SECURITY, "SECURITY_DATA"), - DEF_VALS2(TST_PING, "PING_DATA"), - DEF_VALS2(TST_USERID, "USERID_DATA"), - DEF_VALS2(TST_HEARTBEAT, "HEARTBEAT"), - DEF_VALS2(TST_CONAUTH_INFO, "CONAUTH_INFO"), - DEF_VALS2(TST_RENEGOTIATE_DATA, "RENEGOTIATE_DATA"), - DEF_VALS2(TST_SOCKET_ACTION, "SOCKET_ACTION"), - DEF_VALS2(TST_ASYNC_MESSAGE, "ASYNC_MESSAGE"), - DEF_VALS2(TST_REQUEST_MSGS, "REQUEST_MSGS"), - DEF_VALS2(TST_NOTIFICATION, "NOTIFICATION"), - DEF_VALS2(TST_MQCONN, "MQCONN"), - DEF_VALS2(TST_MQDISC, "MQDISC"), - DEF_VALS2(TST_MQOPEN, "MQOPEN"), - DEF_VALS2(TST_MQCLOSE, "MQCLOSE"), - DEF_VALS2(TST_MQGET, "MQGET"), - DEF_VALS2(TST_MQPUT, "MQPUT"), - DEF_VALS2(TST_MQPUT1, "MQPUT1"), - DEF_VALS2(TST_MQSET, "MQSET"), - DEF_VALS2(TST_MQINQ, "MQINQ"), - DEF_VALS2(TST_MQCMIT, "MQCMIT"), - DEF_VALS2(TST_MQBACK, "MQBACK"), - DEF_VALS2(TST_SPI, "SPI"), - DEF_VALS2(TST_MQSTAT, "MQSTAT"), - DEF_VALS2(TST_MQSUB, "MQSUB"), - DEF_VALS2(TST_MQSUBRQ, "MQSUBRQ"), - DEF_VALS2(TST_MQCONN_REPLY, "MQCONN_REPLY"), - DEF_VALS2(TST_MQDISC_REPLY, "MQDISC_REPLY"), - DEF_VALS2(TST_MQOPEN_REPLY, "MQOPEN_REPLY"), - DEF_VALS2(TST_MQCLOSE_REPLY, "MQCLOSE_REPLY"), - DEF_VALS2(TST_MQGET_REPLY, "MQGET_REPLY"), - DEF_VALS2(TST_MQPUT_REPLY, "MQPUT_REPLY"), - DEF_VALS2(TST_MQPUT1_REPLY, "MQPUT1_REPLY"), - DEF_VALS2(TST_MQSET_REPLY, "MQSET_REPLY"), - DEF_VALS2(TST_MQINQ_REPLY, "MQINQ_REPLY"), - DEF_VALS2(TST_MQCMIT_REPLY, "MQCMIT_REPLY"), - DEF_VALS2(TST_MQBACK_REPLY, "MQBACK_REPLY"), - DEF_VALS2(TST_SPI_REPLY, "SPI_REPLY"), - DEF_VALS2(TST_MQSTAT_REPLY, "MQSTAT_REPLY"), - DEF_VALS2(TST_MQSUB_REPLY, "MQSUB_REPLY"), - DEF_VALS2(TST_MQSUBRQ_REPLY, "MQSUBRQ_REPLY"), - DEF_VALS2(TST_XA_START, "XA_START"), - DEF_VALS2(TST_XA_END, "XA_END"), - DEF_VALS2(TST_XA_OPEN, "XA_OPEN"), - DEF_VALS2(TST_XA_CLOSE, "XA_CLOSE"), - DEF_VALS2(TST_XA_PREPARE, "XA_PREPARE"), - DEF_VALS2(TST_XA_COMMIT, "XA_COMMIT"), - DEF_VALS2(TST_XA_ROLLBACK, "XA_ROLLBACK"), - DEF_VALS2(TST_XA_FORGET, "XA_FORGET"), - DEF_VALS2(TST_XA_RECOVER, "XA_RECOVER"), - DEF_VALS2(TST_XA_COMPLETE, "XA_COMPLETE"), - DEF_VALS2(TST_XA_START_REPLY, "XA_START_REPLY"), - DEF_VALS2(TST_XA_END_REPLY, "XA_END_REPLY"), - DEF_VALS2(TST_XA_OPEN_REPLY, "XA_OPEN_REPLY"), - DEF_VALS2(TST_XA_CLOSE_REPLY, "XA_CLOSE_REPLY"), - DEF_VALS2(TST_XA_PREPARE_REPLY, "XA_PREPARE_REPLY"), - DEF_VALS2(TST_XA_COMMIT_REPLY, "XA_COMMIT_REPLY"), - DEF_VALS2(TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY"), - DEF_VALS2(TST_XA_FORGET_REPLY, "XA_FORGET_REPLY"), - DEF_VALS2(TST_XA_RECOVER_REPLY, "XA_RECOVER_REPLY"), - DEF_VALS2(TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY"), + DEF_VALS2(TST_INITIAL, "INITIAL_DATA"), + DEF_VALS2(TST_RESYNC, "RESYNC_DATA"), + DEF_VALS2(TST_RESET, "RESET_DATA"), + DEF_VALS2(TST_MESSAGE, "MESSAGE_DATA"), + DEF_VALS2(TST_STATUS, "STATUS_DATA"), + DEF_VALS2(TST_SECURITY, "SECURITY_DATA"), + DEF_VALS2(TST_PING, "PING_DATA"), + DEF_VALS2(TST_USERID, "USERID_DATA"), + DEF_VALS2(TST_HEARTBEAT, "HEARTBEAT"), + DEF_VALS2(TST_CONAUTH_INFO, "CONAUTH_INFO"), + DEF_VALS2(TST_RENEGOTIATE_DATA, "RENEGOTIATE_DATA"), + DEF_VALS2(TST_SOCKET_ACTION, "SOCKET_ACTION"), + DEF_VALS2(TST_ASYNC_MESSAGE, "ASYNC_MESSAGE"), + DEF_VALS2(TST_REQUEST_MSGS, "REQUEST_MSGS"), + DEF_VALS2(TST_NOTIFICATION, "NOTIFICATION"), + DEF_VALS2(TST_MQCONN, "MQCONN"), + DEF_VALS2(TST_MQDISC, "MQDISC"), + DEF_VALS2(TST_MQOPEN, "MQOPEN"), + DEF_VALS2(TST_MQCLOSE, "MQCLOSE"), + DEF_VALS2(TST_MQGET, "MQGET"), + DEF_VALS2(TST_MQPUT, "MQPUT"), + DEF_VALS2(TST_MQPUT1, "MQPUT1"), + DEF_VALS2(TST_MQSET, "MQSET"), + DEF_VALS2(TST_MQINQ, "MQINQ"), + DEF_VALS2(TST_MQCMIT, "MQCMIT"), + DEF_VALS2(TST_MQBACK, "MQBACK"), + DEF_VALS2(TST_SPI, "SPI"), + DEF_VALS2(TST_MQSTAT, "MQSTAT"), + DEF_VALS2(TST_MQSUB, "MQSUB"), + DEF_VALS2(TST_MQSUBRQ, "MQSUBRQ"), + DEF_VALS2(TST_MQCONN_REPLY, "MQCONN_REPLY"), + DEF_VALS2(TST_MQDISC_REPLY, "MQDISC_REPLY"), + DEF_VALS2(TST_MQOPEN_REPLY, "MQOPEN_REPLY"), + DEF_VALS2(TST_MQCLOSE_REPLY, "MQCLOSE_REPLY"), + DEF_VALS2(TST_MQGET_REPLY, "MQGET_REPLY"), + DEF_VALS2(TST_MQPUT_REPLY, "MQPUT_REPLY"), + DEF_VALS2(TST_MQPUT1_REPLY, "MQPUT1_REPLY"), + DEF_VALS2(TST_MQSET_REPLY, "MQSET_REPLY"), + DEF_VALS2(TST_MQINQ_REPLY, "MQINQ_REPLY"), + DEF_VALS2(TST_MQCMIT_REPLY, "MQCMIT_REPLY"), + DEF_VALS2(TST_MQBACK_REPLY, "MQBACK_REPLY"), + DEF_VALS2(TST_SPI_REPLY, "SPI_REPLY"), + DEF_VALS2(TST_MQSTAT_REPLY, "MQSTAT_REPLY"), + DEF_VALS2(TST_MQSUB_REPLY, "MQSUB_REPLY"), + DEF_VALS2(TST_MQSUBRQ_REPLY, "MQSUBRQ_REPLY"), + DEF_VALS2(TST_XA_START, "XA_START"), + DEF_VALS2(TST_XA_END, "XA_END"), + DEF_VALS2(TST_XA_OPEN, "XA_OPEN"), + DEF_VALS2(TST_XA_CLOSE, "XA_CLOSE"), + DEF_VALS2(TST_XA_PREPARE, "XA_PREPARE"), + DEF_VALS2(TST_XA_COMMIT, "XA_COMMIT"), + DEF_VALS2(TST_XA_ROLLBACK, "XA_ROLLBACK"), + DEF_VALS2(TST_XA_FORGET, "XA_FORGET"), + DEF_VALS2(TST_XA_RECOVER, "XA_RECOVER"), + DEF_VALS2(TST_XA_COMPLETE, "XA_COMPLETE"), + DEF_VALS2(TST_XA_START_REPLY, "XA_START_REPLY"), + DEF_VALS2(TST_XA_END_REPLY, "XA_END_REPLY"), + DEF_VALS2(TST_XA_OPEN_REPLY, "XA_OPEN_REPLY"), + DEF_VALS2(TST_XA_CLOSE_REPLY, "XA_CLOSE_REPLY"), + DEF_VALS2(TST_XA_PREPARE_REPLY, "XA_PREPARE_REPLY"), + DEF_VALS2(TST_XA_COMMIT_REPLY, "XA_COMMIT_REPLY"), + DEF_VALS2(TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY"), + DEF_VALS2(TST_XA_FORGET_REPLY, "XA_FORGET_REPLY"), + DEF_VALS2(TST_XA_RECOVER_REPLY, "XA_RECOVER_REPLY"), + DEF_VALS2(TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY"), 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_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_VALS2(SPI_ACTIVATE_ENABLE, "ENABLE"), + DEF_VALS2(SPI_ACTIVATE_DISABLE, "DISABLE"), DEF_VALSE; DEF_VALSB(status) - DEF_VALS2(STATUS_ERR_NO_CHANNEL, "NO_CHANNEL"), - DEF_VALS2(STATUS_ERR_CHANNEL_WRONG_TYPE, "CHANNEL_WRONG_TYPE"), - DEF_VALS2(STATUS_ERR_QM_UNAVAILABLE, "QM_UNAVAILABLE"), - DEF_VALS2(STATUS_ERR_MSG_SEQUENCE_ERROR, "MSG_SEQUENCE_ERROR"), - DEF_VALS2(STATUS_ERR_QM_TERMINATING, "QM_TERMINATING"), - DEF_VALS2(STATUS_ERR_CAN_NOT_STORE, "CAN_NOT_STORE"), - DEF_VALS2(STATUS_ERR_USER_CLOSED, "USER_CLOSED"), - DEF_VALS2(STATUS_ERR_PROTOCOL_SEGMENT_TYPE, "REMOTE_PROTOCOL_ERROR"), - DEF_VALS2(STATUS_ERR_PROTOCOL_LENGTH_ERROR, "BIND_FAILED"), - DEF_VALS2(STATUS_ERR_PROTOCOL_INVALID_DATA, "MSGWRAP_DIFFERENT"), - DEF_VALS2(STATUS_ERR_PROTOCOL_ID_ERROR, "REMOTE_CHANNEL_UNAVAILABLE"), - DEF_VALS2(STATUS_ERR_PROTOCOL_MSH_ERROR, "TERMINATED_BY_REMOTE_EXIT"), - DEF_VALS2(STATUS_ERR_PROTOCOL_GENERAL, "PROTOCOL_GENERAL"), - DEF_VALS2(STATUS_ERR_BATCH_FAILURE, "BATCH_FAILURE"), - DEF_VALS2(STATUS_ERR_MESSAGE_LENGTH_ERROR, "MESSAGE_LENGTH_ERROR"), - DEF_VALS2(STATUS_ERR_SEGMENT_NUMBER_ERROR, "SEGMENT_NUMBER_ERROR"), - DEF_VALS2(STATUS_ERR_SECURITY_FAILURE, "SECURITY_FAILURE"), - DEF_VALS2(STATUS_ERR_WRAP_VALUE_ERROR, "WRAP_VALUE_ERROR"), - DEF_VALS2(STATUS_ERR_CHANNEL_UNAVAILABLE, "CHANNEL_UNAVAILABLE"), - DEF_VALS2(STATUS_ERR_CLOSED_BY_EXIT, "CLOSED_BY_EXIT"), - DEF_VALS2(STATUS_ERR_CIPHER_SPEC, "CIPHER_SPEC"), - DEF_VALS2(STATUS_ERR_PEER_NAME, "PEER_NAME"), - DEF_VALS2(STATUS_ERR_SSL_CLIENT_CERTIFICATE, "SSL_CLIENT_CERTIFICATE"), - DEF_VALS2(STATUS_ERR_RMT_RSRCS_IN_RECOVERY, "RMT_RSRCS_IN_RECOVERY"), - DEF_VALS2(STATUS_ERR_SSL_REFRESHING, "SSL_REFRESHING"), - DEF_VALS2(STATUS_ERR_INVALID_HOBJ, "INVALID_HOBJ"), - DEF_VALS2(STATUS_ERR_CONV_ID_ERROR, "CONV_ID_ERROR"), - DEF_VALS2(STATUS_ERR_SOCKET_ACTION_TYPE, "SOCKET_ACTION_TYPE"), - DEF_VALS2(STATUS_ERR_STANDBY_Q_MGR, "STANDBY_Q_MGR"), - - DEF_VALS2(STATUS_ERR_CCSID_NOT_SUPPORTED, "CCSID_NOT_SUPPORTED"), - DEF_VALS2(STATUS_ERR_ENCODING_INVALID, "ENCODING_INVALID"), - DEF_VALS2(STATUS_ERR_FAP_LEVEL, "FAP_LEVEL"), - DEF_VALS2(STATUS_ERR_NEGOTIATION_FAILED, "NEGOTIATION_FAILED"), + DEF_VALS2(STATUS_ERR_NO_CHANNEL, "NO_CHANNEL"), + DEF_VALS2(STATUS_ERR_CHANNEL_WRONG_TYPE, "CHANNEL_WRONG_TYPE"), + DEF_VALS2(STATUS_ERR_QM_UNAVAILABLE, "QM_UNAVAILABLE"), + DEF_VALS2(STATUS_ERR_MSG_SEQUENCE_ERROR, "MSG_SEQUENCE_ERROR"), + DEF_VALS2(STATUS_ERR_QM_TERMINATING, "QM_TERMINATING"), + DEF_VALS2(STATUS_ERR_CAN_NOT_STORE, "CAN_NOT_STORE"), + DEF_VALS2(STATUS_ERR_USER_CLOSED, "USER_CLOSED"), + DEF_VALS2(STATUS_ERR_PROTOCOL_SEGMENT_TYPE, "REMOTE_PROTOCOL_ERROR"), + DEF_VALS2(STATUS_ERR_PROTOCOL_LENGTH_ERROR, "BIND_FAILED"), + DEF_VALS2(STATUS_ERR_PROTOCOL_INVALID_DATA, "MSGWRAP_DIFFERENT"), + DEF_VALS2(STATUS_ERR_PROTOCOL_ID_ERROR, "REMOTE_CHANNEL_UNAVAILABLE"), + DEF_VALS2(STATUS_ERR_PROTOCOL_MSH_ERROR, "TERMINATED_BY_REMOTE_EXIT"), + DEF_VALS2(STATUS_ERR_PROTOCOL_GENERAL, "PROTOCOL_GENERAL"), + DEF_VALS2(STATUS_ERR_BATCH_FAILURE, "BATCH_FAILURE"), + DEF_VALS2(STATUS_ERR_MESSAGE_LENGTH_ERROR, "MESSAGE_LENGTH_ERROR"), + DEF_VALS2(STATUS_ERR_SEGMENT_NUMBER_ERROR, "SEGMENT_NUMBER_ERROR"), + DEF_VALS2(STATUS_ERR_SECURITY_FAILURE, "SECURITY_FAILURE"), + DEF_VALS2(STATUS_ERR_WRAP_VALUE_ERROR, "WRAP_VALUE_ERROR"), + DEF_VALS2(STATUS_ERR_CHANNEL_UNAVAILABLE, "CHANNEL_UNAVAILABLE"), + DEF_VALS2(STATUS_ERR_CLOSED_BY_EXIT, "CLOSED_BY_EXIT"), + DEF_VALS2(STATUS_ERR_CIPHER_SPEC, "CIPHER_SPEC"), + DEF_VALS2(STATUS_ERR_PEER_NAME, "PEER_NAME"), + DEF_VALS2(STATUS_ERR_SSL_CLIENT_CERTIFICATE, "SSL_CLIENT_CERTIFICATE"), + DEF_VALS2(STATUS_ERR_RMT_RSRCS_IN_RECOVERY, "RMT_RSRCS_IN_RECOVERY"), + DEF_VALS2(STATUS_ERR_SSL_REFRESHING, "SSL_REFRESHING"), + DEF_VALS2(STATUS_ERR_INVALID_HOBJ, "INVALID_HOBJ"), + DEF_VALS2(STATUS_ERR_CONV_ID_ERROR, "CONV_ID_ERROR"), + DEF_VALS2(STATUS_ERR_SOCKET_ACTION_TYPE, "SOCKET_ACTION_TYPE"), + DEF_VALS2(STATUS_ERR_STANDBY_Q_MGR, "STANDBY_Q_MGR"), + + DEF_VALS2(STATUS_ERR_CCSID_NOT_SUPPORTED, "CCSID_NOT_SUPPORTED"), + DEF_VALS2(STATUS_ERR_ENCODING_INVALID, "ENCODING_INVALID"), + DEF_VALS2(STATUS_ERR_FAP_LEVEL, "FAP_LEVEL"), + DEF_VALS2(STATUS_ERR_NEGOTIATION_FAILED, "NEGOTIATION_FAILED"), DEF_VALSE; 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_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_CIH, MQ_TEXT_CIH), - DEF_VALS2(STRUCTID_DH, MQ_TEXT_DH), - DEF_VALS2(STRUCTID_DLH, MQ_TEXT_DLH), - DEF_VALS2(STRUCTID_GMO, MQ_TEXT_GMO), - DEF_VALS2(STRUCTID_ID, MQ_TEXT_ID), - DEF_VALS2(STRUCTID_IIH, MQ_TEXT_IIH), - 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_RMH, MQ_TEXT_RMH), - DEF_VALS2(STRUCTID_TM, MQ_TEXT_TM), - DEF_VALS2(STRUCTID_TMC2, MQ_TEXT_TMC2), - DEF_VALS2(STRUCTID_CAUT, MQ_TEXT_CAUT), - 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_SPQU , MQ_TEXT_SPQU), - DEF_VALS2(STRUCTID_SPQI , MQ_TEXT_SPQI), - DEF_VALS2(STRUCTID_SPQO , MQ_TEXT_SPQO), - DEF_VALS2(STRUCTID_SPPU , MQ_TEXT_SPPU), - DEF_VALS2(STRUCTID_SPPI , MQ_TEXT_SPPI), - DEF_VALS2(STRUCTID_SPPO , MQ_TEXT_SPPO), - DEF_VALS2(STRUCTID_SPGU , MQ_TEXT_SPGU), - DEF_VALS2(STRUCTID_SPGI , MQ_TEXT_SPGI), - DEF_VALS2(STRUCTID_SPGO , MQ_TEXT_SPGO), - DEF_VALS2(STRUCTID_SPAU , MQ_TEXT_SPAU), - DEF_VALS2(STRUCTID_SPAI , MQ_TEXT_SPAI), - DEF_VALS2(STRUCTID_SPAO , MQ_TEXT_SPAO), - DEF_VALS2(STRUCTID_SPOU , MQ_TEXT_SPOU), - DEF_VALS2(STRUCTID_SPOI , MQ_TEXT_SPOI), - DEF_VALS2(STRUCTID_SPOO , MQ_TEXT_SPOO), - DEF_VALS2(STRUCTID_LPOO , MQ_TEXT_LPOO), - DEF_VALS2(STRUCTID_FOPA , MQ_TEXT_FOPA), - DEF_VALS2(STRUCTID_FCNO , MQ_TEXT_FCNO), - 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_GMO_EBCDIC, MQ_TEXT_GMO), - DEF_VALS2(STRUCTID_ID_EBCDIC, MQ_TEXT_ID), - DEF_VALS2(STRUCTID_IIH_EBCDIC, MQ_TEXT_IIH), - DEF_VALS2(STRUCTID_MD_EBCDIC, MQ_TEXT_MD), - DEF_VALS2(STRUCTID_MDE_EBCDIC, MQ_TEXT_MDE), - DEF_VALS2(STRUCTID_OD_EBCDIC, MQ_TEXT_OD), - DEF_VALS2(STRUCTID_PMO_EBCDIC, MQ_TEXT_PMO), - DEF_VALS2(STRUCTID_RMH_EBCDIC, MQ_TEXT_RMH), - DEF_VALS2(STRUCTID_TM_EBCDIC, MQ_TEXT_TM), - DEF_VALS2(STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2), - DEF_VALS2(STRUCTID_CAUT_EBCDIC, MQ_TEXT_CAUT), - 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_VALS2(STRUCTID_SPQU_EBCDIC, MQ_TEXT_SPQU), - DEF_VALS2(STRUCTID_SPQI_EBCDIC, MQ_TEXT_SPQI), - DEF_VALS2(STRUCTID_SPQO_EBCDIC, MQ_TEXT_SPQO), - DEF_VALS2(STRUCTID_SPPU_EBCDIC, MQ_TEXT_SPPU), - DEF_VALS2(STRUCTID_SPPI_EBCDIC, MQ_TEXT_SPPI), - DEF_VALS2(STRUCTID_SPPO_EBCDIC, MQ_TEXT_SPPO), - DEF_VALS2(STRUCTID_SPGU_EBCDIC, MQ_TEXT_SPGU), - DEF_VALS2(STRUCTID_SPGI_EBCDIC, MQ_TEXT_SPGI), - DEF_VALS2(STRUCTID_SPGO_EBCDIC, MQ_TEXT_SPGO), - DEF_VALS2(STRUCTID_SPAU_EBCDIC, MQ_TEXT_SPAU), - DEF_VALS2(STRUCTID_SPAI_EBCDIC, MQ_TEXT_SPAI), - DEF_VALS2(STRUCTID_SPAO_EBCDIC, MQ_TEXT_SPAO), - DEF_VALS2(STRUCTID_SPOU_EBCDIC, MQ_TEXT_SPOU), - DEF_VALS2(STRUCTID_SPOI_EBCDIC, MQ_TEXT_SPOI), - DEF_VALS2(STRUCTID_SPOO_EBCDIC, MQ_TEXT_SPOO), - DEF_VALS2(STRUCTID_LPOO_EBCDIC, MQ_TEXT_LPOO), - DEF_VALS2(STRUCTID_FOPA_EBCDIC, MQ_TEXT_FOPA), - DEF_VALS2(STRUCTID_FCNO_EBCDIC , MQ_TEXT_FCNO), + DEF_VALS2(STRUCTID_CIH, MQ_TEXT_CIH), + DEF_VALS2(STRUCTID_DH, MQ_TEXT_DH), + DEF_VALS2(STRUCTID_DLH, MQ_TEXT_DLH), + DEF_VALS2(STRUCTID_GMO, MQ_TEXT_GMO), + DEF_VALS2(STRUCTID_ID, MQ_TEXT_ID), + DEF_VALS2(STRUCTID_IIH, MQ_TEXT_IIH), + 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_RMH, MQ_TEXT_RMH), + DEF_VALS2(STRUCTID_TM, MQ_TEXT_TM), + DEF_VALS2(STRUCTID_TMC2, MQ_TEXT_TMC2), + DEF_VALS2(STRUCTID_CAUT, MQ_TEXT_CAUT), + 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_SPQU , MQ_TEXT_SPQU), + DEF_VALS2(STRUCTID_SPQI , MQ_TEXT_SPQI), + DEF_VALS2(STRUCTID_SPQO , MQ_TEXT_SPQO), + DEF_VALS2(STRUCTID_SPPU , MQ_TEXT_SPPU), + DEF_VALS2(STRUCTID_SPPI , MQ_TEXT_SPPI), + DEF_VALS2(STRUCTID_SPPO , MQ_TEXT_SPPO), + DEF_VALS2(STRUCTID_SPGU , MQ_TEXT_SPGU), + DEF_VALS2(STRUCTID_SPGI , MQ_TEXT_SPGI), + DEF_VALS2(STRUCTID_SPGO , MQ_TEXT_SPGO), + DEF_VALS2(STRUCTID_SPAU , MQ_TEXT_SPAU), + DEF_VALS2(STRUCTID_SPAI , MQ_TEXT_SPAI), + DEF_VALS2(STRUCTID_SPAO , MQ_TEXT_SPAO), + DEF_VALS2(STRUCTID_SPOU , MQ_TEXT_SPOU), + DEF_VALS2(STRUCTID_SPOI , MQ_TEXT_SPOI), + DEF_VALS2(STRUCTID_SPOO , MQ_TEXT_SPOO), + DEF_VALS2(STRUCTID_LPOO , MQ_TEXT_LPOO), + DEF_VALS2(STRUCTID_FOPA , MQ_TEXT_FOPA), + DEF_VALS2(STRUCTID_FCNO , MQ_TEXT_FCNO), + 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_GMO_EBCDIC, MQ_TEXT_GMO), + DEF_VALS2(STRUCTID_ID_EBCDIC, MQ_TEXT_ID), + DEF_VALS2(STRUCTID_IIH_EBCDIC, MQ_TEXT_IIH), + DEF_VALS2(STRUCTID_MD_EBCDIC, MQ_TEXT_MD), + DEF_VALS2(STRUCTID_MDE_EBCDIC, MQ_TEXT_MDE), + DEF_VALS2(STRUCTID_OD_EBCDIC, MQ_TEXT_OD), + DEF_VALS2(STRUCTID_PMO_EBCDIC, MQ_TEXT_PMO), + DEF_VALS2(STRUCTID_RMH_EBCDIC, MQ_TEXT_RMH), + DEF_VALS2(STRUCTID_TM_EBCDIC, MQ_TEXT_TM), + DEF_VALS2(STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2), + DEF_VALS2(STRUCTID_CAUT_EBCDIC, MQ_TEXT_CAUT), + 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_VALS2(STRUCTID_SPQU_EBCDIC, MQ_TEXT_SPQU), + DEF_VALS2(STRUCTID_SPQI_EBCDIC, MQ_TEXT_SPQI), + DEF_VALS2(STRUCTID_SPQO_EBCDIC, MQ_TEXT_SPQO), + DEF_VALS2(STRUCTID_SPPU_EBCDIC, MQ_TEXT_SPPU), + DEF_VALS2(STRUCTID_SPPI_EBCDIC, MQ_TEXT_SPPI), + DEF_VALS2(STRUCTID_SPPO_EBCDIC, MQ_TEXT_SPPO), + DEF_VALS2(STRUCTID_SPGU_EBCDIC, MQ_TEXT_SPGU), + DEF_VALS2(STRUCTID_SPGI_EBCDIC, MQ_TEXT_SPGI), + DEF_VALS2(STRUCTID_SPGO_EBCDIC, MQ_TEXT_SPGO), + DEF_VALS2(STRUCTID_SPAU_EBCDIC, MQ_TEXT_SPAU), + DEF_VALS2(STRUCTID_SPAI_EBCDIC, MQ_TEXT_SPAI), + DEF_VALS2(STRUCTID_SPAO_EBCDIC, MQ_TEXT_SPAO), + DEF_VALS2(STRUCTID_SPOU_EBCDIC, MQ_TEXT_SPOU), + DEF_VALS2(STRUCTID_SPOI_EBCDIC, MQ_TEXT_SPOI), + DEF_VALS2(STRUCTID_SPOO_EBCDIC, MQ_TEXT_SPOO), + DEF_VALS2(STRUCTID_LPOO_EBCDIC, MQ_TEXT_LPOO), + DEF_VALS2(STRUCTID_FOPA_EBCDIC, MQ_TEXT_FOPA), + DEF_VALS2(STRUCTID_FCNO_EBCDIC , MQ_TEXT_FCNO), DEF_VALSE; DEF_VALSB(byteorder) - DEF_VALS2(LITTLE_ENDIAN, "Little endian"), - DEF_VALS2(BIG_ENDIAN, "Big endian"), + 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_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_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_endian(tvb, start, encoding); - } - else - { - uEnc = tvb_get_guint32_endian(tvb, start, encoding); - } - pEnc = sEnc; + gchar sEnc[128] = ""; + gchar *pEnc; + guint uEnc; + + if (length == 2) + { + uEnc = (gint)tvb_get_guint16_endian(tvb, start, encoding); + } + else + { + uEnc = tvb_get_guint32_endian(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"); - } + 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); + proto_tree_add_uint_format_value(tree, hfindex, tvb, start, length, uEnc, + "%8x-%d (%s)", uEnc, uEnc, sEnc); - return length; + 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint uMoOpt; + + uMoOpt = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint uLpiOpts; + + uLpiOpts = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint uGmoOpt; + + uGmoOpt = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint uPmoOpt; + + uPmoOpt = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint uOpenOpt; + + uOpenOpt = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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_endian(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_text(mq_tree_sub, tvb, offset, 4, 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; + guint iCloseOpt; + + iCloseOpt = tvb_get_guint32_endian(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_text(mq_tree_sub, tvb, offset, 4, 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, guint8 *pStr, mq_parm_t *p_mq_parm) { - proto_item *ti; - proto_tree *mq_tree_sub; - guint32 lStr; - guint32 oStr; - gint32 eStr; - guint8 *sStr; - static guint8 sEmpty[] = "[Empty]"; - - lStr = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - oStr = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - eStr = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - if (lStr && oStr) - { - sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, oStr, lStr, p_mq_parm->mq_str_enc); - } - else - sStr = NULL; - - ti = proto_tree_add_text(tree, tvb, offset, iSize, "%s - %s", pStr, (sStr) ? sStr : sEmpty); - mq_tree_sub = proto_item_add_subtree(ti, idx); - 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; + proto_item *ti; + proto_tree *mq_tree_sub; + guint32 lStr; + guint32 oStr; + gint32 eStr; + guint8 *sStr; + static guint8 sEmpty[] = "[Empty]"; + + lStr = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + oStr = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + eStr = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + if (lStr && oStr) + { + sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, oStr, lStr, p_mq_parm->mq_str_enc); + } + else + sStr = NULL; + + ti = proto_tree_add_text(tree, tvb, offset, iSize, "%s - %s", pStr, (sStr) ? sStr : sEmpty); + mq_tree_sub = proto_item_add_subtree(ti, idx); + 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_length_remaining(tvb, offset) >= iSizePMR) - { - if (tree) - { - gint iOffsetPMR = 0; - gint iRecord = 0; - for (iRecord = 0; iRecord < iNbrRecords; iRecord++) - { - proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetPMR, iSizePMR1, MQ_TEXT_PMR); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; + 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_length_remaining(tvb, offset) >= iSizePMR) + { + if (tree) + { + gint iOffsetPMR = 0; + gint iRecord = 0; + for (iRecord = 0; iRecord < iNbrRecords; iRecord++) + { + proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetPMR, iSizePMR1, MQ_TEXT_PMR); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= iSizeOR) - { - if (tree) - { - gint iOffsetOR = 0; - gint iRecord = 0; - for (iRecord = 0; iRecord < iNbrRecords ; iRecord++) - { - proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetOR, 96, MQ_TEXT_OR); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; + gint iSizeOR = 0; + if (offsetOR != 0) + { + iSizeOR = iNbrRecords * 96; + if (tvb_length_remaining(tvb, offset) >= iSizeOR) + { + if (tree) + { + gint iOffsetOR = 0; + gint iRecord = 0; + for (iRecord = 0; iRecord < iNbrRecords ; iRecord++) + { + proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetOR, 96, MQ_TEXT_OR); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= iSizeRR) - { - if (tree) - { - gint iOffsetRR = 0; - gint iRecord = 0; - for (iRecord = 0; iRecord < iNbrRecords; iRecord++) - { - proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetRR, 8, MQ_TEXT_RR); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; + gint iSizeRR = 0; + if (offsetRR != 0) + { + iSizeRR = iNbrRecords * 8; + if (tvb_length_remaining(tvb, offset) >= iSizeRR) + { + if (tree) + { + gint iOffsetRR = 0; + gint iRecord = 0; + for (iRecord = 0; iRecord < iNbrRecords; iRecord++) + { + proto_item *ti = proto_tree_add_text(tree, tvb, offset + iOffsetRR, 8, MQ_TEXT_RR); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_endian(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_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; - proto_item *ti; - - ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_GMO); - mq_tree = proto_item_add_subtree(ti, ett_mq_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; + gint iSize = 0; + + p_mq_parm->mq_strucID = (tvb_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_endian(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_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; + proto_item *ti; + + ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_GMO); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_endian(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_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; - proto_item *ti; - - ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_PMO); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_endian(tvb, offset + 128, p_mq_parm->mq_int_enc); - iRecFlags = tvb_get_guint32_endian(tvb, offset + 132, p_mq_parm->mq_int_enc); - - if (iNbrRecords > 0) - { - gint iOffsetPMR = 0; - gint iOffsetRR = 0; - - *iDistributionListSize = iNbrRecords; - iOffsetPMR = tvb_get_guint32_endian(tvb, offset + 136, p_mq_parm->mq_int_enc); - iOffsetRR = tvb_get_guint32_endian(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; + gint iSize = 0; + + p_mq_parm->mq_strucID = (tvb_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_endian(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_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; + proto_item *ti; + + ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_PMO); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_endian(tvb, offset + 128, p_mq_parm->mq_int_enc); + iRecFlags = tvb_get_guint32_endian(tvb, offset + 132, p_mq_parm->mq_int_enc); + + if (iNbrRecords > 0) + { + gint iOffsetPMR = 0; + gint iOffsetRR = 0; + + *iDistributionListSize = iNbrRecords; + iOffsetPMR = tvb_get_guint32_endian(tvb, offset + 136, p_mq_parm->mq_int_enc); + iOffsetRR = tvb_get_guint32_endian(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_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_endian(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_length_remaining(tvb, offset) >= iSize) - { - gint iNbrRecords = 0; - guint8 *sObj; - guint32 uTyp; - - if (iVersion >= 2) - iNbrRecords = tvb_get_guint32_endian(tvb, offset + 168, p_mq_parm->mq_int_enc); - - uTyp = tvb_get_guint32_endian(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(uTyp, GET_VALSV(objtype))); - if (strip_trailing_blanks(sObj, 48) > 0) - { - col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sObj); - } - - if (tree) - { - proto_tree *mq_tree; - proto_item *ti; - - ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_OD); - mq_tree = proto_item_add_subtree(ti, ett_mq_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, (guint8 *)"Object string", p_mq_parm); - dissect_mq_charv(tvb, mq_tree, offset+356, 20, ett_mq_od_selstr, (guint8 *)"Selection string", p_mq_parm); - dissect_mq_charv(tvb, mq_tree, offset+376, 20, ett_mq_od_resobjstr, (guint8 *)"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_endian(tvb, offset + 184, p_mq_parm->mq_int_enc); - iOffsetRR = tvb_get_guint32_endian(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; + gint iSize = 0; + + p_mq_parm->mq_strucID = (tvb_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_endian(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_length_remaining(tvb, offset) >= iSize) + { + gint iNbrRecords = 0; + guint8 *sObj; + guint32 uTyp; + + if (iVersion >= 2) + iNbrRecords = tvb_get_guint32_endian(tvb, offset + 168, p_mq_parm->mq_int_enc); + + uTyp = tvb_get_guint32_endian(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(uTyp, GET_VALSV(objtype))); + if (strip_trailing_blanks(sObj, 48) > 0) + { + col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sObj); + } + + if (tree) + { + proto_tree *mq_tree; + proto_item *ti; + + ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_OD); + mq_tree = proto_item_add_subtree(ti, ett_mq_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, (guint8 *)"Object string", p_mq_parm); + dissect_mq_charv(tvb, mq_tree, offset+356, 20, ett_mq_od_selstr, (guint8 *)"Selection string", p_mq_parm); + dissect_mq_charv(tvb, mq_tree, offset+376, 20, ett_mq_od_resobjstr, (guint8 *)"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_endian(tvb, offset + 184, p_mq_parm->mq_int_enc); + iOffsetRR = tvb_get_guint32_endian(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_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_length_remaining(tvb, offset) >= iSizeXid) - { - if (tree) - { - proto_tree *mq_tree; - proto_item *ti; - - ti = proto_tree_add_text(tree, tvb, offset, iSizeXid, MQ_TEXT_XID); - mq_tree = proto_item_add_subtree(ti, ett_mq_xa_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_length_remaining(tvb, offset) < iSizeXid) - iSizeXid = 0; - } - else iSizeXid = 0; - } - return iSizeXid; + gint iSizeXid = 0; + if (tvb_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_length_remaining(tvb, offset) >= iSizeXid) + { + if (tree) + { + proto_tree *mq_tree; + proto_item *ti; + + ti = proto_tree_add_text(tree, tvb, offset, iSizeXid, MQ_TEXT_XID); + mq_tree = proto_item_add_subtree(ti, ett_mq_xa_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_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; - guint8 *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", (char **)&sid_str, -1); - } - else - { - proto_tree_add_item(tree, hf_mq_securityid, tvb, offset, 40, ENC_NA); - offset += 40; - } - } - return offset - bOffset; + guint8 iSIDL; + guint8 iSID; + guint8 *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", (char **)&sid_str, -1); + } + else + { + proto_tree_add_item(tree, hf_mq_securityid, tvb, offset, 40, ENC_NA); + offset += 40; + } + } + return offset - bOffset; } 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_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); - 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_endian(tvb, offset + 46, p_mq_parm->mq_int_enc); - } - if (mqroot_tree) - { - proto_item *ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_ID); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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 + 44, 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; + 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_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); + 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_endian(tvb, offset + 46, p_mq_parm->mq_int_enc); + } + if (mqroot_tree) + { + proto_item *ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_ID); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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 + 44, 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_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_endian(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_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_endian(tvb, offset + 24, p_mq_parm->mq_int_enc); - p_mq_parm->mq_md_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 28, p_mq_parm->mq_int_enc); - if (tree) - { - proto_item *ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_MD); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; + gint iSize = 0; + + p_mq_parm->mq_strucID = (tvb_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_endian(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_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_endian(tvb, offset + 24, p_mq_parm->mq_int_enc); + p_mq_parm->mq_md_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 28, p_mq_parm->mq_int_enc); + if (tree) + { + proto_item *ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_MD); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_endian(tvb, offset+8, p_mq_parm->mq_int_enc); - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) - { - if (tree) - { - proto_item *ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_FOPA); - proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; + gint iSize = 0; + + p_mq_parm->mq_strucID = (tvb_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_endian(tvb, offset+8, p_mq_parm->mq_int_enc); + if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + { + if (tree) + { + proto_item *ti = proto_tree_add_text(tree, tvb, offset, iSize, MQ_TEXT_FOPA); + proto_tree *mq_tree = proto_item_add_subtree(ti, ett_mq_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; - mq_parm_t *p_mq_parm; - - 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_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_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_length_remaining(tvb, offset) < 36) - return; - iSizeMPF += 8; - iSizeTSH = 36; - } - 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_endian(tvb, offset + iSizeMPF + 20, p_mq_parm->mq_int_enc); - p_mq_parm->mq_tsh_ccsid.ccsid = tvb_get_guint16_endian(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(p_mq_parm->mq_opcode, mq_opcode_vals, "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(p_mq_parm->mq_opcode, mq_opcode_vals, "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; - } - - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeTSH, MQ_TEXT_TSH); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_length_remaining(tvb, offset) >= 16) - { - guint32 iReturnCode = 0; - guint32 iHdl = 0; - iReturnCode = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); - iHdl = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - if (iHdl != 0 && iHdl != 0xffffffff) - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); - if (iReturnCode != 0) - col_append_fstr(pinfo->cinfo, COL_INFO, " [RC=%d]", iReturnCode); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeAPI, MQ_TEXT_API); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 20) - { - gint iSize = 20; - iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - bPayload = TRUE; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_MSH); - mq_tree = proto_item_add_subtree(ti, ett_mq_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 && tvb_length_remaining(tvb, offset) >= 20) - { - gint iSize = 24; - gint iUsr = 0; - gint iPsw = 0; - - iUsr = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - iPsw = tvb_get_guint32_endian(tvb, offset + 20, p_mq_parm->mq_int_enc); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_CAUT); - mq_tree = proto_item_add_subtree(ti, ett_mq_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); + gint offset = 0; + guint32 iSegmentLength = 0; + guint32 iSizePayload = 0; + gint iSizeMD = 0; + gboolean bPayload = FALSE; + gboolean bEBCDIC = FALSE; + gint iDistributionListSize = 0; + mq_parm_t *p_mq_parm; + + 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_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_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_length_remaining(tvb, offset) < 36) + return; + iSizeMPF += 8; + iSizeTSH = 36; + } + 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_endian(tvb, offset + iSizeMPF + 20, p_mq_parm->mq_int_enc); + p_mq_parm->mq_tsh_ccsid.ccsid = tvb_get_guint16_endian(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(p_mq_parm->mq_opcode, mq_opcode_vals, "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(p_mq_parm->mq_opcode, mq_opcode_vals, "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; + } + + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeTSH, MQ_TEXT_TSH); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_length_remaining(tvb, offset) >= 16) + { + guint32 iReturnCode = 0; + guint32 iHdl = 0; + iReturnCode = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); + iHdl = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + if (iHdl != 0 && iHdl != 0xffffffff) + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); + if (iReturnCode != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, " [RC=%d]", iReturnCode); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeAPI, MQ_TEXT_API); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 20) + { + gint iSize = 20; + iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + bPayload = TRUE; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_MSH); + mq_tree = proto_item_add_subtree(ti, ett_mq_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 && tvb_length_remaining(tvb, offset) >= 20) + { + gint iSize = 24; + gint iUsr = 0; + gint iPsw = 0; + + iUsr = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + iPsw = tvb_get_guint32_endian(tvb, offset + 20, p_mq_parm->mq_int_enc); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_CAUT); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && tvb_length_remaining(tvb, offset) >= 20) - { - gint iSize = 20; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeAPI, MQ_TEXT_SOCKET); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && tvb_length_remaining(tvb, offset) >= 8) - { - /* Some status are 28 bytes long and some are 36 bytes long */ - gint iStatus = 0; - gint iStatusLength = 0; - - iStatus = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - iStatusLength = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); - - if (tvb_length_remaining(tvb, offset) >= iStatusLength) - { - if (iStatus != 0) - col_append_fstr(pinfo->cinfo, COL_INFO, " Code=%s", val_to_str(iStatus, GET_VALSV(status), "Unknown (0x%08x)")); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 8, MQ_TEXT_STAT); - mq_tree = proto_item_add_subtree(ti, ett_mq_status); - - 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 && tvb_length_remaining(tvb, offset) > 4) - { - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_PING); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_length(tvb); - } - else if (p_mq_parm->mq_opcode == MQ_TST_RESET && tvb_length_remaining(tvb, offset) >= 8) - { - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_RESET); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) - && tvb_length_remaining(tvb, offset) >= 4) - { - offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 4, MQ_TEXT_OPEN); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) && - tvb_length_remaining(tvb, offset) > 0) - { - gint iSizeCONN = 0; - gint nofs; - - /*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_length_remaining(tvb, offset) >= iSizeCONN) - { - guint8 *sApplicationName; - guint8 *sQMgr; - sApplicationName = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 28, p_mq_parm->mq_str_enc), 28, '.'); - if (strip_trailing_blanks(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, p_mq_parm->mq_str_enc), 28, '.'); - if (strip_trailing_blanks(sQMgr, 48) > 0) - { - col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQMgr); - } + offset += iSize + iUsr + iPsw; + p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && tvb_length_remaining(tvb, offset) >= 20) + { + gint iSize = 20; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeAPI, MQ_TEXT_SOCKET); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && tvb_length_remaining(tvb, offset) >= 8) + { + /* Some status are 28 bytes long and some are 36 bytes long */ + gint iStatus = 0; + gint iStatusLength = 0; + + iStatus = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + iStatusLength = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); + + if (tvb_length_remaining(tvb, offset) >= iStatusLength) + { + if (iStatus != 0) + col_append_fstr(pinfo->cinfo, COL_INFO, " Code=%s", val_to_str(iStatus, GET_VALSV(status), "Unknown (0x%08x)")); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 8, MQ_TEXT_STAT); + mq_tree = proto_item_add_subtree(ti, ett_mq_status); + + 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 && tvb_length_remaining(tvb, offset) > 4) + { + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_PING); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_length(tvb); + } + else if (p_mq_parm->mq_opcode == MQ_TST_RESET && tvb_length_remaining(tvb, offset) >= 8) + { + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_RESET); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) + && tvb_length_remaining(tvb, offset) >= 4) + { + offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 4, MQ_TEXT_OPEN); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) && + tvb_length_remaining(tvb, offset) > 0) + { + gint iSizeCONN = 0; + gint nofs; + + /*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_length_remaining(tvb, offset) >= iSizeCONN) + { + guint8 *sApplicationName; + guint8 *sQMgr; + sApplicationName = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 28, p_mq_parm->mq_str_enc), 28, '.'); + if (strip_trailing_blanks(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, p_mq_parm->mq_str_enc), 28, '.'); + if (strip_trailing_blanks(sQMgr, 48) > 0) + { + col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQMgr); + } #define do_proto_add_item(a, b) b; nofs += a; - nofs = offset; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeCONN, MQ_TEXT_CONN); - mq_tree = proto_item_add_subtree(ti, ett_mq_conn); - - do_proto_add_item(48, proto_tree_add_item(mq_tree, hf_mq_conn_QMgr , tvb, nofs, 48, p_mq_parm->mq_str_enc)); - do_proto_add_item(28, proto_tree_add_item(mq_tree, hf_mq_conn_appname , tvb, nofs, 28, p_mq_parm->mq_str_enc)); - do_proto_add_item( 4, proto_tree_add_item(mq_tree, hf_mq_conn_apptype , tvb, nofs, 4, p_mq_parm->mq_int_enc)); - do_proto_add_item(32, proto_tree_add_item(mq_tree, hf_mq_conn_acttoken, tvb, nofs, 32, ENC_NA)); - - if (iSizeCONN >= 120) - { - do_proto_add_item(4, proto_tree_add_item(mq_tree, hf_mq_conn_version, tvb, nofs, 4, p_mq_parm->mq_int_enc)); - do_proto_add_item(4, proto_tree_add_item(mq_tree, hf_mq_conn_options, tvb, nofs, 4, p_mq_parm->mq_int_enc)); - } - if (iSizeCONN >= 260) - { - proto_tree *mq_tree_sub; - - ti = proto_tree_add_text(mq_tree, tvb, nofs, iSizeCONN - nofs, MQ_TEXT_FCNO); - mq_tree_sub = proto_item_add_subtree(ti, ett_mq_fcno); - - do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_StructID , tvb, nofs, 4, p_mq_parm->mq_str_enc)); - do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown00, tvb, nofs, 4, p_mq_parm->mq_int_enc)); - do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown01, tvb, nofs, 4, p_mq_parm->mq_int_enc)); - - if (iSizeCONN == 260) - { - do_proto_add_item( 12, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_msgid , tvb, nofs, 12, p_mq_parm->mq_str_enc)); - do_proto_add_item( 48, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_mqmid , tvb, nofs, 48, p_mq_parm->mq_str_enc)); - do_proto_add_item( 68, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown02, tvb, nofs, 68, ENC_NA)); - } - if (iSizeCONN >= 332) - { - do_proto_add_item(152, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_msgid , tvb, nofs, 152, p_mq_parm->mq_str_enc)); - proto_tree_add_item(mq_tree_sub, hf_mq_fcno_mqmid , tvb, nofs, 48, p_mq_parm->mq_int_enc); - } - } - } + nofs = offset; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeCONN, MQ_TEXT_CONN); + mq_tree = proto_item_add_subtree(ti, ett_mq_conn); + + do_proto_add_item(48, proto_tree_add_item(mq_tree, hf_mq_conn_QMgr , tvb, nofs, 48, p_mq_parm->mq_str_enc)); + do_proto_add_item(28, proto_tree_add_item(mq_tree, hf_mq_conn_appname , tvb, nofs, 28, p_mq_parm->mq_str_enc)); + do_proto_add_item( 4, proto_tree_add_item(mq_tree, hf_mq_conn_apptype , tvb, nofs, 4, p_mq_parm->mq_int_enc)); + do_proto_add_item(32, proto_tree_add_item(mq_tree, hf_mq_conn_acttoken, tvb, nofs, 32, ENC_NA)); + + if (iSizeCONN >= 120) + { + do_proto_add_item(4, proto_tree_add_item(mq_tree, hf_mq_conn_version, tvb, nofs, 4, p_mq_parm->mq_int_enc)); + do_proto_add_item(4, proto_tree_add_item(mq_tree, hf_mq_conn_options, tvb, nofs, 4, p_mq_parm->mq_int_enc)); + } + if (iSizeCONN >= 260) + { + proto_tree *mq_tree_sub; + + ti = proto_tree_add_text(mq_tree, tvb, nofs, iSizeCONN - nofs, MQ_TEXT_FCNO); + mq_tree_sub = proto_item_add_subtree(ti, ett_mq_fcno); + + do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_StructID , tvb, nofs, 4, p_mq_parm->mq_str_enc)); + do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown00, tvb, nofs, 4, p_mq_parm->mq_int_enc)); + do_proto_add_item( 4, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown01, tvb, nofs, 4, p_mq_parm->mq_int_enc)); + + if (iSizeCONN == 260) + { + do_proto_add_item( 12, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_msgid , tvb, nofs, 12, p_mq_parm->mq_str_enc)); + do_proto_add_item( 48, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_mqmid , tvb, nofs, 48, p_mq_parm->mq_str_enc)); + do_proto_add_item( 68, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_unknown02, tvb, nofs, 68, ENC_NA)); + } + if (iSizeCONN >= 332) + { + do_proto_add_item(152, proto_tree_add_item(mq_tree_sub, hf_mq_fcno_msgid , tvb, nofs, 152, p_mq_parm->mq_str_enc)); + proto_tree_add_item(mq_tree_sub, hf_mq_fcno_mqmid , tvb, nofs, 48, p_mq_parm->mq_int_enc); + } + } + } #undef do_proto_add_item - 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) && tvb_length_remaining(tvb, offset) >= 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_endian(tvb, offset , p_mq_parm->mq_int_enc); - iNbIntegers = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - iCharLen = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_INQ); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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_length(tvb); - } - else if (p_mq_parm->mq_opcode == MQ_TST_NOTIFICATION) - { - gint iHdl; - - iHdl = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); - - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_NOTIFICATION); - mq_tree = proto_item_add_subtree(ti, ett_mq_notif); - - 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_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_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - iMaxMsgLen = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - iFlags = tvb_get_guint32_endian(tvb, offset + 32, p_mq_parm->mq_int_enc); - iGlbMsgIdx = tvb_get_guint32_endian(tvb, offset + 36, p_mq_parm->mq_int_enc); - if (iFlags & 0x00000010) - { - p_mq_parm->mq_msgreq_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 44, p_mq_parm->mq_int_enc); - p_mq_parm->mq_msgreq_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 48, p_mq_parm->mq_int_enc); - } - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, MaxLen=%d", - iHdl, iGlbMsgIdx, iMaxMsgLen); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_REQMSG); - mq_tree = proto_item_add_subtree(ti, ett_mq_msg); - - 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_endian(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_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_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - iGlbMsgIdx = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - iSegLength = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - iSegmIndex = tvb_get_guint16_endian(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) - { - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - } - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iHdrL, MQ_TEXT_ASYMSG); - mq_tree = proto_item_add_subtree(ti, ett_mq_msg); - - 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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - - iSizePayload = tvb_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) && tvb_length_remaining(tvb, offset) >= 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_endian(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) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 12, MQ_TEXT_SPI); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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); - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 12, "%s", sStructId); - mq_tree = proto_item_add_subtree(ti, ett_mq_spi_base); - - 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_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_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_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); - ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", sStructId); - mq_tree = proto_item_add_subtree(ti, ett_mq_spi_base); - - 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_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_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - - if (tvb_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_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_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_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_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - offset += 20; - bPayload = TRUE; - } - else - { - offset += 12; - } - p_mq_parm->mq_strucID = (tvb_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) && tvb_length_remaining(tvb, offset) >= 16) - { - /* The XA structures are special because they do not start with a structid */ - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 16, "%s (%s)", MQ_TEXT_XA, - val_to_str(p_mq_parm->mq_opcode, mq_opcode_vals, "Unknown (0x%02x)")); - mq_tree = proto_item_add_subtree(ti, ett_mq_xa); - - 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_length_remaining(tvb, offset) >= 1) - { - guint8 iXAInfoLength = 0; - iXAInfoLength = tvb_get_guint8(tvb, offset); - if (tvb_length_remaining(tvb, offset) >= iXAInfoLength + 1) - { - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iXAInfoLength + 1, MQ_TEXT_XINF); - mq_tree = proto_item_add_subtree(ti, ett_mq_xa_info); - - 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_length_remaining(tvb, offset) >= 4) - { - gint iNbXid = 0; - iNbXid = tvb_get_guint32_endian(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_length_remaining(tvb, offset) >= 32) - { - guint iVersion; - guint iXtraData = 0; - gint iSize = 32; - iVersion = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); - if (iVersion >= 3) - { - iSize += 56; - iXtraData = tvb_get_guint32_endian(tvb, offset + 84, p_mq_parm->mq_int_enc); - } - - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) - { - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_LPOO); - mq_tree = proto_item_add_subtree(ti, ett_mq_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+16, ett_mq_lpoo_lpiopts, p_mq_parm); - 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_unknown7, tvb, offset + 84, 2, 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_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_length_remaining(tvb, offset) >= 5) - { - offset += dissect_mq_id(tvb, pinfo, mqroot_tree, offset, p_mq_parm); - p_mq_parm->mq_strucID = (tvb_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_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_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); - if (strip_trailing_blanks(sUserId, 12) > 0) - { - col_append_fstr(pinfo->cinfo, COL_INFO, " User=%s", sUserId); - } - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeUID, MQ_TEXT_UID); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_length_remaining(tvb, offset) >= 4) - { - if (bPayload == TRUE && (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE)) - { - iSizePayload = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, 4, MQ_TEXT_PUT); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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_length_remaining(tvb, offset) >= 104) - { - /* if MD.format == MQXMIT */ - gint iSizeXQH = 104; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeXQH, MQ_TEXT_XQH); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_DH || p_mq_parm->mq_strucID == MQ_STRUCTID_DH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 48) - { - /* if MD.format == MQHDIST */ - gint iSizeDH = 48; - gint iNbrRecords = 0; - guint32 iRecFlags = 0; - - iNbrRecords = tvb_get_guint32_endian(tvb, offset + 36, p_mq_parm->mq_int_enc); - iRecFlags = tvb_get_guint32_endian(tvb, offset + 32, p_mq_parm->mq_int_enc); - p_mq_parm->iOfsEnc = offset + 12; - p_mq_parm->iOfsCcs = offset + 16; - p_mq_parm->iOfsFmt = offset + 20; - - p_mq_parm->mq_head_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - p_mq_parm->mq_head_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeDH, MQ_TEXT_DH); - mq_tree = proto_item_add_subtree(ti, ett_mq_dh); - - 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); - 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_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); - } - offset += iSizeDH; - iHeadersLength += iSizeDH; - - if (iNbrRecords > 0) - { - gint iOffsetOR = 0; - gint iOffsetPMR = 0; - gint iSizeORPMR = 0; - - iOffsetOR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 40, p_mq_parm->mq_int_enc); - iOffsetPMR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 44, p_mq_parm->mq_int_enc); - if ((iSizeORPMR = dissect_mq_or(tvb, mqroot_tree, offset, iNbrRecords, iOffsetOR, p_mq_parm)) != 0) - { - offset += iSizeORPMR; - iHeadersLength += iSizeORPMR; - } - if ((iSizeORPMR = dissect_mq_pmr(tvb, mqroot_tree, offset, iNbrRecords, iOffsetPMR, iRecFlags, p_mq_parm)) != 0) - { - offset += iSizeORPMR; - iHeadersLength += iSizeORPMR; - } - } - - p_mq_parm->mq_strucID = (tvb_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_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_endian(tvb, offset + 108, p_mq_parm->mq_int_enc); - p_mq_parm->mq_dlh_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 112, p_mq_parm->mq_int_enc); - - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeDLH, MQ_TEXT_DLH); - mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) && tvb_length_remaining(tvb, offset) >= 72) - { - /* if MD.format == MQHMDE */ - gint iSizeMDE = 72; - p_mq_parm->iOfsEnc = offset + 12; - p_mq_parm->iOfsCcs = offset + 16; - p_mq_parm->iOfsFmt = offset + 20; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeMDE, MQ_TEXT_MDE); - mq_tree = proto_item_add_subtree(ti, ett_mq_mde); - - 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); - 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); - } - offset += iSizeMDE; - iHeadersLength += iSizeMDE; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - if ((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_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 = 0; - iSizeHeader = (gint) tvb_get_guint32_endian(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); - - if (tvb_length_remaining(tvb, offset) >= iSizeHeader) - { - p_mq_parm->iOfsEnc = offset + 12; - p_mq_parm->iOfsCcs = offset + 16; - p_mq_parm->iOfsFmt = offset + 20; - if (tree) - { - ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeHeader, "%s", val_to_str(p_mq_parm->mq_strucID, mq_StructID_vals, "Unknown (0x%08x)")); - mq_tree = proto_item_add_subtree(ti, ett_mq_head); - - 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); - 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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - } - } - } - - col_append_fstr(pinfo->cinfo, COL_INFO, " (%d bytes)", iSizePayload - iHeadersLength); - - if (!mq_in_reassembly) - { - /* Call subdissector for the payload */ - tvbuff_t *next_tvb; + 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) && tvb_length_remaining(tvb, offset) >= 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_endian(tvb, offset , p_mq_parm->mq_int_enc); + iNbIntegers = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + iCharLen = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_INQ); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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_length(tvb); + } + else if (p_mq_parm->mq_opcode == MQ_TST_NOTIFICATION) + { + gint iHdl; + + iHdl = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); + + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_NOTIFICATION); + mq_tree = proto_item_add_subtree(ti, ett_mq_notif); + + 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_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_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + iMaxMsgLen = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + iFlags = tvb_get_guint32_endian(tvb, offset + 32, p_mq_parm->mq_int_enc); + iGlbMsgIdx = tvb_get_guint32_endian(tvb, offset + 36, p_mq_parm->mq_int_enc); + if (iFlags & 0x00000010) + { + p_mq_parm->mq_msgreq_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 44, p_mq_parm->mq_int_enc); + p_mq_parm->mq_msgreq_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 48, p_mq_parm->mq_int_enc); + } + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, MaxLen=%d", + iHdl, iGlbMsgIdx, iMaxMsgLen); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, MQ_TEXT_REQMSG); + mq_tree = proto_item_add_subtree(ti, ett_mq_msg); + + 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_endian(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_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_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + iGlbMsgIdx = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + iSegLength = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + iSegmIndex = tvb_get_guint16_endian(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) + { + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + } + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iHdrL, MQ_TEXT_ASYMSG); + mq_tree = proto_item_add_subtree(ti, ett_mq_msg); + + 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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + + iSizePayload = tvb_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) && tvb_length_remaining(tvb, offset) >= 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_endian(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) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 12, MQ_TEXT_SPI); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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); + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 12, "%s", sStructId); + mq_tree = proto_item_add_subtree(ti, ett_mq_spi_base); + + 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_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_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_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); + ti = proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", sStructId); + mq_tree = proto_item_add_subtree(ti, ett_mq_spi_base); + + 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_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_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + + if (tvb_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_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_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_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_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + offset += 20; + bPayload = TRUE; + } + else + { + offset += 12; + } + p_mq_parm->mq_strucID = (tvb_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) && tvb_length_remaining(tvb, offset) >= 16) + { + /* The XA structures are special because they do not start with a structid */ + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 16, "%s (%s)", MQ_TEXT_XA, + val_to_str(p_mq_parm->mq_opcode, mq_opcode_vals, "Unknown (0x%02x)")); + mq_tree = proto_item_add_subtree(ti, ett_mq_xa); + + 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_length_remaining(tvb, offset) >= 1) + { + guint8 iXAInfoLength = 0; + iXAInfoLength = tvb_get_guint8(tvb, offset); + if (tvb_length_remaining(tvb, offset) >= iXAInfoLength + 1) + { + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iXAInfoLength + 1, MQ_TEXT_XINF); + mq_tree = proto_item_add_subtree(ti, ett_mq_xa_info); + + 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_length_remaining(tvb, offset) >= 4) + { + gint iNbXid = 0; + iNbXid = tvb_get_guint32_endian(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_length_remaining(tvb, offset) >= 32) + { + guint iVersion; + guint iXtraData = 0; + gint iSize = 32; + iVersion = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); + if (iVersion >= 3) + { + iSize += 56; + iXtraData = tvb_get_guint32_endian(tvb, offset + 84, p_mq_parm->mq_int_enc); + } + + if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + { + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSize, MQ_TEXT_LPOO); + mq_tree = proto_item_add_subtree(ti, ett_mq_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+16, ett_mq_lpoo_lpiopts, p_mq_parm); + 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_unknown7, tvb, offset + 84, 2, 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_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_length_remaining(tvb, offset) >= 5) + { + offset += dissect_mq_id(tvb, pinfo, mqroot_tree, offset, p_mq_parm); + p_mq_parm->mq_strucID = (tvb_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_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_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); + if (strip_trailing_blanks(sUserId, 12) > 0) + { + col_append_fstr(pinfo->cinfo, COL_INFO, " User=%s", sUserId); + } + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeUID, MQ_TEXT_UID); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_length_remaining(tvb, offset) >= 4) + { + if (bPayload == TRUE && (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE)) + { + iSizePayload = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, 4, MQ_TEXT_PUT); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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_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_length_remaining(tvb, offset) >= 104) + { + /* if MD.format == MQXMIT */ + gint iSizeXQH = 104; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeXQH, MQ_TEXT_XQH); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_DH || p_mq_parm->mq_strucID == MQ_STRUCTID_DH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 48) + { + /* if MD.format == MQHDIST */ + gint iSizeDH = 48; + gint iNbrRecords = 0; + guint32 iRecFlags = 0; + + iNbrRecords = tvb_get_guint32_endian(tvb, offset + 36, p_mq_parm->mq_int_enc); + iRecFlags = tvb_get_guint32_endian(tvb, offset + 32, p_mq_parm->mq_int_enc); + p_mq_parm->iOfsEnc = offset + 12; + p_mq_parm->iOfsCcs = offset + 16; + p_mq_parm->iOfsFmt = offset + 20; + + p_mq_parm->mq_head_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + p_mq_parm->mq_head_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeDH, MQ_TEXT_DH); + mq_tree = proto_item_add_subtree(ti, ett_mq_dh); + + 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); + 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_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); + } + offset += iSizeDH; + iHeadersLength += iSizeDH; + + if (iNbrRecords > 0) + { + gint iOffsetOR = 0; + gint iOffsetPMR = 0; + gint iSizeORPMR = 0; + + iOffsetOR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 40, p_mq_parm->mq_int_enc); + iOffsetPMR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 44, p_mq_parm->mq_int_enc); + if ((iSizeORPMR = dissect_mq_or(tvb, mqroot_tree, offset, iNbrRecords, iOffsetOR, p_mq_parm)) != 0) + { + offset += iSizeORPMR; + iHeadersLength += iSizeORPMR; + } + if ((iSizeORPMR = dissect_mq_pmr(tvb, mqroot_tree, offset, iNbrRecords, iOffsetPMR, iRecFlags, p_mq_parm)) != 0) + { + offset += iSizeORPMR; + iHeadersLength += iSizeORPMR; + } + } + + p_mq_parm->mq_strucID = (tvb_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_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_endian(tvb, offset + 108, p_mq_parm->mq_int_enc); + p_mq_parm->mq_dlh_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 112, p_mq_parm->mq_int_enc); + + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeDLH, MQ_TEXT_DLH); + mq_tree = proto_item_add_subtree(ti, ett_mq_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_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) && tvb_length_remaining(tvb, offset) >= 72) + { + /* if MD.format == MQHMDE */ + gint iSizeMDE = 72; + p_mq_parm->iOfsEnc = offset + 12; + p_mq_parm->iOfsCcs = offset + 16; + p_mq_parm->iOfsFmt = offset + 20; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeMDE, MQ_TEXT_MDE); + mq_tree = proto_item_add_subtree(ti, ett_mq_mde); + + 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); + 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); + } + offset += iSizeMDE; + iHeadersLength += iSizeMDE; + p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + if ((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_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 = 0; + iSizeHeader = (gint) tvb_get_guint32_endian(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); + + if (tvb_length_remaining(tvb, offset) >= iSizeHeader) + { + p_mq_parm->iOfsEnc = offset + 12; + p_mq_parm->iOfsCcs = offset + 16; + p_mq_parm->iOfsFmt = offset + 20; + if (tree) + { + ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeHeader, "%s", val_to_str(p_mq_parm->mq_strucID, mq_StructID_vals, "Unknown (0x%08x)")); + mq_tree = proto_item_add_subtree(ti, ett_mq_head); + + 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); + 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_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + } + } + } + + col_append_fstr(pinfo->cinfo, COL_INFO, " (%d bytes)", iSizePayload - iHeadersLength); + + if (!mq_in_reassembly) + { + /* Call subdissector for the payload */ + tvbuff_t *next_tvb; #if 0 - struct mqinfo *mqinfo; - mqinfo = wmem_new0(wmem_packet_scope(), struct mqinfo); - /* Format, encoding and character set are "data type" information, not subprotocol information */ - mqinfo->encoding = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc); - mqinfo->ccsid = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsCcs, p_mq_parm->mq_int_enc); - memcpy(mqinfo->format, - tvb_get_string_enc(wmem_packet_scope(), tvb, p_mq_parm->iOfsFmt, sizeof(mqinfo->format), p_mq_parm->mq_str_enc), - sizeof(mqinfo->format)); + struct mqinfo *mqinfo; + mqinfo = wmem_new0(wmem_packet_scope(), struct mqinfo); + /* Format, encoding and character set are "data type" information, not subprotocol information */ + mqinfo->encoding = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc); + mqinfo->ccsid = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsCcs, p_mq_parm->mq_int_enc); + memcpy(mqinfo->format, + tvb_get_string_enc(wmem_packet_scope(), tvb, p_mq_parm->iOfsFmt, sizeof(mqinfo->format), p_mq_parm->mq_str_enc), + sizeof(mqinfo->format)); #endif - p_mq_parm->mq_cur_ccsid.encod = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc); - p_mq_parm->mq_cur_ccsid.ccsid = tvb_get_guint32_endian(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, p_mq_parm)) - call_dissector(data_handle, next_tvb, pinfo, mqroot_tree); - } - else - { - tvbuff_t *next_tvb; - next_tvb = tvb_new_subset_remaining(tvb, offset); - call_dissector(data_handle, next_tvb, pinfo, mqroot_tree); - } - } - offset = tvb_length(tvb); - } - /* After all recognised structures have been dissected, process remaining structure*/ - if (tvb_length_remaining(tvb, offset) >= 4) - { - p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); - if (tree) - { - proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", val_to_str(p_mq_parm->mq_strucID, mq_StructID_vals, "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_dissector(data_handle, 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_dissector(data_handle, tvb_new_subset_remaining(tvb, offset), pinfo, tree); - } - } + p_mq_parm->mq_cur_ccsid.encod = tvb_get_guint32_endian(tvb, p_mq_parm->iOfsEnc, p_mq_parm->mq_int_enc); + p_mq_parm->mq_cur_ccsid.ccsid = tvb_get_guint32_endian(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, p_mq_parm)) + call_dissector(data_handle, next_tvb, pinfo, mqroot_tree); + } + else + { + tvbuff_t *next_tvb; + next_tvb = tvb_new_subset_remaining(tvb, offset); + call_dissector(data_handle, next_tvb, pinfo, mqroot_tree); + } + } + offset = tvb_length(tvb); + } + /* After all recognised structures have been dissected, process remaining structure*/ + if (tvb_length_remaining(tvb, offset) >= 4) + { + p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); + if (tree) + { + proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", val_to_str(p_mq_parm->mq_strucID, mq_StructID_vals, "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_dissector(data_handle, 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_dissector(data_handle, 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; + 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_length(tvb) < 28) + /* 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_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 Encoding scheme */ - iEnco = (tvb_get_guint8(tvb, 8 + iMulS) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN); - /* Get the Operation Code */ - iOpcd = tvb_get_guint8( tvb, 9 + iMulS); - /* Get the Control Flag */ - iCtlF = tvb_get_guint8( tvb, 10 + iMulS); - /* Get the Semgnet Length */ - iSegL = tvb_get_ntohl ( tvb, 4); - /* 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_endian(tvb, iHdrL + 4, iEnco); - /* Get the Global Message Index */ - iGlbMsgIdx = tvb_get_guint32_endian(tvb, iHdrL + 12, iEnco); - /* Get the Segment Length */ - iSegLength = tvb_get_guint32_endian(tvb, iHdrL + 16, iEnco); - /* Get the Segment Index */ - iSegmIndex = tvb_get_guint16_endian(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] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - } - else - { - proto_item_append_text(ti, " %s Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - } - mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb); - } - else - { - mq_tree = tree; - } - - if (fd_head != NULL && pinfo->fd->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_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] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), - iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); - dissect_mq_pdu(tvb, pinfo, mq_tree); - return tvb_length(tvb); - } - } - else - { - dissect_mq_pdu(tvb, pinfo, mq_tree); /* XXX: mq_tree always NULL ?? */ - if (bSeg1st) - { - /* MQ segment is the first of a unreassembled series */ - col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]"); - } - return tvb_length(tvb); - } - } - /* Reassembly not enabled or non-fragmented message */ - dissect_mq_pdu(tvb, pinfo, tree); - } - - return tvb_length(tvb); + 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 Encoding scheme */ + iEnco = (tvb_get_guint8(tvb, 8 + iMulS) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN); + /* Get the Operation Code */ + iOpcd = tvb_get_guint8( tvb, 9 + iMulS); + /* Get the Control Flag */ + iCtlF = tvb_get_guint8( tvb, 10 + iMulS); + /* Get the Semgnet Length */ + iSegL = tvb_get_ntohl ( tvb, 4); + /* 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_endian(tvb, iHdrL + 4, iEnco); + /* Get the Global Message Index */ + iGlbMsgIdx = tvb_get_guint32_endian(tvb, iHdrL + 12, iEnco); + /* Get the Segment Length */ + iSegLength = tvb_get_guint32_endian(tvb, iHdrL + 16, iEnco); + /* Get the Segment Index */ + iSegmIndex = tvb_get_guint16_endian(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] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + } + else + { + proto_item_append_text(ti, " %s Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + } + mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb); + } + else + { + mq_tree = tree; + } + + if (fd_head != NULL && pinfo->fd->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_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] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); + dissect_mq_pdu(tvb, pinfo, mq_tree); + return tvb_length(tvb); + } + } + else + { + dissect_mq_pdu(tvb, pinfo, mq_tree); /* XXX: mq_tree always NULL ?? */ + if (bSeg1st) + { + /* MQ segment is the first of a unreassembled series */ + col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]"); + } + return tvb_length(tvb); + } + } + /* Reassembly not enabled or non-fragmented message */ + dissect_mq_pdu(tvb, pinfo, tree); + } + + return tvb_length(tvb); } static guint get_mq_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset) { - if (tvb_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; + if (tvb_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_length(tvb); + tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq, data); + return tvb_length(tvb); } static void dissect_mq_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - /* Since SPX has no standard desegmentation, MQ cannot be performed as well */ - dissect_mq_pdu(tvb, pinfo, tree); + /* Since SPX has no standard desegmentation, MQ cannot be performed as well */ + dissect_mq_pdu(tvb, pinfo, tree); } static gboolean dissect_mq_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint iProto, void *data) { - if (tvb_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 (iProto == MQ_XPT_TCP) - conversation_set_dissector(conversation, mq_tcp_handle); - - /* Dissect the packet */ - reassemble_mq(tvb, pinfo, tree, data); - return TRUE; - } - } - return FALSE; + if (tvb_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 (iProto == MQ_XPT_TCP) + conversation_set_dissector(conversation, mq_tcp_handle); + + /* Dissect the packet */ + reassemble_mq(tvb, pinfo, tree, data); + return TRUE; + } + } + return FALSE; } -static gboolean dissect_mq_heur_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +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, MQ_XPT_TCP, NULL); + return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_TCP, NULL); } -static gboolean dissect_mq_heur_netbios(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +static gboolean dissect_mq_heur_netbios(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { - return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_NETBIOS, NULL); + return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_NETBIOS, NULL); } -static gboolean dissect_mq_heur_http(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) +static gboolean dissect_mq_heur_http(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { - return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_HTTP, NULL); + return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_HTTP, NULL); } static void mq_init(void) { - reassembly_table_init(&mq_reassembly_table, - &addresses_reassembly_table_functions); + reassembly_table_init(&mq_reassembly_table, + &addresses_reassembly_table_functions); } 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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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_unknown00, {"unknown00", "mq.fcno.unknown00", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO unknown00", HFILL }}, - { &hf_mq_fcno_unknown01, {"unknown01", "mq.fcno.unknown01", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "FCNO unknown01", 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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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_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_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_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_unknown7 , {"Unknown7......", "mq.lpoo.unknown7", FT_UINT16, BASE_HEX, NULL, 0x0, "LPOO unknown7", 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_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_DEC, NULL, 0x0, "Header flags", HFILL }}, - { &hf_mq_head_struct , {"Struct..", "mq.head.struct", FT_BYTES, BASE_NONE, NULL, 0x0, "Header struct", 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 }} - - }; - 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_mde, - &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_xa, - &ett_mq_xa_tmflags, - &ett_mq_xa_xid, - &ett_mq_xa_info, - &ett_mq_charv, - &ett_mq_reaasemb - }; - - 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)); - - register_heur_dissector_list("mq", &mq_heur_subdissector_list); - register_init_routine(mq_init); - - mq_module = prefs_register_protocol(proto_mq, NULL); - 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); + 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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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_unknown00, + {"unknown00", "mq.fcno.unknown00", + FT_UINT32, BASE_HEX_DEC, NULL, 0x0, + "FCNO unknown00", HFILL } + }, + { &hf_mq_fcno_unknown01, + {"unknown01", "mq.fcno.unknown01", + FT_UINT32, BASE_HEX_DEC, NULL, 0x0, + "FCNO unknown01", 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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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, VALS(GET_VALSV(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_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_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_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_unknown7 , + {"Unknown7......", "mq.lpoo.unknown7", + FT_UINT16, BASE_HEX, NULL, 0x0, + "LPOO unknown7", 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_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_DEC, NULL, 0x0, + "Header flags", HFILL } + }, + { &hf_mq_head_struct , + {"Struct..", "mq.head.struct", + FT_BYTES, BASE_NONE, NULL, 0x0, + "Header struct", 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 } + } + + }; + 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_mde, + &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_xa, + &ett_mq_xa_tmflags, + &ett_mq_xa_xid, + &ett_mq_xa_info, + &ett_mq_charv, + &ett_mq_reaasemb + }; + + 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)); + + register_heur_dissector_list("mq", &mq_heur_subdissector_list); + register_init_routine(mq_init); + + mq_module = prefs_register_protocol(proto_mq, NULL); + 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_tcp_handle = new_create_dissector_handle(dissect_mq_tcp, proto_mq); - mq_spx_handle = create_dissector_handle(dissect_mq_spx, proto_mq); - - dissector_add_handle("tcp.port", mq_tcp_handle); - heur_dissector_add("tcp", dissect_mq_heur_tcp, proto_mq); - heur_dissector_add("netbios", dissect_mq_heur_netbios, proto_mq); - heur_dissector_add("http", dissect_mq_heur_http, proto_mq); - dissector_add_uint("spx.socket", MQ_SOCKET_SPX, mq_spx_handle); - data_handle = find_dissector("data"); - mqpcf_handle = find_dissector("mqpcf"); + /* 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_tcp_handle = new_create_dissector_handle(dissect_mq_tcp, proto_mq); + mq_spx_handle = create_dissector_handle(dissect_mq_spx, proto_mq); + + dissector_add_handle("tcp.port", mq_tcp_handle); + heur_dissector_add("tcp", dissect_mq_heur_tcp, proto_mq); + heur_dissector_add("netbios", dissect_mq_heur_netbios, proto_mq); + heur_dissector_add("http", dissect_mq_heur_http, proto_mq); + dissector_add_uint("spx.socket", MQ_SOCKET_SPX, mq_spx_handle); + data_handle = find_dissector("data"); + mqpcf_handle = find_dissector("mqpcf"); } + /* * Editor modelines - http://www.wireshark.org/tools/modelines.html * * Local variables: * c-basic-offset: 4 - * tab-width: 4 - * indent-tabs-mode: t + * tab-width: 8 + * indent-tabs-mode: nil * End: * - * vi: set shiftwidth=4 tabstop=4 noexpandtab: - * :indentSize=4:tabSize=4:noTabs=false: + * vi: set shiftwidth=4 tabstop=8 expandtab: + * :indentSize=4:tabSize=8:noTabs=true: */ |