aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-mq.c
diff options
context:
space:
mode:
authorBill Meier <wmeier@newsguy.com>2011-10-19 20:28:08 +0000
committerBill Meier <wmeier@newsguy.com>2011-10-19 20:28:08 +0000
commitff9b00ff5636904b9541d35192c0bd1104077f95 (patch)
treed46d4d9d56f70a25100263931e700bfac1876da6 /epan/dissectors/packet-mq.c
parent24a011d8db738e3d04b10455b159b973d4e86190 (diff)
use consistent indentation.
svn path=/trunk/; revision=39473
Diffstat (limited to 'epan/dissectors/packet-mq.c')
-rw-r--r--epan/dissectors/packet-mq.c4621
1 files changed, 2313 insertions, 2308 deletions
diff --git a/epan/dissectors/packet-mq.c b/epan/dissectors/packet-mq.c
index f86b6d0f2c..4b1a5642bd 100644
--- a/epan/dissectors/packet-mq.c
+++ b/epan/dissectors/packet-mq.c
@@ -25,44 +25,46 @@
*/
/* WebSphere MQ in a nutshell
-*
-* IBM WebSphere MQ (formerly IBM MQSeries) is an asynchronous proprietary messaging middleware that is based on message queues.
-* MQ can run on more than 35 platforms, amongst which UNIX, Windows and mainframes.
-* MQ can be transported on top of TCP, UDP, HTTP, NetBIOS, SPX, SNA LU 6.2, DECnet.
-* MQ has language bindings for C, C++, Java, .NET, COBOL, PL/I, OS/390 assembler, TAL, Visual Basic.
-*
-* The basic MQ topology is on one side the queue manager which hosts the queues. On the other side the
-* applications connect to the queue manager, open a queue, and put or get messages to/from that queue.
-*
-* The MQ middleware allows very generic operations (send, receive) and can be compared to the
-* socket API in terms of genericity, but it is more abstract and offers higher-level functionalities
-* (eg transactions, ...)
-*
-* The MQ middleware is not really intended to be run over public networks between parties
-* that do not know each other in advance, but is rather used on private corporate networks
-* between business applications (it can be compared to a database server for that aspect).
-*
-* The wire format of an MQ segment is a sequence of structures. Most structures start with a 4-letter struct identifier.
-* MQ is a fixed-sized format, most fields have maximum lengths defined in the MQ API.
-* MQ is popular on mainframes because it was available before TCP/IP.
-* MQ supports both ASCII-based and EBCDIC-based character sets.
-*
-* MQ API documentation is called "WebSphere MQ Application Programming Reference"
-*
-* Possible structures combinations :
-* TSH [ ID ^ UID ^ CONN ^ INQ ^ OD ]
-* TSH MSH XQH MD [ PAYLOAD ]
-* TSH [OD] MD [ GMO ^ PMO ] [ [XQH MD] PAYLOAD ]
-* TSH [ SPQU ^ SPPU ^ SPGU ^ SPAU [ SPQI ^ SPQO ^ SPPI ^ SPPO ^ SPGI ^ SPGO ^ SPAI ^ SPAO]]
-* TSH [ XA ] [ XINFO | XID ]
-* where PAYLOAD = [ DH ] [ DLH ] [ MDE ] BUFF
-*
-* This dissector is a beta version. To be improved
-* - Translate the integers/flags into their descriptions
-* - Find the semantics of the unknown fields
-* - Display EBCDIC strings as ASCII
-* - Packets which structures built on different platforms
-*/
+ *
+ * IBM WebSphere MQ (formerly IBM MQSeries) is an asynchronous proprietary messaging middleware that is
+ * based on message queues.
+ * MQ can run on more than 35 platforms, amongst which UNIX, Windows and mainframes.
+ * MQ can be transported on top of TCP, UDP, HTTP, NetBIOS, SPX, SNA LU 6.2, DECnet.
+ * MQ has language bindings for C, C++, Java, .NET, COBOL, PL/I, OS/390 assembler, TAL, Visual Basic.
+ *
+ * The basic MQ topology is on one side the queue manager which hosts the queues. On the other side the
+ * applications connect to the queue manager, open a queue, and put or get messages to/from that queue.
+ *
+ * The MQ middleware allows very generic operations (send, receive) and can be compared to the
+ * socket API in terms of genericity, but it is more abstract and offers higher-level functionalities
+ * (eg transactions, ...)
+ *
+ * The MQ middleware is not really intended to be run over public networks between parties
+ * that do not know each other in advance, but is rather used on private corporate networks
+ * between business applications (it can be compared to a database server for that aspect).
+ *
+ * The wire format of an MQ segment is a sequence of structures.
+ * Most structures start with a 4-letter struct identifier.
+ * MQ is a fixed-sized format, most fields have maximum lengths defined in the MQ API.
+ * MQ is popular on mainframes because it was available before TCP/IP.
+ * MQ supports both ASCII-based and EBCDIC-based character sets.
+ *
+ * MQ API documentation is called "WebSphere MQ Application Programming Reference"
+ *
+ * Possible structures combinations :
+ * TSH [ ID ^ UID ^ CONN ^ INQ ^ OD ]
+ * TSH MSH XQH MD [ PAYLOAD ]
+ * TSH [OD] MD [ GMO ^ PMO ] [ [XQH MD] PAYLOAD ]
+ * TSH [ SPQU ^ SPPU ^ SPGU ^ SPAU [ SPQI ^ SPQO ^ SPPI ^ SPPO ^ SPGI ^ SPGO ^ SPAI ^ SPAO]]
+ * TSH [ XA ] [ XINFO | XID ]
+ * where PAYLOAD = [ DH ] [ DLH ] [ MDE ] BUFF
+ *
+ * This dissector is a beta version. To be improved
+ * - Translate the integers/flags into their descriptions
+ * - Find the semantics of the unknown fields
+ * - Display EBCDIC strings as ASCII
+ * - Packets which structures built on different platforms
+ */
#ifdef HAVE_CONFIG_H
# include "config.h"
@@ -641,2644 +643,2647 @@ static GHashTable *mq_reassembled_table = NULL;
static const value_string mq_opcode_vals[] = {
- { MQ_TST_INITIAL, "INITIAL_DATA" },
- { MQ_TST_RESYNC, "RESYNC_DATA" },
- { MQ_TST_RESET, "RESET_DATA" },
- { MQ_TST_MESSAGE, "MESSAGE_DATA" },
- { MQ_TST_STATUS, "STATUS_DATA" },
- { MQ_TST_SECURITY, "SECURITY_DATA" },
- { MQ_TST_PING, "PING_DATA" },
- { MQ_TST_USERID, "USERID_DATA" },
- { MQ_TST_HEARTBEAT, "HEARTBEAT" },
- { MQ_TST_MQCONN, "MQCONN" },
- { MQ_TST_MQDISC, "MQDISC" },
- { MQ_TST_MQOPEN, "MQOPEN" },
- { MQ_TST_MQCLOSE, "MQCLOSE" },
- { MQ_TST_MQGET, "MQGET" },
- { MQ_TST_MQPUT, "MQPUT" },
- { MQ_TST_MQPUT1, "MQPUT1" },
- { MQ_TST_MQSET, "MQSET" },
- { MQ_TST_MQINQ, "MQINQ" },
- { MQ_TST_MQCMIT, "MQCMIT" },
- { MQ_TST_MQBACK, "MQBACK" },
- { MQ_TST_SPI, "SPI" },
- { MQ_TST_MQCONN_REPLY, "MQCONN_REPLY" },
- { MQ_TST_MQDISC_REPLY, "MQDISC_REPLY" },
- { MQ_TST_MQOPEN_REPLY, "MQOPEN_REPLY" },
- { MQ_TST_MQCLOSE_REPLY, "MQCLOSE_REPLY" },
- { MQ_TST_MQGET_REPLY, "MQGET_REPLY" },
- { MQ_TST_MQPUT_REPLY, "MQPUT_REPLY" },
- { MQ_TST_MQPUT1_REPLY, "MQPUT1_REPLY" },
- { MQ_TST_MQSET_REPLY, "MQSET_REPLY" },
- { MQ_TST_MQINQ_REPLY, "MQINQ_REPLY" },
- { MQ_TST_MQCMIT_REPLY, "MQCMIT_REPLY" },
- { MQ_TST_MQBACK_REPLY, "MQBACK_REPLY" },
- { MQ_TST_SPI_REPLY, "SPI_REPLY" },
- { MQ_TST_XA_START, "XA_START" },
- { MQ_TST_XA_END, "XA_END" },
- { MQ_TST_XA_OPEN, "XA_OPEN" },
- { MQ_TST_XA_CLOSE, "XA_CLOSE" },
- { MQ_TST_XA_PREPARE, "XA_PREPARE" },
- { MQ_TST_XA_COMMIT, "XA_COMMIT" },
- { MQ_TST_XA_ROLLBACK, "XA_ROLLBACK" },
- { MQ_TST_XA_FORGET, "XA_FORGET" },
- { MQ_TST_XA_RECOVER, "XA_RECOVER" },
- { MQ_TST_XA_COMPLETE, "XA_COMPLETE" },
- { MQ_TST_XA_START_REPLY, "XA_START_REPLY" },
- { MQ_TST_XA_END_REPLY, "XA_END_REPLY" },
- { MQ_TST_XA_OPEN_REPLY, "XA_OPEN_REPLY" },
- { MQ_TST_XA_CLOSE_REPLY, "XA_CLOSE_REPLY" },
- { MQ_TST_XA_PREPARE_REPLY, "XA_PREPARE_REPLY" },
- { MQ_TST_XA_COMMIT_REPLY, "XA_COMMIT_REPLY" },
- { MQ_TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY" },
- { MQ_TST_XA_FORGET_REPLY, "XA_FORGET_REPLY" },
- { MQ_TST_XA_RECOVER_REPLY, "XA_RECOVER_REPLY" },
- { MQ_TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY" },
- { 0, NULL }
+ { MQ_TST_INITIAL, "INITIAL_DATA" },
+ { MQ_TST_RESYNC, "RESYNC_DATA" },
+ { MQ_TST_RESET, "RESET_DATA" },
+ { MQ_TST_MESSAGE, "MESSAGE_DATA" },
+ { MQ_TST_STATUS, "STATUS_DATA" },
+ { MQ_TST_SECURITY, "SECURITY_DATA" },
+ { MQ_TST_PING, "PING_DATA" },
+ { MQ_TST_USERID, "USERID_DATA" },
+ { MQ_TST_HEARTBEAT, "HEARTBEAT" },
+ { MQ_TST_MQCONN, "MQCONN" },
+ { MQ_TST_MQDISC, "MQDISC" },
+ { MQ_TST_MQOPEN, "MQOPEN" },
+ { MQ_TST_MQCLOSE, "MQCLOSE" },
+ { MQ_TST_MQGET, "MQGET" },
+ { MQ_TST_MQPUT, "MQPUT" },
+ { MQ_TST_MQPUT1, "MQPUT1" },
+ { MQ_TST_MQSET, "MQSET" },
+ { MQ_TST_MQINQ, "MQINQ" },
+ { MQ_TST_MQCMIT, "MQCMIT" },
+ { MQ_TST_MQBACK, "MQBACK" },
+ { MQ_TST_SPI, "SPI" },
+ { MQ_TST_MQCONN_REPLY, "MQCONN_REPLY" },
+ { MQ_TST_MQDISC_REPLY, "MQDISC_REPLY" },
+ { MQ_TST_MQOPEN_REPLY, "MQOPEN_REPLY" },
+ { MQ_TST_MQCLOSE_REPLY, "MQCLOSE_REPLY" },
+ { MQ_TST_MQGET_REPLY, "MQGET_REPLY" },
+ { MQ_TST_MQPUT_REPLY, "MQPUT_REPLY" },
+ { MQ_TST_MQPUT1_REPLY, "MQPUT1_REPLY" },
+ { MQ_TST_MQSET_REPLY, "MQSET_REPLY" },
+ { MQ_TST_MQINQ_REPLY, "MQINQ_REPLY" },
+ { MQ_TST_MQCMIT_REPLY, "MQCMIT_REPLY" },
+ { MQ_TST_MQBACK_REPLY, "MQBACK_REPLY" },
+ { MQ_TST_SPI_REPLY, "SPI_REPLY" },
+ { MQ_TST_XA_START, "XA_START" },
+ { MQ_TST_XA_END, "XA_END" },
+ { MQ_TST_XA_OPEN, "XA_OPEN" },
+ { MQ_TST_XA_CLOSE, "XA_CLOSE" },
+ { MQ_TST_XA_PREPARE, "XA_PREPARE" },
+ { MQ_TST_XA_COMMIT, "XA_COMMIT" },
+ { MQ_TST_XA_ROLLBACK, "XA_ROLLBACK" },
+ { MQ_TST_XA_FORGET, "XA_FORGET" },
+ { MQ_TST_XA_RECOVER, "XA_RECOVER" },
+ { MQ_TST_XA_COMPLETE, "XA_COMPLETE" },
+ { MQ_TST_XA_START_REPLY, "XA_START_REPLY" },
+ { MQ_TST_XA_END_REPLY, "XA_END_REPLY" },
+ { MQ_TST_XA_OPEN_REPLY, "XA_OPEN_REPLY" },
+ { MQ_TST_XA_CLOSE_REPLY, "XA_CLOSE_REPLY" },
+ { MQ_TST_XA_PREPARE_REPLY, "XA_PREPARE_REPLY" },
+ { MQ_TST_XA_COMMIT_REPLY, "XA_COMMIT_REPLY" },
+ { MQ_TST_XA_ROLLBACK_REPLY, "XA_ROLLBACK_REPLY" },
+ { MQ_TST_XA_FORGET_REPLY, "XA_FORGET_REPLY" },
+ { MQ_TST_XA_RECOVER_REPLY, "XA_RECOVER_REPLY" },
+ { MQ_TST_XA_COMPLETE_REPLY, "XA_COMPLETE_REPLY" },
+ { 0, NULL }
};
static const value_string mq_spi_verbs_vals[] = {
- { MQ_SPI_QUERY, "QUERY" },
- { MQ_SPI_PUT, "PUT" },
- { MQ_SPI_GET, "GET" },
- { MQ_SPI_ACTIVATE, "ACTIVATE" },
- { 0, NULL }
+ { MQ_SPI_QUERY, "QUERY" },
+ { MQ_SPI_PUT, "PUT" },
+ { MQ_SPI_GET, "GET" },
+ { MQ_SPI_ACTIVATE, "ACTIVATE" },
+ { 0, NULL }
};
static const value_string mq_spi_activate_vals[] = {
- { MQ_SPI_ACTIVATE_ENABLE, "ENABLE" },
- { MQ_SPI_ACTIVATE_DISABLE, "DISABLE" },
- { 0, NULL }
+ { MQ_SPI_ACTIVATE_ENABLE, "ENABLE" },
+ { MQ_SPI_ACTIVATE_DISABLE, "DISABLE" },
+ { 0, NULL }
};
static const value_string mq_status_vals[] = {
- { MQ_STATUS_E_REMOTE_CHANNEL_NOT_FOUND, "REMOTE_CHANNEL_NOT_FOUND" },
- { MQ_STATUS_E_BAD_REMOTE_CHANNEL_TYPE, "BAD_REMOTE_CHANNEL_TYPE" },
- { MQ_STATUS_E_REMOTE_QM_UNAVAILABLE, "REMOTE_QM_UNAVAILABLE" },
- { MQ_STATUS_E_MSG_SEQUENCE_ERROR, "MSG_SEQUENCE_ERROR" },
- { MQ_STATUS_E_REMOTE_QM_TERMINATING, "REMOTE_QM_TERMINATING" },
- { MQ_STATUS_E_MSG_NOT_RECEIVED, "MSG_NOT_RECEIVED" },
- { MQ_STATUS_I_CHANNEL_CLOSED, "CHANNEL_CLOSED" },
- { MQ_STATUS_I_DISCINTERVAL_EXPIRED, "DISCINTERVAL_EXPIRED" },
- { MQ_STATUS_E_REMOTE_PROTOCOL_ERROR, "REMOTE_PROTOCOL_ERROR" },
- { MQ_STATUS_E_BIND_FAILED, "BIND_FAILED" },
- { MQ_STATUS_E_MSGWRAP_DIFFERENT, "MSGWRAP_DIFFERENT" },
- { MQ_STATUS_E_REMOTE_CHANNEL_UNAVAILABLE, "REMOTE_CHANNEL_UNAVAILABLE" },
- { MQ_STATUS_E_TERMINATED_BY_REMOTE_EXIT, "TERMINATED_BY_REMOTE_EXIT" },
- { MQ_STATUS_E_SSL_REMOTE_BAD_CIPHER, "SSL_REMOTE_BAD_CIPHER" },
- { 0, NULL }
+ { MQ_STATUS_E_REMOTE_CHANNEL_NOT_FOUND, "REMOTE_CHANNEL_NOT_FOUND" },
+ { MQ_STATUS_E_BAD_REMOTE_CHANNEL_TYPE, "BAD_REMOTE_CHANNEL_TYPE" },
+ { MQ_STATUS_E_REMOTE_QM_UNAVAILABLE, "REMOTE_QM_UNAVAILABLE" },
+ { MQ_STATUS_E_MSG_SEQUENCE_ERROR, "MSG_SEQUENCE_ERROR" },
+ { MQ_STATUS_E_REMOTE_QM_TERMINATING, "REMOTE_QM_TERMINATING" },
+ { MQ_STATUS_E_MSG_NOT_RECEIVED, "MSG_NOT_RECEIVED" },
+ { MQ_STATUS_I_CHANNEL_CLOSED, "CHANNEL_CLOSED" },
+ { MQ_STATUS_I_DISCINTERVAL_EXPIRED, "DISCINTERVAL_EXPIRED" },
+ { MQ_STATUS_E_REMOTE_PROTOCOL_ERROR, "REMOTE_PROTOCOL_ERROR" },
+ { MQ_STATUS_E_BIND_FAILED, "BIND_FAILED" },
+ { MQ_STATUS_E_MSGWRAP_DIFFERENT, "MSGWRAP_DIFFERENT" },
+ { MQ_STATUS_E_REMOTE_CHANNEL_UNAVAILABLE, "REMOTE_CHANNEL_UNAVAILABLE" },
+ { MQ_STATUS_E_TERMINATED_BY_REMOTE_EXIT, "TERMINATED_BY_REMOTE_EXIT" },
+ { MQ_STATUS_E_SSL_REMOTE_BAD_CIPHER, "SSL_REMOTE_BAD_CIPHER" },
+ { 0, NULL }
};
static const value_string mq_xaer_vals[] = {
- { MQ_XA_RBROLLBACK, "XA_RBROLLBACK" },
- { MQ_XA_RBCOMMFAIL, "XA_RBCOMMFAIL" },
- { MQ_XA_RBDEADLOCK, "XA_RBDEADLOCK" },
- { MQ_XA_RBINTEGRITY, "XA_RBINTEGRITY" },
- { MQ_XA_RBOTHER, "XA_RBOTHER" },
- { MQ_XA_RBPROTO, "XA_RBPROTO" },
- { MQ_XA_RBTIMEOUT, "XA_RBTIMEOUT" },
- { MQ_XA_RBTRANSIENT, "XA_RBTRANSIENT" },
- { MQ_XA_NOMIGRATE, "XA_NOMIGRATE" },
- { MQ_XA_HEURHAZ, "XA_HEURHAZ" },
- { MQ_XA_HEURCOM, "XA_HEURCOM" },
- { MQ_XA_HEURRB, "XA_HEURRB" },
- { MQ_XA_HEURMIX, "XA_HEURMIX" },
- { MQ_XA_RETRY, "XA_RETRY" },
- { MQ_XA_RDONLY, "XA_RDONLY" },
- { MQ_XA_OK, "XA_OK" },
- { (guint32)MQ_XAER_ASYNC, "XAER_ASYNC" },
- { (guint32)MQ_XAER_RMERR, "XAER_RMERR" },
- { (guint32)MQ_XAER_NOTA, "XAER_NOTA" },
- { (guint32)MQ_XAER_INVAL, "XAER_INVAL" },
- { (guint32)MQ_XAER_PROTO, "XAER_PROTO" },
- { (guint32)MQ_XAER_RMFAIL, "XAER_RMFAIL" },
- { (guint32)MQ_XAER_DUPID, "XAER_DUPID" },
- { (guint32)MQ_XAER_OUTSIDE, "XAER_OUTSIDE" },
- { 0, NULL }
+ { MQ_XA_RBROLLBACK, "XA_RBROLLBACK" },
+ { MQ_XA_RBCOMMFAIL, "XA_RBCOMMFAIL" },
+ { MQ_XA_RBDEADLOCK, "XA_RBDEADLOCK" },
+ { MQ_XA_RBINTEGRITY, "XA_RBINTEGRITY" },
+ { MQ_XA_RBOTHER, "XA_RBOTHER" },
+ { MQ_XA_RBPROTO, "XA_RBPROTO" },
+ { MQ_XA_RBTIMEOUT, "XA_RBTIMEOUT" },
+ { MQ_XA_RBTRANSIENT, "XA_RBTRANSIENT" },
+ { MQ_XA_NOMIGRATE, "XA_NOMIGRATE" },
+ { MQ_XA_HEURHAZ, "XA_HEURHAZ" },
+ { MQ_XA_HEURCOM, "XA_HEURCOM" },
+ { MQ_XA_HEURRB, "XA_HEURRB" },
+ { MQ_XA_HEURMIX, "XA_HEURMIX" },
+ { MQ_XA_RETRY, "XA_RETRY" },
+ { MQ_XA_RDONLY, "XA_RDONLY" },
+ { MQ_XA_OK, "XA_OK" },
+ { (guint32)MQ_XAER_ASYNC, "XAER_ASYNC" },
+ { (guint32)MQ_XAER_RMERR, "XAER_RMERR" },
+ { (guint32)MQ_XAER_NOTA, "XAER_NOTA" },
+ { (guint32)MQ_XAER_INVAL, "XAER_INVAL" },
+ { (guint32)MQ_XAER_PROTO, "XAER_PROTO" },
+ { (guint32)MQ_XAER_RMFAIL, "XAER_RMFAIL" },
+ { (guint32)MQ_XAER_DUPID, "XAER_DUPID" },
+ { (guint32)MQ_XAER_OUTSIDE, "XAER_OUTSIDE" },
+ { 0, NULL }
};
static const value_string mq_structid_vals[] = {
- { MQ_STRUCTID_CIH, MQ_TEXT_CIH },
- { MQ_STRUCTID_DH, MQ_TEXT_DH },
- { MQ_STRUCTID_DLH, MQ_TEXT_DLH },
- { MQ_STRUCTID_GMO, MQ_TEXT_GMO },
- { MQ_STRUCTID_ID, MQ_TEXT_ID },
- { MQ_STRUCTID_IIH, MQ_TEXT_IIH },
- { MQ_STRUCTID_MD, MQ_TEXT_MD },
- { MQ_STRUCTID_MDE, MQ_TEXT_MDE },
- { MQ_STRUCTID_MSH, MQ_TEXT_MSH },
- { MQ_STRUCTID_OD, MQ_TEXT_OD },
- { MQ_STRUCTID_PMO, MQ_TEXT_PMO },
- { MQ_STRUCTID_RMH, MQ_TEXT_RMH },
- { MQ_STRUCTID_TM, MQ_TEXT_TM },
- { MQ_STRUCTID_TMC2, MQ_TEXT_TMC2 },
- { MQ_STRUCTID_TSH, MQ_TEXT_TSH },
- { MQ_STRUCTID_UID, MQ_TEXT_UID },
- { MQ_STRUCTID_WIH, MQ_TEXT_WIH },
- { MQ_STRUCTID_XQH, MQ_TEXT_XQH },
- { MQ_STRUCTID_CIH_EBCDIC, MQ_TEXT_CIH },
- { MQ_STRUCTID_DH_EBCDIC, MQ_TEXT_DH },
- { MQ_STRUCTID_DLH_EBCDIC, MQ_TEXT_DLH },
- { MQ_STRUCTID_GMO_EBCDIC, MQ_TEXT_GMO },
- { MQ_STRUCTID_ID_EBCDIC, MQ_TEXT_ID },
- { MQ_STRUCTID_IIH_EBCDIC, MQ_TEXT_IIH },
- { MQ_STRUCTID_MD_EBCDIC, MQ_TEXT_MD },
- { MQ_STRUCTID_MDE_EBCDIC, MQ_TEXT_MDE },
- { MQ_STRUCTID_OD_EBCDIC, MQ_TEXT_OD },
- { MQ_STRUCTID_PMO_EBCDIC, MQ_TEXT_PMO },
- { MQ_STRUCTID_RMH_EBCDIC, MQ_TEXT_RMH },
- { MQ_STRUCTID_TM_EBCDIC, MQ_TEXT_TM },
- { MQ_STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2 },
- { MQ_STRUCTID_TSH_EBCDIC, MQ_TEXT_TSH },
- { MQ_STRUCTID_UID_EBCDIC, MQ_TEXT_UID },
- { MQ_STRUCTID_WIH_EBCDIC, MQ_TEXT_WIH },
- { MQ_STRUCTID_XQH_EBCDIC, MQ_TEXT_XQH },
- { 0, NULL }
+ { MQ_STRUCTID_CIH, MQ_TEXT_CIH },
+ { MQ_STRUCTID_DH, MQ_TEXT_DH },
+ { MQ_STRUCTID_DLH, MQ_TEXT_DLH },
+ { MQ_STRUCTID_GMO, MQ_TEXT_GMO },
+ { MQ_STRUCTID_ID, MQ_TEXT_ID },
+ { MQ_STRUCTID_IIH, MQ_TEXT_IIH },
+ { MQ_STRUCTID_MD, MQ_TEXT_MD },
+ { MQ_STRUCTID_MDE, MQ_TEXT_MDE },
+ { MQ_STRUCTID_MSH, MQ_TEXT_MSH },
+ { MQ_STRUCTID_OD, MQ_TEXT_OD },
+ { MQ_STRUCTID_PMO, MQ_TEXT_PMO },
+ { MQ_STRUCTID_RMH, MQ_TEXT_RMH },
+ { MQ_STRUCTID_TM, MQ_TEXT_TM },
+ { MQ_STRUCTID_TMC2, MQ_TEXT_TMC2 },
+ { MQ_STRUCTID_TSH, MQ_TEXT_TSH },
+ { MQ_STRUCTID_UID, MQ_TEXT_UID },
+ { MQ_STRUCTID_WIH, MQ_TEXT_WIH },
+ { MQ_STRUCTID_XQH, MQ_TEXT_XQH },
+ { MQ_STRUCTID_CIH_EBCDIC, MQ_TEXT_CIH },
+ { MQ_STRUCTID_DH_EBCDIC, MQ_TEXT_DH },
+ { MQ_STRUCTID_DLH_EBCDIC, MQ_TEXT_DLH },
+ { MQ_STRUCTID_GMO_EBCDIC, MQ_TEXT_GMO },
+ { MQ_STRUCTID_ID_EBCDIC, MQ_TEXT_ID },
+ { MQ_STRUCTID_IIH_EBCDIC, MQ_TEXT_IIH },
+ { MQ_STRUCTID_MD_EBCDIC, MQ_TEXT_MD },
+ { MQ_STRUCTID_MDE_EBCDIC, MQ_TEXT_MDE },
+ { MQ_STRUCTID_OD_EBCDIC, MQ_TEXT_OD },
+ { MQ_STRUCTID_PMO_EBCDIC, MQ_TEXT_PMO },
+ { MQ_STRUCTID_RMH_EBCDIC, MQ_TEXT_RMH },
+ { MQ_STRUCTID_TM_EBCDIC, MQ_TEXT_TM },
+ { MQ_STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2 },
+ { MQ_STRUCTID_TSH_EBCDIC, MQ_TEXT_TSH },
+ { MQ_STRUCTID_UID_EBCDIC, MQ_TEXT_UID },
+ { MQ_STRUCTID_WIH_EBCDIC, MQ_TEXT_WIH },
+ { MQ_STRUCTID_XQH_EBCDIC, MQ_TEXT_XQH },
+ { 0, NULL }
};
static const value_string mq_byteorder_vals[] = {
- { MQ_LITTLE_ENDIAN, "Little endian" },
- { MQ_BIG_ENDIAN, "Big endian" },
- { 0, NULL }
+ { MQ_LITTLE_ENDIAN, "Little endian" },
+ { MQ_BIG_ENDIAN, "Big endian" },
+ { 0, NULL }
};
static const value_string mq_conn_version_vals[] = {
- { MQ_CONN_VERSION, "MQCONN" },
- { MQ_CONNX_VERSION, "MQCONNX" },
- { 0, NULL }
+ { MQ_CONN_VERSION, "MQCONN" },
+ { MQ_CONNX_VERSION, "MQCONNX" },
+ { 0, NULL }
};
struct mq_msg_properties {
- gint iOffsetEncoding; /* Message encoding */
- gint iOffsetCcsid; /* Message character set */
- gint iOffsetFormat; /* Message format */
+ gint iOffsetEncoding; /* Message encoding */
+ gint iOffsetCcsid; /* Message character set */
+ gint iOffsetFormat; /* Message format */
};
static guint32 tvb_get_guint32_endian(tvbuff_t *a_tvb, gint a_iOffset, gint a_rep)
{
- guint32 iResult;
- if (a_rep & ENC_LITTLE_ENDIAN)
- iResult = tvb_get_letohl(a_tvb, a_iOffset);
- else
- iResult = tvb_get_ntohl(a_tvb, a_iOffset);
- return iResult;
+ guint32 iResult;
+ if (a_rep & ENC_LITTLE_ENDIAN)
+ iResult = tvb_get_letohl(a_tvb, a_iOffset);
+ else
+ iResult = tvb_get_ntohl(a_tvb, a_iOffset);
+ return iResult;
}
/* This routine truncates the string at the first blank space */
static gint strip_trailing_blanks(guint8* a_string, gint a_size)
{
- gint i = 0;
- if (a_string != NULL)
- {
- for (i = 0; i < a_size; i++)
- {
- if (a_string[i] == ' ' || a_string[i] == '\0')
- {
- a_string[i] = '\0';
- break;
- }
- }
- }
- return i;
+ gint i = 0;
+ if (a_string != NULL)
+ {
+ for (i = 0; i < a_size; i++)
+ {
+ if (a_string[i] == ' ' || a_string[i] == '\0')
+ {
+ a_string[i] = '\0';
+ break;
+ }
+ }
+ }
+ return i;
}
static gint
dissect_mq_md(tvbuff_t *tvb, proto_tree *tree, gint int_rep, gint string_rep, gint offset, struct mq_msg_properties* tMsgProps)
{
- proto_tree *mq_tree = NULL;
- guint32 structId;
- gint iSizeMD = 0;
-
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if ((structId == MQ_STRUCTID_MD || structId == MQ_STRUCTID_MD_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
- {
- guint32 iVersionMD = 0;
- iVersionMD = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- /* Compute length according to version */
- switch (iVersionMD)
- {
- case 1: iSizeMD = 324; break;
- case 2: iSizeMD = 364; break;
- }
-
- if (iSizeMD != 0 && tvb_length_remaining(tvb, offset) >= iSizeMD)
- {
- tMsgProps->iOffsetEncoding = offset + 24;
- tMsgProps->iOffsetCcsid = offset + 28;
- tMsgProps->iOffsetFormat = offset + 32;
- if (tree)
- {
- proto_item *ti = NULL;
- ti = proto_tree_add_text(tree, tvb, offset, iSizeMD, MQ_TEXT_MD);
- mq_tree = proto_item_add_subtree(ti, ett_mq_md);
-
- proto_tree_add_item(mq_tree, hf_mq_md_structid, tvb, offset, 4, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_report, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_msgtype, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_expiry, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_feedback, tvb, offset + 20, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_encoding, tvb, offset + 24, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_ccsid, tvb, offset + 28, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_format, tvb, offset + 32, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_priority, tvb, offset + 40, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_persistence, tvb, offset + 44, 4, int_rep);
- 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_backountcount, tvb, offset + 96, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_replytoq, tvb, offset + 100, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_replytoqmgr, tvb, offset + 148, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_userid, tvb, offset + 196, 12, string_rep);
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_putappltype, tvb, offset + 272, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_putapplname, tvb, offset + 276, 28, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_putdate, tvb, offset + 304, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_puttime, tvb, offset + 312, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_applorigindata, tvb, offset + 320, 4, string_rep);
-
- if (iVersionMD >= 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 352, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 356, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_originallength, tvb, offset + 360, 4, int_rep);
- }
- }
- }
- }
- }
- return iSizeMD;
+ proto_tree *mq_tree = NULL;
+ guint32 structId;
+ gint iSizeMD = 0;
+
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if ((structId == MQ_STRUCTID_MD || structId == MQ_STRUCTID_MD_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
+ {
+ guint32 iVersionMD = 0;
+ iVersionMD = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ /* Compute length according to version */
+ switch (iVersionMD)
+ {
+ case 1: iSizeMD = 324; break;
+ case 2: iSizeMD = 364; break;
+ }
+
+ if (iSizeMD != 0 && tvb_length_remaining(tvb, offset) >= iSizeMD)
+ {
+ tMsgProps->iOffsetEncoding = offset + 24;
+ tMsgProps->iOffsetCcsid = offset + 28;
+ tMsgProps->iOffsetFormat = offset + 32;
+ if (tree)
+ {
+ proto_item *ti = NULL;
+ ti = proto_tree_add_text(tree, tvb, offset, iSizeMD, MQ_TEXT_MD);
+ mq_tree = proto_item_add_subtree(ti, ett_mq_md);
+
+ proto_tree_add_item(mq_tree, hf_mq_md_structid, tvb, offset, 4, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_report, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_msgtype, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_expiry, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_feedback, tvb, offset + 20, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_encoding, tvb, offset + 24, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_ccsid, tvb, offset + 28, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_format, tvb, offset + 32, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_priority, tvb, offset + 40, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_persistence, tvb, offset + 44, 4, int_rep);
+ 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_backountcount, tvb, offset + 96, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_replytoq, tvb, offset + 100, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_replytoqmgr, tvb, offset + 148, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_userid, tvb, offset + 196, 12, string_rep);
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_putappltype, tvb, offset + 272, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_putapplname, tvb, offset + 276, 28, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_putdate, tvb, offset + 304, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_puttime, tvb, offset + 312, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_applorigindata, tvb, offset + 320, 4, string_rep);
+
+ if (iVersionMD >= 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 352, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 356, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_originallength, tvb, offset + 360, 4, int_rep);
+ }
+ }
+ }
+ }
+ }
+ return iSizeMD;
}
static gint
dissect_mq_or(tvbuff_t *tvb, proto_tree *tree, int string_rep, gint offset, gint iNbrRecords, gint offsetOR)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- 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++)
- {
- ti = proto_tree_add_text(tree, tvb, offset + iOffsetOR, 96, MQ_TEXT_OR);
- mq_tree = proto_item_add_subtree(ti, ett_mq_or);
- proto_tree_add_item(mq_tree, hf_mq_or_objname, tvb, offset + iOffsetOR, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_or_objqmgrname, tvb, offset + iOffsetOR + 48, 48, string_rep);
- iOffsetOR += 96;
- }
- }
- }
- else iSizeOR = 0;
- }
- return iSizeOR;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ 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++)
+ {
+ ti = proto_tree_add_text(tree, tvb, offset + iOffsetOR, 96, MQ_TEXT_OR);
+ mq_tree = proto_item_add_subtree(ti, ett_mq_or);
+ proto_tree_add_item(mq_tree, hf_mq_or_objname, tvb, offset + iOffsetOR, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_or_objqmgrname, tvb, offset + iOffsetOR + 48, 48, string_rep);
+ iOffsetOR += 96;
+ }
+ }
+ }
+ else iSizeOR = 0;
+ }
+ return iSizeOR;
}
static gint
dissect_mq_rr(tvbuff_t *tvb, proto_tree *tree, gint int_rep, gint offset, gint iNbrRecords, gint offsetRR)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- 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++)
- {
- ti = proto_tree_add_text(tree, tvb, offset + iOffsetRR, 8, MQ_TEXT_RR);
- mq_tree = proto_item_add_subtree(ti, ett_mq_rr);
- proto_tree_add_item(mq_tree, hf_mq_rr_completioncode, tvb, offset + iOffsetRR, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_rr_reasoncode, tvb, offset + iOffsetRR + 4, 4, int_rep);
- iOffsetRR += 8;
- }
- }
- }
- else iSizeRR = 0;
- }
- return iSizeRR;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ 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++)
+ {
+ ti = proto_tree_add_text(tree, tvb, offset + iOffsetRR, 8, MQ_TEXT_RR);
+ mq_tree = proto_item_add_subtree(ti, ett_mq_rr);
+ proto_tree_add_item(mq_tree, hf_mq_rr_completioncode, tvb, offset + iOffsetRR, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_rr_reasoncode, tvb, offset + iOffsetRR + 4, 4, int_rep);
+ iOffsetRR += 8;
+ }
+ }
+ }
+ else iSizeRR = 0;
+ }
+ return iSizeRR;
}
static gint
dissect_mq_pmr(tvbuff_t *tvb, proto_tree *tree, gint int_rep, gint offset, gint iNbrRecords, gint offsetPMR, guint32 recFlags)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- 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)
- {
- iSizePMR = iNbrRecords * iSizePMR1;
- if (tvb_length_remaining(tvb, offset) >= iSizePMR)
- {
- if (tree)
- {
- gint iOffsetPMR = 0;
- gint iRecord = 0;
- for (iRecord = 0; iRecord < iNbrRecords; iRecord++)
- {
- ti = proto_tree_add_text(tree, tvb, offset + iOffsetPMR, iSizePMR1, MQ_TEXT_PMR);
- 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, int_rep);
- 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;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ 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)
+ {
+ iSizePMR = iNbrRecords * iSizePMR1;
+ if (tvb_length_remaining(tvb, offset) >= iSizePMR)
+ {
+ if (tree)
+ {
+ gint iOffsetPMR = 0;
+ gint iRecord = 0;
+ for (iRecord = 0; iRecord < iNbrRecords; iRecord++)
+ {
+ ti = proto_tree_add_text(tree, tvb, offset + iOffsetPMR, iSizePMR1, MQ_TEXT_PMR);
+ 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, int_rep);
+ 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_gmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint int_rep, gint string_rep, gint offset)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- guint32 structId;
- gint iSizeGMO = 0;
-
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if ((structId == MQ_STRUCTID_GMO || structId == MQ_STRUCTID_GMO_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
- {
- guint32 iVersionGMO = 0;
- iVersionGMO = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- /* Compute length according to version */
- switch (iVersionGMO)
- {
- case 1: iSizeGMO = 72; break;
- case 2: iSizeGMO = 80; break;
- case 3: iSizeGMO = 100; break;
- }
-
- if (iSizeGMO != 0 && tvb_length_remaining(tvb, offset) >= iSizeGMO)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sQueue;
- sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 24, 48, string_rep);
- if (strip_trailing_blanks(sQueue, 48) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
- }
- }
-
- if (tree)
- {
- ti = proto_tree_add_text(tree, tvb, offset, iSizeGMO, 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_options, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_waitinterval, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_signal1, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_signal2, tvb, offset + 20, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_gmo_resolvedqname, tvb, offset + 24, 48, string_rep);
-
- if (iVersionGMO >= 2)
- {
- proto_tree_add_item(mq_tree, hf_mq_gmo_matchoptions, tvb, offset + 72, 4, ENC_BIG_ENDIAN);
- 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_segmentstatus, 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 (iVersionGMO >= 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_returnedlength, tvb, offset + 96, 4, int_rep);
- }
- }
- }
- }
- }
- return iSizeGMO;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ guint32 structId;
+ gint iSizeGMO = 0;
+
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if ((structId == MQ_STRUCTID_GMO || structId == MQ_STRUCTID_GMO_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
+ {
+ guint32 iVersionGMO = 0;
+ iVersionGMO = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ /* Compute length according to version */
+ switch (iVersionGMO)
+ {
+ case 1: iSizeGMO = 72; break;
+ case 2: iSizeGMO = 80; break;
+ case 3: iSizeGMO = 100; break;
+ }
+
+ if (iSizeGMO != 0 && tvb_length_remaining(tvb, offset) >= iSizeGMO)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sQueue;
+ sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 24, 48, string_rep);
+ if (strip_trailing_blanks(sQueue, 48) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
+ }
+ }
+
+ if (tree)
+ {
+ ti = proto_tree_add_text(tree, tvb, offset, iSizeGMO, 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_options, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_waitinterval, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_signal1, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_signal2, tvb, offset + 20, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_gmo_resolvedqname, tvb, offset + 24, 48, string_rep);
+
+ if (iVersionGMO >= 2)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_gmo_matchoptions, tvb, offset + 72, 4, ENC_BIG_ENDIAN);
+ 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_segmentstatus, 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 (iVersionGMO >= 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_returnedlength, tvb, offset + 96, 4, int_rep);
+ }
+ }
+ }
+ }
+ }
+ return iSizeGMO;
}
static gint
dissect_mq_pmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint int_rep, gint string_rep, gint offset, gint* iDistributionListSize)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- guint32 structId;
- gint iSizePMO = 0;
-
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if ((structId == MQ_STRUCTID_PMO || structId == MQ_STRUCTID_PMO_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
- {
- guint32 iVersionPMO = 0;
- iVersionPMO = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- /* Compute length according to version */
- switch (iVersionPMO)
- {
- case 1: iSizePMO = 128; break;
- case 2: iSizePMO = 152;break;
- }
-
- if (iSizePMO != 0 && tvb_length_remaining(tvb, offset) >= iSizePMO)
- {
- gint iNbrRecords = 0;
- guint32 iRecFlags = 0;
- if (iVersionPMO >= 2)
- {
- iNbrRecords = tvb_get_guint32_endian(tvb, offset + 128, int_rep);
- iRecFlags = tvb_get_guint32_endian(tvb, offset + 132, int_rep);
- }
-
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sQueue;
- sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 32, 48, string_rep);
- if (strip_trailing_blanks(sQueue, 48) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
- }
- }
-
- if (tree)
- {
- ti = proto_tree_add_text(tree, tvb, offset, iSizePMO, 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_options, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_timeout, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_context, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_knowndestcount, tvb, offset + 20, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_unknowndestcount, tvb, offset + 24, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_invaliddestcount, tvb, offset + 28, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_resolvedqname, tvb, offset + 32, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_resolvedqmgrname, tvb, offset + 80, 48, string_rep);
-
- if (iVersionPMO >= 2)
- {
- proto_tree_add_item(mq_tree, hf_mq_pmo_recspresent, tvb, offset + 128, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecfields, tvb, offset + 132, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecoffset, tvb, offset + 136, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_responserecoffset, tvb, offset + 140, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecptr, tvb, offset + 144, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_pmo_responserecptr, tvb, offset + 148, 4, int_rep);
- }
-
- }
- if (iNbrRecords > 0)
- {
- gint iOffsetPMR = 0;
- gint iOffsetRR = 0;
- gint iSizePMRRR = 0;
-
- *iDistributionListSize = iNbrRecords;
- iOffsetPMR = tvb_get_guint32_endian(tvb, offset + 136, int_rep);
- iOffsetRR = tvb_get_guint32_endian(tvb, offset + 140, int_rep);
- if ((iSizePMRRR = dissect_mq_pmr(tvb, tree, int_rep, offset + iSizePMO, iNbrRecords, iOffsetPMR, iRecFlags)) != 0)
- iSizePMO += iSizePMRRR;
- if ((iSizePMRRR = dissect_mq_rr(tvb, tree, int_rep, offset + iSizePMO, iNbrRecords, iOffsetRR)) != 0)
- iSizePMO += iSizePMRRR;
- }
- }
- }
- }
- return iSizePMO;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ guint32 structId;
+ gint iSizePMO = 0;
+
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if ((structId == MQ_STRUCTID_PMO || structId == MQ_STRUCTID_PMO_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
+ {
+ guint32 iVersionPMO = 0;
+ iVersionPMO = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ /* Compute length according to version */
+ switch (iVersionPMO)
+ {
+ case 1: iSizePMO = 128; break;
+ case 2: iSizePMO = 152;break;
+ }
+
+ if (iSizePMO != 0 && tvb_length_remaining(tvb, offset) >= iSizePMO)
+ {
+ gint iNbrRecords = 0;
+ guint32 iRecFlags = 0;
+ if (iVersionPMO >= 2)
+ {
+ iNbrRecords = tvb_get_guint32_endian(tvb, offset + 128, int_rep);
+ iRecFlags = tvb_get_guint32_endian(tvb, offset + 132, int_rep);
+ }
+
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sQueue;
+ sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 32, 48, string_rep);
+ if (strip_trailing_blanks(sQueue, 48) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Q=%s", sQueue);
+ }
+ }
+
+ if (tree)
+ {
+ ti = proto_tree_add_text(tree, tvb, offset, iSizePMO, 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_options, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_timeout, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_context, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_knowndestcount, tvb, offset + 20, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_unknowndestcount, tvb, offset + 24, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_invaliddestcount, tvb, offset + 28, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_resolvedqname, tvb, offset + 32, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_resolvedqmgrname, tvb, offset + 80, 48, string_rep);
+
+ if (iVersionPMO >= 2)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_pmo_recspresent, tvb, offset + 128, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecfields, tvb, offset + 132, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecoffset, tvb, offset + 136, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_responserecoffset, tvb, offset + 140, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_putmsgrecptr, tvb, offset + 144, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_pmo_responserecptr, tvb, offset + 148, 4, int_rep);
+ }
+
+ }
+ if (iNbrRecords > 0)
+ {
+ gint iOffsetPMR = 0;
+ gint iOffsetRR = 0;
+ gint iSizePMRRR = 0;
+
+ *iDistributionListSize = iNbrRecords;
+ iOffsetPMR = tvb_get_guint32_endian(tvb, offset + 136, int_rep);
+ iOffsetRR = tvb_get_guint32_endian(tvb, offset + 140, int_rep);
+ if ((iSizePMRRR = dissect_mq_pmr(tvb, tree, int_rep, offset + iSizePMO, iNbrRecords, iOffsetPMR, iRecFlags)) != 0)
+ iSizePMO += iSizePMRRR;
+ if ((iSizePMRRR = dissect_mq_rr(tvb, tree, int_rep, offset + iSizePMO, iNbrRecords, iOffsetRR)) != 0)
+ iSizePMO += iSizePMRRR;
+ }
+ }
+ }
+ }
+ return iSizePMO;
}
static gint
dissect_mq_xid(tvbuff_t *tvb, proto_tree *tree, gint int_rep, gint offset)
{
- proto_tree *mq_tree = NULL;
- proto_item *ti = NULL;
- 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)
- {
- 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_xa_xid_globalxid_length, tvb, offset + 4, 1, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq_length, tvb, offset + 5, 1, int_rep);
- 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;
+ proto_tree *mq_tree = NULL;
+ proto_item *ti = NULL;
+ 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)
+ {
+ 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_xa_xid_globalxid_length, tvb, offset + 4, 1, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_xa_xid_brq_length, tvb, offset + 5, 1, int_rep);
+ 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 void
dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- proto_tree *mq_tree = NULL;
- proto_tree *mqroot_tree = NULL;
- proto_item *ti = NULL;
- gint offset = 0;
- guint32 structId = MQ_STRUCTID_NULL;
- guint8 opcode;
- guint32 iSegmentLength = 0;
- guint32 iSizePayload = 0;
- gint iSizeMD_gbl = 0;
- gint int_rep = ENC_BIG_ENDIAN;
- gint string_rep = ENC_UTF_8|ENC_NA;
- gboolean bPayload = FALSE;
- gboolean bEBCDIC = FALSE;
- gint iDistributionListSize = 0;
- struct mq_msg_properties tMsgProps;
- static gint iPreviousFrameNumber = -1;
-
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- /* This is a trick to know whether this is the first PDU in this packet or not */
- if (iPreviousFrameNumber != (gint) pinfo->fd->num)
- col_clear(pinfo->cinfo, COL_INFO);
- else
- col_append_str(pinfo->cinfo, COL_INFO, " | ");
- }
- iPreviousFrameNumber = pinfo->fd->num;
- if (tvb_length(tvb) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if ((structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 28)
- {
- /* An MQ packet always starts with this structure*/
- gint iSizeTSH = 28;
- guint8 iControlFlags = 0;
- if (structId == MQ_STRUCTID_TSH_EBCDIC) {
- bEBCDIC = TRUE;
- string_rep = ENC_EBCDIC|ENC_NA;
- }
- opcode = tvb_get_guint8(tvb, offset + 9);
- int_rep = (tvb_get_guint8(tvb, offset + 8) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN);
- iSegmentLength = tvb_get_ntohl(tvb, offset + 4);
- iControlFlags = tvb_get_guint8(tvb, offset + 10);
-
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- col_append_str(pinfo->cinfo, COL_INFO, val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
- }
-
- if (tree)
- {
- ti = proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA);
- proto_item_append_text(ti, " (%s)", val_to_str(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);
-
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_tsh_packetlength, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(mq_tree, hf_mq_tsh_byteorder, tvb, offset + 8, 1, ENC_BIG_ENDIAN);
-
- proto_tree_add_item(mq_tree, hf_mq_tsh_opcode, tvb, offset + 9, 1, ENC_BIG_ENDIAN);
-
- /* Control flags */
- {
- proto_tree *mq_tree_sub = NULL;
-
- ti = proto_tree_add_item(mq_tree, hf_mq_tsh_controlflags, tvb, offset + 10, 1, ENC_BIG_ENDIAN);
- mq_tree_sub = proto_item_add_subtree(ti, ett_mq_tsh_tcf);
-
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_dlq, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_reqacc, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_last, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_first, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_closechann, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_reqclose, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_error, tvb, offset + 10, 1, iControlFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_confirmreq, tvb, offset + 10, 1, iControlFlags);
- }
-
- proto_tree_add_item(mq_tree, hf_mq_tsh_reserved, tvb, offset + 11, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(mq_tree, hf_mq_tsh_luwid, tvb, offset + 12, 8, ENC_NA);
- proto_tree_add_item(mq_tree, hf_mq_tsh_encoding, tvb, offset + 20, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_tsh_ccsid, tvb, offset + 24, 2, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_tsh_padding, tvb, offset + 26, 2, ENC_BIG_ENDIAN);
- }
- offset += iSizeTSH;
-
- /* Now dissect the embedded structures */
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if (((iControlFlags & MQ_TCF_FIRST) != 0) || opcode < 0x80)
- {
- /* First MQ segment (opcodes below 0x80 never span several TSH) */
- gint iSizeAPI = 16;
- if (opcode >= 0x80 && opcode <= 0x9F && tvb_length_remaining(tvb, offset) >= 16)
- {
- guint32 iReturnCode = 0;
- iReturnCode = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- 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_replylength, tvb, offset, 4, ENC_BIG_ENDIAN);
- proto_tree_add_item(mq_tree, hf_mq_api_completioncode, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_api_reasoncode, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_api_objecthandle, tvb, offset + 12, 4, int_rep);
- }
- offset += iSizeAPI;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((structId == MQ_STRUCTID_MSH || structId == MQ_STRUCTID_MSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 20)
- {
- gint iSizeMSH = 20;
- iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, int_rep);
- bPayload = TRUE;
- if (tree)
- {
- ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeMSH, 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_msh_seqnum, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_msh_datalength, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_msh_unknown1, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_msh_msglength, tvb, offset + 16, 4, int_rep);
- }
- offset += iSizeMSH;
- }
- else if (opcode == MQ_TST_STATUS && tvb_length_remaining(tvb, offset) >= 8)
- {
- /* Some status are 28 bytes long and some are 36 bytes long */
- guint32 iStatus = 0;
- gint iStatusLength = 0;
- iStatus = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- iStatusLength = tvb_get_guint32_endian(tvb, offset, int_rep);
-
- if (tvb_length_remaining(tvb, offset) >= iStatusLength)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- if (iStatus != 0)
- col_append_fstr(pinfo->cinfo, COL_INFO, ": Code=%s", val_to_str(iStatus, mq_status_vals, "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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_status_code, tvb, offset + 4, 4, int_rep);
-
- if (iStatusLength >= 12)
- proto_tree_add_item(mq_tree, hf_mq_status_value, tvb, offset + 8, 4, int_rep);
- }
- offset += iStatusLength;
- }
- }
- else if (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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_ping_buffer, tvb, offset + 4, -1, ENC_NA);
- }
- offset = tvb_length(tvb);
- }
- else if (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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_reset_seqnum, tvb, offset + 4, 4, int_rep);
- }
- offset = tvb_length(tvb);
- }
- else if (opcode == MQ_TST_MQCONN && tvb_length_remaining(tvb, offset) > 0)
- {
- gint iSizeCONN = 0;
- /*iSizeCONN = ((iVersionID == 4 || iVersionID == 6) ? 120 : 112);*/ /* guess */
- /* The iVersionID is available in the previous ID segment, we should keep a state
- * Instead we rely on the segment length announced in the TSH */
- /* The MQCONN structure is special because it does not start with a structid */
- iSizeCONN = iSegmentLength - iSizeTSH - iSizeAPI;
- if (iSizeCONN != 112 && iSizeCONN != 120) iSizeCONN = 0;
-
- if (iSizeCONN != 0 && tvb_length_remaining(tvb, offset) >= iSizeCONN)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sApplicationName;
- guint8* sQueueManager;
- sApplicationName = tvb_get_ephemeral_string_enc(tvb, offset + 48, 28, string_rep);
- if (strip_trailing_blanks(sApplicationName, 28) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, ": App=%s", sApplicationName);
- }
- sQueueManager = tvb_get_ephemeral_string_enc(tvb, offset, 48, string_rep);
- if (strip_trailing_blanks(sQueueManager, 48) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQueueManager);
- }
- }
-
-
- 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);
-
- proto_tree_add_item(mq_tree, hf_mq_conn_queuemanager, tvb, offset, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_conn_appname, tvb, offset + 48, 28, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_conn_apptype, tvb, offset + 76, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_conn_acttoken, tvb, offset + 80, 32, ENC_NA);
-
- if (iSizeCONN >= 120)
- {
- proto_tree_add_item(mq_tree, hf_mq_conn_version, tvb, offset + 112, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_conn_options, tvb, offset + 116, 4, int_rep);
- }
- }
- offset += iSizeCONN;
- }
- }
- else if ((opcode == MQ_TST_MQINQ || opcode == MQ_TST_MQINQ_REPLY || 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 = 0;
- gint iNbIntegers = 0;
- gint iCharLen = 0;
- gint iOffsetINQ = 0;
- gint iSelector = 0;
-
- iNbSelectors = tvb_get_guint32_endian(tvb, offset, int_rep);
- iNbIntegers = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- iCharLen = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
-
- 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_inq_charlen, tvb, offset + 8, 4, int_rep);
- }
- 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, int_rep);
- }
- }
- iOffsetINQ += iNbSelectors * 4;
- if (opcode == MQ_TST_MQINQ_REPLY || opcode == MQ_TST_MQSET)
- {
- gint iSizeINQValues = 0;
- iSizeINQValues = iNbIntegers * 4 + iCharLen;
- if (tvb_length_remaining(tvb, offset + iOffsetINQ) >= iSizeINQValues)
- {
- gint iInteger = 0;
- if (tree)
- {
- for (iInteger = 0; iInteger < iNbIntegers; iInteger++)
- {
- proto_tree_add_item(mq_tree, hf_mq_inq_intvalue, tvb, offset + iOffsetINQ + iInteger * 4, 4, int_rep);
- }
- }
- iOffsetINQ += iNbIntegers * 4;
- if (iCharLen != 0)
- {
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_inq_charvalues, tvb, offset + iOffsetINQ, iCharLen, string_rep);
- }
- }
- }
- }
- }
- offset += tvb_length(tvb);
- }
- else if ((opcode == MQ_TST_SPI || opcode == MQ_TST_SPI_REPLY) && tvb_length_remaining(tvb, offset) >= 12)
- {
- gint iOffsetSPI = 0;
- guint32 iSpiVerb = 0;
-
- iSpiVerb = tvb_get_guint32_endian(tvb, offset, int_rep);
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_length, tvb, offset + 8, 4, int_rep);
- }
-
- offset += 12;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- if ((structId == MQ_STRUCTID_SPQU || structId == MQ_STRUCTID_SPAU_EBCDIC
- || structId == MQ_STRUCTID_SPPU || structId == MQ_STRUCTID_SPPU_EBCDIC
- || structId == MQ_STRUCTID_SPGU || structId == MQ_STRUCTID_SPGU_EBCDIC
- || structId == MQ_STRUCTID_SPAU || structId == MQ_STRUCTID_SPAU_EBCDIC)
- && tvb_length_remaining(tvb, offset) >= 12)
- {
- gint iSizeSPIMD = 0;
- if (tree)
- {
- guint8* sStructId;
- sStructId = tvb_get_ephemeral_string(tvb, offset, 4);
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, int_rep);
- }
- offset += 12;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
-
- if ((iSizeSPIMD = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
- {
- gint iSizeGMO = 0;
- gint iSizePMO = 0;
- offset += iSizeSPIMD;
-
- if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset)) != 0)
- {
- offset += iSizeGMO;
- }
- else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset, &iDistributionListSize)) != 0)
- {
- offset += iSizePMO;
- }
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
-
- if ((structId == MQ_STRUCTID_SPQO || structId == MQ_STRUCTID_SPQO_EBCDIC
- || structId == MQ_STRUCTID_SPQI || structId == MQ_STRUCTID_SPQI_EBCDIC
- || structId == MQ_STRUCTID_SPPO || structId == MQ_STRUCTID_SPPO_EBCDIC
- || structId == MQ_STRUCTID_SPPI || structId == MQ_STRUCTID_SPPI_EBCDIC
- || structId == MQ_STRUCTID_SPGO || structId == MQ_STRUCTID_SPGO_EBCDIC
- || structId == MQ_STRUCTID_SPGI || structId == MQ_STRUCTID_SPGI_EBCDIC
- || structId == MQ_STRUCTID_SPAO || structId == MQ_STRUCTID_SPAO_EBCDIC
- || structId == MQ_STRUCTID_SPAI || structId == MQ_STRUCTID_SPAI_EBCDIC)
- && tvb_length_remaining(tvb, offset) >= 12)
- {
- if (tree)
- {
- /* Dissect the common part of these structures */
- guint8* sStructId;
- sStructId = tvb_get_ephemeral_string(tvb, offset, 4);
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, int_rep);
- }
-
- if (structId == MQ_STRUCTID_SPQO && 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, int_rep);
- iVerbNumber = tvb_get_guint32_endian(tvb, offset + 12, int_rep);
-
- 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinoutversion, tvb, iOffsetSPI + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinversion, tvb, iOffsetSPI + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxoutversion, tvb, iOffsetSPI + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spqo_flags, tvb, iOffsetSPI + 16, 4, int_rep);
- iOffsetSPI += 20;
- }
- offset += iVerbNumber * 20 + 16;
- }
- }
- }
- else if (structId == MQ_STRUCTID_SPAI && tvb_length_remaining(tvb, offset) >= 136)
- {
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_spi_spai_mode, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown1, tvb, offset + 16, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown2, tvb, offset + 64, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spai_msgid, tvb, offset + 112, 24, string_rep);
- }
- offset += 136;
- }
- else if (structId == MQ_STRUCTID_SPGI && tvb_length_remaining(tvb, offset) >= 24)
- {
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchsize, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchint, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_spi_spgi_maxmsgsize, tvb, offset + 20, 4, int_rep);
- }
- offset += 24;
- }
- else if ((structId == MQ_STRUCTID_SPGO || structId == MQ_STRUCTID_SPPI) && tvb_length_remaining(tvb, offset) >= 20)
- {
- if (tree)
- {
- /* Options flags */
- {
- proto_tree *mq_tree_sub = NULL;
- gint iOptionsFlags;
-
- ti = proto_tree_add_item(mq_tree, hf_mq_spi_spgo_options, tvb, offset + 12, 4, int_rep);
- mq_tree_sub = proto_item_add_subtree(ti, ett_mq_spi_options);
- iOptionsFlags = tvb_get_guint32_endian(tvb, offset + 12, int_rep);
-
- proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_deferred, tvb, offset + 12, 4, iOptionsFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_syncpoint, tvb, offset + 12, 4, iOptionsFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_blank, tvb, offset + 12, 4, iOptionsFlags);
- }
- proto_tree_add_item(mq_tree, hf_mq_spi_spgo_size, tvb, offset + 16, 4, int_rep);
- }
- iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, int_rep);
- offset += 20;
- bPayload = TRUE;
- }
- else
- {
- offset += 12;
- }
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- }
- }
- else if ((opcode >= 0xA0 && 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(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, int_rep);
-
- /* Transaction Manager flags */
- {
- proto_tree *mq_tree_sub = NULL;
- guint32 iTMFlags;
-
- ti = proto_tree_add_item(mq_tree, hf_mq_xa_tmflags, tvb, offset + 8, 4, int_rep);
- mq_tree_sub = proto_item_add_subtree(ti, ett_mq_xa_tmflags);
- iTMFlags = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
-
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_onephase, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_fail, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_resume, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_success, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_suspend, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_startrscan, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_endrscan, tvb, offset + 8, 4, iTMFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_join, tvb, offset + 8, 4, iTMFlags);
- }
-
- proto_tree_add_item(mq_tree, hf_mq_xa_rmid, tvb, offset + 12, 4, int_rep);
- }
- offset += 16;
- if (opcode == MQ_TST_XA_START || opcode == MQ_TST_XA_END || opcode == MQ_TST_XA_PREPARE
- || opcode == MQ_TST_XA_COMMIT || opcode == MQ_TST_XA_ROLLBACK || opcode == MQ_TST_XA_FORGET
- || opcode == MQ_TST_XA_COMPLETE)
- {
- gint iSizeXid = 0;
- if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, int_rep, offset)) != 0)
- offset += iSizeXid;
- }
- else if ((opcode == MQ_TST_XA_OPEN || 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, string_rep);
- }
- }
- offset += 1 + iXAInfoLength;
- }
- else if ((opcode == MQ_TST_XA_RECOVER || opcode == MQ_TST_XA_RECOVER_REPLY)
- && tvb_length_remaining(tvb, offset) >= 4)
- {
- gint iNbXid = 0;
- iNbXid = tvb_get_guint32_endian(tvb, offset, int_rep);
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_xa_count, tvb, offset, 4, int_rep);
- }
- offset += 4;
- if (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, int_rep, offset)) != 0)
- offset += iSizeXid;
- else
- break;
- }
- }
- }
- }
- else if ((structId == MQ_STRUCTID_ID || structId == MQ_STRUCTID_ID_EBCDIC) && tvb_length_remaining(tvb, offset) >= 5)
- {
- guint8 iVersionID = 0;
- gint iSizeID = 0;
- iVersionID = tvb_get_guint8(tvb, offset + 4);
- iSizeID = (iVersionID < 4 ? 44 : 104); /* guess */
- /* actually 102 but must be aligned to multiple of 4 */
-
- if (iSizeID != 0 && tvb_length_remaining(tvb, offset) >= iSizeID)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sChannel;
- sChannel = tvb_get_ephemeral_string_enc(tvb, offset + 24, 20, string_rep);
- if (strip_trailing_blanks(sChannel, 20) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, ": CHL=%s", sChannel);
- }
- }
-
- if (tree)
- {
- ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeID, MQ_TEXT_ID);
- mq_tree = proto_item_add_subtree(ti, ett_mq_id);
-
- proto_tree_add_item(mq_tree, hf_mq_id_structid, tvb, offset, 4, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_level, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
-
- /* ID flags */
- {
- proto_tree *mq_tree_sub = NULL;
- guint8 iIDFlags;
-
- ti = proto_tree_add_item(mq_tree, hf_mq_id_flags, tvb, offset + 5, 1, ENC_BIG_ENDIAN);
- mq_tree_sub = proto_item_add_subtree(ti, ett_mq_id_icf);
- iIDFlags = tvb_get_guint8(tvb, offset + 5);
-
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_runtime, tvb, offset + 5, 1, iIDFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_svrsec, tvb, offset + 5, 1, iIDFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_mqreq, tvb, offset + 5, 1, iIDFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_splitmsg, tvb, offset + 5, 1, iIDFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_convcap, tvb, offset + 5, 1, iIDFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_msgseq, tvb, offset + 5, 1, iIDFlags);
- }
-
- proto_tree_add_item(mq_tree, hf_mq_id_unknown2, tvb, offset + 6, 1, ENC_BIG_ENDIAN);
-
- /* Error flags */
- {
- proto_tree *mq_tree_sub = NULL;
- guint8 iErrorFlags;
-
- ti = proto_tree_add_item(mq_tree, hf_mq_id_ieflags, tvb, offset + 7, 1, ENC_BIG_ENDIAN);
- mq_tree_sub = proto_item_add_subtree(ti, ett_mq_id_ief);
- iErrorFlags = tvb_get_guint8(tvb, offset + 7);
-
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_hbint, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_seqwrap, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxmsgpb, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxmsgsz, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_fap, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxtrsz, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_enc, tvb, offset + 7, 1, iErrorFlags);
- proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_ccsid, tvb, offset + 7, 1, iErrorFlags);
- }
-
- proto_tree_add_item(mq_tree, hf_mq_id_unknown4, tvb, offset + 8, 2, ENC_BIG_ENDIAN);
- proto_tree_add_item(mq_tree, hf_mq_id_maxmsgperbatch, tvb, offset + 10, 2, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_maxtransmissionsize, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_maxmsgsize, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_sequencewrapvalue, tvb, offset + 20, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_channel, tvb, offset + 24, 20, string_rep);
- }
-
- if (iVersionID >= 4)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sQueueManager;
- sQueueManager = tvb_get_ephemeral_string_enc(tvb, offset + 48, 48, string_rep);
- if (strip_trailing_blanks(sQueueManager,48) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQueueManager);
- }
- }
-
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_id_capflags, tvb, offset + 44, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(mq_tree, hf_mq_id_unknown5, tvb, offset + 45, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(mq_tree, hf_mq_id_ccsid, tvb, offset + 46, 2, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_queuemanager, tvb, offset + 48, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_id_heartbeatinterval, tvb, offset + 96, 4, int_rep);
- }
-
- }
- offset += iSizeID;
- }
- }
- else if ((structId == MQ_STRUCTID_UID || structId == MQ_STRUCTID_UID_EBCDIC) && tvb_length_remaining(tvb, offset) > 0)
- {
- gint iSizeUID = 0;
- /* 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)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sUserId;
- sUserId = tvb_get_ephemeral_string_enc(tvb, offset + 4, 12, string_rep);
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_uid_userid, tvb, offset + 4, 12, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_uid_password, tvb, offset + 16, 12, string_rep);
- }
-
- if (iSizeUID == 132)
- {
- if (tree)
- {
- proto_tree_add_item(mq_tree, hf_mq_uid_longuserid, tvb, offset + 28, 64, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_uid_securityid, tvb, offset + 92, 40, ENC_NA);
- }
- }
- offset += iSizeUID;
- }
- }
- if ((structId == MQ_STRUCTID_OD || structId == MQ_STRUCTID_OD_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
- {
- /* The OD struct can be present in several messages at different levels */
- gint iSizeOD = 0;
- guint32 iVersionOD = 0;
- iVersionOD = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
- /* Compute length according to version */
- switch (iVersionOD)
- {
- case 1: iSizeOD = 168; break;
- case 2: iSizeOD = 200; break;
- case 3: iSizeOD = 336; break;
- }
-
- if (iSizeOD != 0 && tvb_length_remaining(tvb, offset) >= iSizeOD)
- {
- gint iNbrRecords = 0;
- if (iVersionOD >= 2)
- iNbrRecords = tvb_get_guint32_endian(tvb, offset + 168, int_rep);
-
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- guint8* sQueue;
- sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 12, 48, string_rep);
- if (strip_trailing_blanks(sQueue,48) != 0)
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sQueue);
- }
- }
-
- if (tree)
- {
- ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeOD, 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_objecttype, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_objectname, tvb, offset + 12, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_objectqmgrname, tvb, offset + 60, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_dynamicqname, tvb, offset + 108, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_alternateuserid, tvb, offset + 156, 12, string_rep);
-
- if (iVersionOD >= 2)
- {
- proto_tree_add_item(mq_tree, hf_mq_od_recspresent, tvb, offset + 168, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_knowndestcount, tvb, offset + 172, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_unknowndestcount, tvb, offset + 176, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_invaliddestcount, tvb, offset + 180, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_objectrecoffset, tvb, offset + 184, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_responserecoffset, tvb, offset + 188, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_objectrecptr, tvb, offset + 192, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_responserecptr, tvb, offset + 196, 4, int_rep);
- }
-
- if (iVersionOD >= 3)
- {
- proto_tree_add_item(mq_tree, hf_mq_od_alternatesecurityid, tvb, offset + 200, 40, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_resolvedqname, tvb, offset + 240, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_od_resolvedqmgrname, tvb, offset + 288, 48, string_rep);
- }
-
- }
- offset += iSizeOD;
-
- if (iNbrRecords > 0)
- {
- gint iOffsetOR = 0;
- gint iOffsetRR = 0;
- gint iSizeORRR = 0;
-
- iDistributionListSize = iNbrRecords;
- iOffsetOR = tvb_get_guint32_endian(tvb, offset - iSizeOD + 184, int_rep);
- iOffsetRR = tvb_get_guint32_endian(tvb, offset - iSizeOD + 188, int_rep);
- if ((iSizeORRR = dissect_mq_or(tvb, mqroot_tree, string_rep, offset, iNbrRecords, iOffsetOR)) != 0)
- offset += iSizeORRR;
- if ((iSizeORRR = dissect_mq_rr(tvb, mqroot_tree, int_rep, offset, iNbrRecords, iOffsetRR)) != 0)
- offset += iSizeORRR;
- }
- }
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((opcode == MQ_TST_MQOPEN || opcode == MQ_TST_MQCLOSE
- || opcode == MQ_TST_MQOPEN_REPLY || opcode == MQ_TST_MQCLOSE_REPLY)
- && tvb_length_remaining(tvb, offset) >= 4)
- {
- 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);
- proto_tree_add_item(mq_tree, hf_mq_open_options, tvb, offset, 4, int_rep);
- }
- offset += 4;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((iSizeMD_gbl = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
- {
- gint iSizeGMO = 0;
- gint iSizePMO = 0;
- offset += iSizeMD_gbl;
-
- if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset)) != 0)
- {
- offset += iSizeGMO;
- bPayload = TRUE;
- }
- else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset, &iDistributionListSize)) != 0)
- {
- offset += iSizePMO;
- bPayload = TRUE;
- }
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- if (bPayload == TRUE)
- {
- iSizePayload = tvb_get_guint32_endian(tvb, offset, int_rep);
- 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, int_rep);
- }
- offset += 4;
- }
- }
- }
- if (iDistributionListSize > 0)
- {
- if (check_col(pinfo->cinfo, COL_INFO))
- 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 iSizeMD = 0;
- structId = tvb_get_ntohl(tvb, offset);
-
- if ((structId == MQ_STRUCTID_XQH || structId == 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_xqh_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_xqh_remoteq, tvb, offset + 8, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_xqh_remoteqmgr, tvb, offset + 56, 48, string_rep);
- }
- offset += iSizeXQH;
- iHeadersLength += iSizeXQH;
-
- if ((iSizeMD = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
- {
- offset += iSizeMD;
- iHeadersLength += iSizeMD;
- }
-
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((structId == MQ_STRUCTID_DH || structId == 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, int_rep);
- iRecFlags = tvb_get_guint32_endian(tvb, offset + 32, int_rep);
- tMsgProps.iOffsetEncoding = offset + 12;
- tMsgProps.iOffsetCcsid = offset + 16;
- tMsgProps.iOffsetFormat = offset + 20;
-
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecfields, tvb, offset + 32, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dh_recspresent, tvb, offset + 36, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dh_objectrecoffset , tvb, offset + 40, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecoffset, tvb, offset + 44, 4, int_rep);
- }
- 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, int_rep);
- iOffsetPMR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 44, int_rep);
- if ((iSizeORPMR = dissect_mq_or(tvb, mqroot_tree, string_rep, offset, iNbrRecords, iOffsetOR)) != 0)
- {
- offset += iSizeORPMR;
- iHeadersLength += iSizeORPMR;
- }
- if ((iSizeORPMR = dissect_mq_pmr(tvb, mqroot_tree, int_rep, offset, iNbrRecords, iOffsetPMR, iRecFlags)) != 0)
- {
- offset += iSizeORPMR;
- iHeadersLength += iSizeORPMR;
- }
- }
-
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((structId == MQ_STRUCTID_DLH || structId == MQ_STRUCTID_DLH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 172)
- {
- /* if MD.format == MQDEAD */
- gint iSizeDLH = 172;
- tMsgProps.iOffsetEncoding = offset + 108;
- tMsgProps.iOffsetCcsid = offset + 112;
- tMsgProps.iOffsetFormat = offset + 116;
- 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_reason, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_destq, tvb, offset + 12, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_destqmgr, tvb, offset + 60, 48, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_encoding, tvb, offset + 108, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_ccsid, tvb, offset + 112, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_format, tvb, offset + 116, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_putappltype, tvb, offset + 124, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_putapplname, tvb, offset + 128, 28, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_putdate, tvb, offset + 156, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_dlh_puttime, tvb, offset + 164, 8, string_rep);
- }
- offset += iSizeDLH;
- iHeadersLength += iSizeDLH;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((structId == MQ_STRUCTID_MDE || structId == MQ_STRUCTID_MDE_EBCDIC) && tvb_length_remaining(tvb, offset) >= 72)
- {
- /* if MD.format == MQHMDE */
- gint iSizeMDE = 72;
- tMsgProps.iOffsetEncoding = offset + 12;
- tMsgProps.iOffsetCcsid = offset + 16;
- tMsgProps.iOffsetFormat = 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
- 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, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 60, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 64, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_md_originallength, tvb, offset + 68, 4, int_rep);
- }
- offset += iSizeMDE;
- iHeadersLength += iSizeMDE;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- if ((structId == MQ_STRUCTID_CIH || structId == MQ_STRUCTID_CIH_EBCDIC
- || structId == MQ_STRUCTID_IIH || structId == MQ_STRUCTID_IIH_EBCDIC
- || structId == MQ_STRUCTID_RFH || structId == MQ_STRUCTID_RFH_EBCDIC
- || structId == MQ_STRUCTID_RMH || structId == MQ_STRUCTID_RMH_EBCDIC
- || structId == MQ_STRUCTID_WIH || structId == 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, int_rep);
- /* 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)
- {
- tMsgProps.iOffsetEncoding = offset + 12;
- tMsgProps.iOffsetCcsid = offset + 16;
- tMsgProps.iOffsetFormat = offset + 20;
- if (tree)
- {
- ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeHeader, "%s", val_to_str(structId, 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, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
- proto_tree_add_item(mq_tree, hf_mq_head_struct, tvb, offset + 32, iSizeHeader - 32, ENC_NA);
-
- }
- offset += iSizeHeader;
- iHeadersLength += iSizeHeader;
- structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
- }
- }
- }
-
- if (tMsgProps.iOffsetFormat != 0)
- {
- guint8* sFormat = NULL;
- sFormat = tvb_get_ephemeral_string_enc(tvb, tMsgProps.iOffsetFormat, 8, string_rep);
- if (strip_trailing_blanks(sFormat, 8) == 0) sFormat = (guint8*)g_strdup("MQNONE");
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " Fmt=%s", sFormat);
- }
- if (tree)
- {
- proto_item *hidden_item;
- hidden_item = proto_tree_add_string(tree, hf_mq_md_hidden_lastformat, tvb, tMsgProps.iOffsetFormat, 8, (const char*)sFormat);
- PROTO_ITEM_SET_HIDDEN(hidden_item);
- }
- }
- if (check_col(pinfo->cinfo, COL_INFO))
- {
- col_append_fstr(pinfo->cinfo, COL_INFO, " (%d bytes)", iSizePayload - iHeadersLength);
- }
-
- {
- /* Call subdissector for the payload */
- tvbuff_t* next_tvb = NULL;
- void* pd_save;
- struct mqinfo mqinfo;
- /* Format, encoding and character set are "data type" information, not subprotocol information */
- mqinfo.encoding = tvb_get_guint32_endian(tvb, tMsgProps.iOffsetEncoding, int_rep);
- mqinfo.ccsid = tvb_get_guint32_endian(tvb, tMsgProps.iOffsetCcsid, int_rep);
- tvb_memcpy(tvb, mqinfo.format, tMsgProps.iOffsetFormat, 8);
- pd_save = pinfo->private_data;
- pinfo->private_data = &mqinfo;
- next_tvb = tvb_new_subset_remaining(tvb, offset);
- if (!dissector_try_heuristic(mq_heur_subdissector_list, next_tvb, pinfo, tree))
- call_dissector(data_handle, next_tvb, pinfo, tree);
- pinfo->private_data = pd_save;
- }
- }
- offset = tvb_length(tvb);
- }
- /* After all recognised structures have been dissected, process remaining structure*/
- if (tvb_length_remaining(tvb, offset) >= 4)
- {
- structId = tvb_get_ntohl(tvb, offset);
- if (tree)
- {
- proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", val_to_str(structId, 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);
- }
- }
+ proto_tree *mq_tree = NULL;
+ proto_tree *mqroot_tree = NULL;
+ proto_item *ti = NULL;
+ gint offset = 0;
+ guint32 structId = MQ_STRUCTID_NULL;
+ guint8 opcode;
+ guint32 iSegmentLength = 0;
+ guint32 iSizePayload = 0;
+ gint iSizeMD_gbl = 0;
+ gint int_rep = ENC_BIG_ENDIAN;
+ gint string_rep = ENC_UTF_8|ENC_NA;
+ gboolean bPayload = FALSE;
+ gboolean bEBCDIC = FALSE;
+ gint iDistributionListSize = 0;
+ struct mq_msg_properties tMsgProps;
+ static gint iPreviousFrameNumber = -1;
+
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ /* This is a trick to know whether this is the first PDU in this packet or not */
+ if (iPreviousFrameNumber != (gint) pinfo->fd->num)
+ col_clear(pinfo->cinfo, COL_INFO);
+ else
+ col_append_str(pinfo->cinfo, COL_INFO, " | ");
+ }
+ iPreviousFrameNumber = pinfo->fd->num;
+ if (tvb_length(tvb) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if ((structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 28)
+ {
+ /* An MQ packet always starts with this structure*/
+ gint iSizeTSH = 28;
+ guint8 iControlFlags = 0;
+ if (structId == MQ_STRUCTID_TSH_EBCDIC) {
+ bEBCDIC = TRUE;
+ string_rep = ENC_EBCDIC|ENC_NA;
+ }
+ opcode = tvb_get_guint8(tvb, offset + 9);
+ int_rep = (tvb_get_guint8(tvb, offset + 8) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN);
+ iSegmentLength = tvb_get_ntohl(tvb, offset + 4);
+ iControlFlags = tvb_get_guint8(tvb, offset + 10);
+
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ col_append_str(pinfo->cinfo, COL_INFO, val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
+ }
+
+ if (tree)
+ {
+ ti = proto_tree_add_item(tree, proto_mq, tvb, offset, -1, ENC_NA);
+ proto_item_append_text(ti, " (%s)", val_to_str(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);
+
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_tsh_packetlength, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(mq_tree, hf_mq_tsh_byteorder, tvb, offset + 8, 1, ENC_BIG_ENDIAN);
+
+ proto_tree_add_item(mq_tree, hf_mq_tsh_opcode, tvb, offset + 9, 1, ENC_BIG_ENDIAN);
+
+ /* Control flags */
+ {
+ proto_tree *mq_tree_sub = NULL;
+
+ ti = proto_tree_add_item(mq_tree, hf_mq_tsh_controlflags, tvb, offset + 10, 1, ENC_BIG_ENDIAN);
+ mq_tree_sub = proto_item_add_subtree(ti, ett_mq_tsh_tcf);
+
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_dlq, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_reqacc, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_last, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_first, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_closechann, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_reqclose, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_error, tvb, offset + 10, 1, iControlFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_tsh_tcf_confirmreq, tvb, offset + 10, 1, iControlFlags);
+ }
+
+ proto_tree_add_item(mq_tree, hf_mq_tsh_reserved, tvb, offset + 11, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(mq_tree, hf_mq_tsh_luwid, tvb, offset + 12, 8, ENC_NA);
+ proto_tree_add_item(mq_tree, hf_mq_tsh_encoding, tvb, offset + 20, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_tsh_ccsid, tvb, offset + 24, 2, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_tsh_padding, tvb, offset + 26, 2, ENC_BIG_ENDIAN);
+ }
+ offset += iSizeTSH;
+
+ /* Now dissect the embedded structures */
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if (((iControlFlags & MQ_TCF_FIRST) != 0) || opcode < 0x80)
+ {
+ /* First MQ segment (opcodes below 0x80 never span several TSH) */
+ gint iSizeAPI = 16;
+ if (opcode >= 0x80 && opcode <= 0x9F && tvb_length_remaining(tvb, offset) >= 16)
+ {
+ guint32 iReturnCode = 0;
+ iReturnCode = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ 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_replylength, tvb, offset, 4, ENC_BIG_ENDIAN);
+ proto_tree_add_item(mq_tree, hf_mq_api_completioncode, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_api_reasoncode, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_api_objecthandle, tvb, offset + 12, 4, int_rep);
+ }
+ offset += iSizeAPI;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((structId == MQ_STRUCTID_MSH || structId == MQ_STRUCTID_MSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 20)
+ {
+ gint iSizeMSH = 20;
+ iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, int_rep);
+ bPayload = TRUE;
+ if (tree)
+ {
+ ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeMSH, 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_msh_seqnum, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_msh_datalength, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_msh_unknown1, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_msh_msglength, tvb, offset + 16, 4, int_rep);
+ }
+ offset += iSizeMSH;
+ }
+ else if (opcode == MQ_TST_STATUS && tvb_length_remaining(tvb, offset) >= 8)
+ {
+ /* Some status are 28 bytes long and some are 36 bytes long */
+ guint32 iStatus = 0;
+ gint iStatusLength = 0;
+ iStatus = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ iStatusLength = tvb_get_guint32_endian(tvb, offset, int_rep);
+
+ if (tvb_length_remaining(tvb, offset) >= iStatusLength)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ if (iStatus != 0)
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": Code=%s", val_to_str(iStatus, mq_status_vals, "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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_status_code, tvb, offset + 4, 4, int_rep);
+
+ if (iStatusLength >= 12)
+ proto_tree_add_item(mq_tree, hf_mq_status_value, tvb, offset + 8, 4, int_rep);
+ }
+ offset += iStatusLength;
+ }
+ }
+ else if (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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_ping_buffer, tvb, offset + 4, -1, ENC_NA);
+ }
+ offset = tvb_length(tvb);
+ }
+ else if (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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_reset_seqnum, tvb, offset + 4, 4, int_rep);
+ }
+ offset = tvb_length(tvb);
+ }
+ else if (opcode == MQ_TST_MQCONN && tvb_length_remaining(tvb, offset) > 0)
+ {
+ gint iSizeCONN = 0;
+ /*iSizeCONN = ((iVersionID == 4 || iVersionID == 6) ? 120 : 112);*/ /* guess */
+ /* The iVersionID is available in the previous ID segment, we should keep a state
+ * Instead we rely on the segment length announced in the TSH */
+ /* The MQCONN structure is special because it does not start with a structid */
+ iSizeCONN = iSegmentLength - iSizeTSH - iSizeAPI;
+ if (iSizeCONN != 112 && iSizeCONN != 120) iSizeCONN = 0;
+
+ if (iSizeCONN != 0 && tvb_length_remaining(tvb, offset) >= iSizeCONN)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sApplicationName;
+ guint8* sQueueManager;
+ sApplicationName = tvb_get_ephemeral_string_enc(tvb, offset + 48, 28, string_rep);
+ if (strip_trailing_blanks(sApplicationName, 28) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": App=%s", sApplicationName);
+ }
+ sQueueManager = tvb_get_ephemeral_string_enc(tvb, offset, 48, string_rep);
+ if (strip_trailing_blanks(sQueueManager, 48) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQueueManager);
+ }
+ }
+
+
+ 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);
+
+ proto_tree_add_item(mq_tree, hf_mq_conn_queuemanager, tvb, offset, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_conn_appname, tvb, offset + 48, 28, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_conn_apptype, tvb, offset + 76, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_conn_acttoken, tvb, offset + 80, 32, ENC_NA);
+
+ if (iSizeCONN >= 120)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_conn_version, tvb, offset + 112, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_conn_options, tvb, offset + 116, 4, int_rep);
+ }
+ }
+ offset += iSizeCONN;
+ }
+ }
+ else if ((opcode == MQ_TST_MQINQ || opcode == MQ_TST_MQINQ_REPLY || 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 = 0;
+ gint iNbIntegers = 0;
+ gint iCharLen = 0;
+ gint iOffsetINQ = 0;
+ gint iSelector = 0;
+
+ iNbSelectors = tvb_get_guint32_endian(tvb, offset, int_rep);
+ iNbIntegers = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ iCharLen = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
+
+ 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_inq_charlen, tvb, offset + 8, 4, int_rep);
+ }
+ 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, int_rep);
+ }
+ }
+ iOffsetINQ += iNbSelectors * 4;
+ if (opcode == MQ_TST_MQINQ_REPLY || opcode == MQ_TST_MQSET)
+ {
+ gint iSizeINQValues = 0;
+ iSizeINQValues = iNbIntegers * 4 + iCharLen;
+ if (tvb_length_remaining(tvb, offset + iOffsetINQ) >= iSizeINQValues)
+ {
+ gint iInteger = 0;
+ if (tree)
+ {
+ for (iInteger = 0; iInteger < iNbIntegers; iInteger++)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_inq_intvalue, tvb, offset + iOffsetINQ + iInteger * 4, 4, int_rep);
+ }
+ }
+ iOffsetINQ += iNbIntegers * 4;
+ if (iCharLen != 0)
+ {
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_inq_charvalues, tvb, offset + iOffsetINQ, iCharLen, string_rep);
+ }
+ }
+ }
+ }
+ }
+ offset += tvb_length(tvb);
+ }
+ else if ((opcode == MQ_TST_SPI || opcode == MQ_TST_SPI_REPLY) && tvb_length_remaining(tvb, offset) >= 12)
+ {
+ gint iOffsetSPI = 0;
+ guint32 iSpiVerb = 0;
+
+ iSpiVerb = tvb_get_guint32_endian(tvb, offset, int_rep);
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_length, tvb, offset + 8, 4, int_rep);
+ }
+
+ offset += 12;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ if ((structId == MQ_STRUCTID_SPQU || structId == MQ_STRUCTID_SPAU_EBCDIC
+ || structId == MQ_STRUCTID_SPPU || structId == MQ_STRUCTID_SPPU_EBCDIC
+ || structId == MQ_STRUCTID_SPGU || structId == MQ_STRUCTID_SPGU_EBCDIC
+ || structId == MQ_STRUCTID_SPAU || structId == MQ_STRUCTID_SPAU_EBCDIC)
+ && tvb_length_remaining(tvb, offset) >= 12)
+ {
+ gint iSizeSPIMD = 0;
+ if (tree)
+ {
+ guint8* sStructId;
+ sStructId = tvb_get_ephemeral_string(tvb, offset, 4);
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, int_rep);
+ }
+ offset += 12;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+
+ if ((iSizeSPIMD = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
+ {
+ gint iSizeGMO = 0;
+ gint iSizePMO = 0;
+ offset += iSizeSPIMD;
+
+ if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset)) != 0)
+ {
+ offset += iSizeGMO;
+ }
+ else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset, &iDistributionListSize)) != 0)
+ {
+ offset += iSizePMO;
+ }
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+
+ if ((structId == MQ_STRUCTID_SPQO || structId == MQ_STRUCTID_SPQO_EBCDIC
+ || structId == MQ_STRUCTID_SPQI || structId == MQ_STRUCTID_SPQI_EBCDIC
+ || structId == MQ_STRUCTID_SPPO || structId == MQ_STRUCTID_SPPO_EBCDIC
+ || structId == MQ_STRUCTID_SPPI || structId == MQ_STRUCTID_SPPI_EBCDIC
+ || structId == MQ_STRUCTID_SPGO || structId == MQ_STRUCTID_SPGO_EBCDIC
+ || structId == MQ_STRUCTID_SPGI || structId == MQ_STRUCTID_SPGI_EBCDIC
+ || structId == MQ_STRUCTID_SPAO || structId == MQ_STRUCTID_SPAO_EBCDIC
+ || structId == MQ_STRUCTID_SPAI || structId == MQ_STRUCTID_SPAI_EBCDIC)
+ && tvb_length_remaining(tvb, offset) >= 12)
+ {
+ if (tree)
+ {
+ /* Dissect the common part of these structures */
+ guint8* sStructId;
+ sStructId = tvb_get_ephemeral_string(tvb, offset, 4);
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_base_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_base_length, tvb, offset + 8, 4, int_rep);
+ }
+
+ if (structId == MQ_STRUCTID_SPQO && 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, int_rep);
+ iVerbNumber = tvb_get_guint32_endian(tvb, offset + 12, int_rep);
+
+ 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinoutversion, tvb, iOffsetSPI + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxinversion, tvb, iOffsetSPI + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spqo_maxoutversion, tvb, iOffsetSPI + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spqo_flags, tvb, iOffsetSPI + 16, 4, int_rep);
+ iOffsetSPI += 20;
+ }
+ offset += iVerbNumber * 20 + 16;
+ }
+ }
+ }
+ else if (structId == MQ_STRUCTID_SPAI && tvb_length_remaining(tvb, offset) >= 136)
+ {
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_spi_spai_mode, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown1, tvb, offset + 16, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spai_unknown2, tvb, offset + 64, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spai_msgid, tvb, offset + 112, 24, string_rep);
+ }
+ offset += 136;
+ }
+ else if (structId == MQ_STRUCTID_SPGI && tvb_length_remaining(tvb, offset) >= 24)
+ {
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchsize, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spgi_batchint, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_spi_spgi_maxmsgsize, tvb, offset + 20, 4, int_rep);
+ }
+ offset += 24;
+ }
+ else if ((structId == MQ_STRUCTID_SPGO || structId == MQ_STRUCTID_SPPI) && tvb_length_remaining(tvb, offset) >= 20)
+ {
+ if (tree)
+ {
+ /* Options flags */
+ {
+ proto_tree *mq_tree_sub = NULL;
+ gint iOptionsFlags;
+
+ ti = proto_tree_add_item(mq_tree, hf_mq_spi_spgo_options, tvb, offset + 12, 4, int_rep);
+ mq_tree_sub = proto_item_add_subtree(ti, ett_mq_spi_options);
+ iOptionsFlags = tvb_get_guint32_endian(tvb, offset + 12, int_rep);
+
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_deferred, tvb, offset + 12, 4, iOptionsFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_syncpoint, tvb, offset + 12, 4, iOptionsFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_spi_options_blank, tvb, offset + 12, 4, iOptionsFlags);
+ }
+ proto_tree_add_item(mq_tree, hf_mq_spi_spgo_size, tvb, offset + 16, 4, int_rep);
+ }
+ iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, int_rep);
+ offset += 20;
+ bPayload = TRUE;
+ }
+ else
+ {
+ offset += 12;
+ }
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ }
+ }
+ else if ((opcode >= 0xA0 && 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(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, int_rep);
+
+ /* Transaction Manager flags */
+ {
+ proto_tree *mq_tree_sub = NULL;
+ guint32 iTMFlags;
+
+ ti = proto_tree_add_item(mq_tree, hf_mq_xa_tmflags, tvb, offset + 8, 4, int_rep);
+ mq_tree_sub = proto_item_add_subtree(ti, ett_mq_xa_tmflags);
+ iTMFlags = tvb_get_guint32_endian(tvb, offset + 8, int_rep);
+
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_onephase, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_fail, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_resume, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_success, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_suspend, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_startrscan, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_endrscan, tvb, offset + 8, 4, iTMFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_xa_tmflags_join, tvb, offset + 8, 4, iTMFlags);
+ }
+
+ proto_tree_add_item(mq_tree, hf_mq_xa_rmid, tvb, offset + 12, 4, int_rep);
+ }
+ offset += 16;
+ if (opcode == MQ_TST_XA_START || opcode == MQ_TST_XA_END || opcode == MQ_TST_XA_PREPARE
+ || opcode == MQ_TST_XA_COMMIT || opcode == MQ_TST_XA_ROLLBACK || opcode == MQ_TST_XA_FORGET
+ || opcode == MQ_TST_XA_COMPLETE)
+ {
+ gint iSizeXid = 0;
+ if ((iSizeXid = dissect_mq_xid(tvb, mqroot_tree, int_rep, offset)) != 0)
+ offset += iSizeXid;
+ }
+ else if ((opcode == MQ_TST_XA_OPEN || 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, string_rep);
+ }
+ }
+ offset += 1 + iXAInfoLength;
+ }
+ else if ((opcode == MQ_TST_XA_RECOVER || opcode == MQ_TST_XA_RECOVER_REPLY)
+ && tvb_length_remaining(tvb, offset) >= 4)
+ {
+ gint iNbXid = 0;
+ iNbXid = tvb_get_guint32_endian(tvb, offset, int_rep);
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_xa_count, tvb, offset, 4, int_rep);
+ }
+ offset += 4;
+ if (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, int_rep, offset)) != 0)
+ offset += iSizeXid;
+ else
+ break;
+ }
+ }
+ }
+ }
+ else if ((structId == MQ_STRUCTID_ID || structId == MQ_STRUCTID_ID_EBCDIC) && tvb_length_remaining(tvb, offset) >= 5)
+ {
+ guint8 iVersionID = 0;
+ gint iSizeID = 0;
+ iVersionID = tvb_get_guint8(tvb, offset + 4);
+ iSizeID = (iVersionID < 4 ? 44 : 104); /* guess */
+ /* actually 102 but must be aligned to multiple of 4 */
+
+ if (iSizeID != 0 && tvb_length_remaining(tvb, offset) >= iSizeID)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sChannel;
+ sChannel = tvb_get_ephemeral_string_enc(tvb, offset + 24, 20, string_rep);
+ if (strip_trailing_blanks(sChannel, 20) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, ": CHL=%s", sChannel);
+ }
+ }
+
+ if (tree)
+ {
+ ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeID, MQ_TEXT_ID);
+ mq_tree = proto_item_add_subtree(ti, ett_mq_id);
+
+ proto_tree_add_item(mq_tree, hf_mq_id_structid, tvb, offset, 4, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_level, tvb, offset + 4, 1, ENC_BIG_ENDIAN);
+
+ /* ID flags */
+ {
+ proto_tree *mq_tree_sub = NULL;
+ guint8 iIDFlags;
+
+ ti = proto_tree_add_item(mq_tree, hf_mq_id_flags, tvb, offset + 5, 1, ENC_BIG_ENDIAN);
+ mq_tree_sub = proto_item_add_subtree(ti, ett_mq_id_icf);
+ iIDFlags = tvb_get_guint8(tvb, offset + 5);
+
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_runtime, tvb, offset + 5, 1, iIDFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_svrsec, tvb, offset + 5, 1, iIDFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_mqreq, tvb, offset + 5, 1, iIDFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_splitmsg, tvb, offset + 5, 1, iIDFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_convcap, tvb, offset + 5, 1, iIDFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_icf_msgseq, tvb, offset + 5, 1, iIDFlags);
+ }
+
+ proto_tree_add_item(mq_tree, hf_mq_id_unknown2, tvb, offset + 6, 1, ENC_BIG_ENDIAN);
+
+ /* Error flags */
+ {
+ proto_tree *mq_tree_sub = NULL;
+ guint8 iErrorFlags;
+
+ ti = proto_tree_add_item(mq_tree, hf_mq_id_ieflags, tvb, offset + 7, 1, ENC_BIG_ENDIAN);
+ mq_tree_sub = proto_item_add_subtree(ti, ett_mq_id_ief);
+ iErrorFlags = tvb_get_guint8(tvb, offset + 7);
+
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_hbint, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_seqwrap, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxmsgpb, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxmsgsz, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_fap, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_mxtrsz, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_enc, tvb, offset + 7, 1, iErrorFlags);
+ proto_tree_add_boolean(mq_tree_sub, hf_mq_id_ief_ccsid, tvb, offset + 7, 1, iErrorFlags);
+ }
+
+ proto_tree_add_item(mq_tree, hf_mq_id_unknown4, tvb, offset + 8, 2, ENC_BIG_ENDIAN);
+ proto_tree_add_item(mq_tree, hf_mq_id_maxmsgperbatch, tvb, offset + 10, 2, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_maxtransmissionsize, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_maxmsgsize, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_sequencewrapvalue, tvb, offset + 20, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_channel, tvb, offset + 24, 20, string_rep);
+ }
+
+ if (iVersionID >= 4)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sQueueManager;
+ sQueueManager = tvb_get_ephemeral_string_enc(tvb, offset + 48, 48, string_rep);
+ if (strip_trailing_blanks(sQueueManager,48) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQueueManager);
+ }
+ }
+
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_id_capflags, tvb, offset + 44, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(mq_tree, hf_mq_id_unknown5, tvb, offset + 45, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(mq_tree, hf_mq_id_ccsid, tvb, offset + 46, 2, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_queuemanager, tvb, offset + 48, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_id_heartbeatinterval, tvb, offset + 96, 4, int_rep);
+ }
+
+ }
+ offset += iSizeID;
+ }
+ }
+ else if ((structId == MQ_STRUCTID_UID || structId == MQ_STRUCTID_UID_EBCDIC) && tvb_length_remaining(tvb, offset) > 0)
+ {
+ gint iSizeUID = 0;
+ /* 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)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sUserId;
+ sUserId = tvb_get_ephemeral_string_enc(tvb, offset + 4, 12, string_rep);
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_uid_userid, tvb, offset + 4, 12, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_uid_password, tvb, offset + 16, 12, string_rep);
+ }
+
+ if (iSizeUID == 132)
+ {
+ if (tree)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_uid_longuserid, tvb, offset + 28, 64, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_uid_securityid, tvb, offset + 92, 40, ENC_NA);
+ }
+ }
+ offset += iSizeUID;
+ }
+ }
+ if ((structId == MQ_STRUCTID_OD || structId == MQ_STRUCTID_OD_EBCDIC) && tvb_length_remaining(tvb, offset) >= 8)
+ {
+ /* The OD struct can be present in several messages at different levels */
+ gint iSizeOD = 0;
+ guint32 iVersionOD = 0;
+ iVersionOD = tvb_get_guint32_endian(tvb, offset + 4, int_rep);
+ /* Compute length according to version */
+ switch (iVersionOD)
+ {
+ case 1: iSizeOD = 168; break;
+ case 2: iSizeOD = 200; break;
+ case 3: iSizeOD = 336; break;
+ }
+
+ if (iSizeOD != 0 && tvb_length_remaining(tvb, offset) >= iSizeOD)
+ {
+ gint iNbrRecords = 0;
+ if (iVersionOD >= 2)
+ iNbrRecords = tvb_get_guint32_endian(tvb, offset + 168, int_rep);
+
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ guint8* sQueue;
+ sQueue = tvb_get_ephemeral_string_enc(tvb, offset + 12, 48, string_rep);
+ if (strip_trailing_blanks(sQueue,48) != 0)
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Obj=%s", sQueue);
+ }
+ }
+
+ if (tree)
+ {
+ ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeOD, 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_objecttype, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_objectname, tvb, offset + 12, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_objectqmgrname, tvb, offset + 60, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_dynamicqname, tvb, offset + 108, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_alternateuserid, tvb, offset + 156, 12, string_rep);
+
+ if (iVersionOD >= 2)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_od_recspresent, tvb, offset + 168, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_knowndestcount, tvb, offset + 172, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_unknowndestcount, tvb, offset + 176, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_invaliddestcount, tvb, offset + 180, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_objectrecoffset, tvb, offset + 184, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_responserecoffset, tvb, offset + 188, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_objectrecptr, tvb, offset + 192, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_responserecptr, tvb, offset + 196, 4, int_rep);
+ }
+
+ if (iVersionOD >= 3)
+ {
+ proto_tree_add_item(mq_tree, hf_mq_od_alternatesecurityid, tvb, offset + 200, 40, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_resolvedqname, tvb, offset + 240, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_od_resolvedqmgrname, tvb, offset + 288, 48, string_rep);
+ }
+
+ }
+ offset += iSizeOD;
+
+ if (iNbrRecords > 0)
+ {
+ gint iOffsetOR = 0;
+ gint iOffsetRR = 0;
+ gint iSizeORRR = 0;
+
+ iDistributionListSize = iNbrRecords;
+ iOffsetOR = tvb_get_guint32_endian(tvb, offset - iSizeOD + 184, int_rep);
+ iOffsetRR = tvb_get_guint32_endian(tvb, offset - iSizeOD + 188, int_rep);
+ if ((iSizeORRR = dissect_mq_or(tvb, mqroot_tree, string_rep, offset, iNbrRecords, iOffsetOR)) != 0)
+ offset += iSizeORRR;
+ if ((iSizeORRR = dissect_mq_rr(tvb, mqroot_tree, int_rep, offset, iNbrRecords, iOffsetRR)) != 0)
+ offset += iSizeORRR;
+ }
+ }
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((opcode == MQ_TST_MQOPEN || opcode == MQ_TST_MQCLOSE
+ || opcode == MQ_TST_MQOPEN_REPLY || opcode == MQ_TST_MQCLOSE_REPLY)
+ && tvb_length_remaining(tvb, offset) >= 4)
+ {
+ 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);
+ proto_tree_add_item(mq_tree, hf_mq_open_options, tvb, offset, 4, int_rep);
+ }
+ offset += 4;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((iSizeMD_gbl = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
+ {
+ gint iSizeGMO = 0;
+ gint iSizePMO = 0;
+ offset += iSizeMD_gbl;
+
+ if ((iSizeGMO = dissect_mq_gmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset)) != 0)
+ {
+ offset += iSizeGMO;
+ bPayload = TRUE;
+ }
+ else if ((iSizePMO = dissect_mq_pmo(tvb, pinfo, mqroot_tree, int_rep, string_rep, offset, &iDistributionListSize)) != 0)
+ {
+ offset += iSizePMO;
+ bPayload = TRUE;
+ }
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ if (bPayload == TRUE)
+ {
+ iSizePayload = tvb_get_guint32_endian(tvb, offset, int_rep);
+ 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, int_rep);
+ }
+ offset += 4;
+ }
+ }
+ }
+ if (iDistributionListSize > 0)
+ {
+ if (check_col(pinfo->cinfo, COL_INFO))
+ 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 iSizeMD = 0;
+ structId = tvb_get_ntohl(tvb, offset);
+
+ if ((structId == MQ_STRUCTID_XQH || structId == 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_xqh_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_xqh_remoteq, tvb, offset + 8, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_xqh_remoteqmgr, tvb, offset + 56, 48, string_rep);
+ }
+ offset += iSizeXQH;
+ iHeadersLength += iSizeXQH;
+
+ if ((iSizeMD = dissect_mq_md(tvb, mqroot_tree, int_rep, string_rep, offset, &tMsgProps)) != 0)
+ {
+ offset += iSizeMD;
+ iHeadersLength += iSizeMD;
+ }
+
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((structId == MQ_STRUCTID_DH || structId == 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, int_rep);
+ iRecFlags = tvb_get_guint32_endian(tvb, offset + 32, int_rep);
+ tMsgProps.iOffsetEncoding = offset + 12;
+ tMsgProps.iOffsetCcsid = offset + 16;
+ tMsgProps.iOffsetFormat = offset + 20;
+
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecfields, tvb, offset + 32, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dh_recspresent, tvb, offset + 36, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dh_objectrecoffset , tvb, offset + 40, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dh_putmsgrecoffset, tvb, offset + 44, 4, int_rep);
+ }
+ 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, int_rep);
+ iOffsetPMR = tvb_get_guint32_endian(tvb, offset - iSizeDH + 44, int_rep);
+ if ((iSizeORPMR = dissect_mq_or(tvb, mqroot_tree, string_rep, offset, iNbrRecords, iOffsetOR)) != 0)
+ {
+ offset += iSizeORPMR;
+ iHeadersLength += iSizeORPMR;
+ }
+ if ((iSizeORPMR = dissect_mq_pmr(tvb, mqroot_tree, int_rep, offset, iNbrRecords, iOffsetPMR, iRecFlags)) != 0)
+ {
+ offset += iSizeORPMR;
+ iHeadersLength += iSizeORPMR;
+ }
+ }
+
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((structId == MQ_STRUCTID_DLH || structId == MQ_STRUCTID_DLH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 172)
+ {
+ /* if MD.format == MQDEAD */
+ gint iSizeDLH = 172;
+ tMsgProps.iOffsetEncoding = offset + 108;
+ tMsgProps.iOffsetCcsid = offset + 112;
+ tMsgProps.iOffsetFormat = offset + 116;
+ 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_reason, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_destq, tvb, offset + 12, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_destqmgr, tvb, offset + 60, 48, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_encoding, tvb, offset + 108, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_ccsid, tvb, offset + 112, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_format, tvb, offset + 116, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_putappltype, tvb, offset + 124, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_putapplname, tvb, offset + 128, 28, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_putdate, tvb, offset + 156, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_dlh_puttime, tvb, offset + 164, 8, string_rep);
+ }
+ offset += iSizeDLH;
+ iHeadersLength += iSizeDLH;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((structId == MQ_STRUCTID_MDE || structId == MQ_STRUCTID_MDE_EBCDIC) && tvb_length_remaining(tvb, offset) >= 72)
+ {
+ /* if MD.format == MQHMDE */
+ gint iSizeMDE = 72;
+ tMsgProps.iOffsetEncoding = offset + 12;
+ tMsgProps.iOffsetCcsid = offset + 16;
+ tMsgProps.iOffsetFormat = 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
+ 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, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_offset, tvb, offset + 60, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_msgflags, tvb, offset + 64, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_md_originallength, tvb, offset + 68, 4, int_rep);
+ }
+ offset += iSizeMDE;
+ iHeadersLength += iSizeMDE;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ if ((structId == MQ_STRUCTID_CIH || structId == MQ_STRUCTID_CIH_EBCDIC
+ || structId == MQ_STRUCTID_IIH || structId == MQ_STRUCTID_IIH_EBCDIC
+ || structId == MQ_STRUCTID_RFH || structId == MQ_STRUCTID_RFH_EBCDIC
+ || structId == MQ_STRUCTID_RMH || structId == MQ_STRUCTID_RMH_EBCDIC
+ || structId == MQ_STRUCTID_WIH || structId == 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, int_rep);
+ /* 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)
+ {
+ tMsgProps.iOffsetEncoding = offset + 12;
+ tMsgProps.iOffsetCcsid = offset + 16;
+ tMsgProps.iOffsetFormat = offset + 20;
+ if (tree)
+ {
+ ti = proto_tree_add_text(mqroot_tree, tvb, offset, iSizeHeader, "%s", val_to_str(structId, 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, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_version, tvb, offset + 4, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_length, tvb, offset + 8, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_encoding, tvb, offset + 12, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_ccsid, tvb, offset + 16, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_format, tvb, offset + 20, 8, string_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_flags, tvb, offset + 28, 4, int_rep);
+ proto_tree_add_item(mq_tree, hf_mq_head_struct, tvb, offset + 32, iSizeHeader - 32, ENC_NA);
+
+ }
+ offset += iSizeHeader;
+ iHeadersLength += iSizeHeader;
+ structId = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
+ }
+ }
+ }
+
+ if (tMsgProps.iOffsetFormat != 0)
+ {
+ guint8* sFormat = NULL;
+ sFormat = tvb_get_ephemeral_string_enc(tvb, tMsgProps.iOffsetFormat, 8, string_rep);
+ if (strip_trailing_blanks(sFormat, 8) == 0) sFormat = (guint8*)g_strdup("MQNONE");
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " Fmt=%s", sFormat);
+ }
+ if (tree)
+ {
+ proto_item *hidden_item;
+ hidden_item = proto_tree_add_string(tree, hf_mq_md_hidden_lastformat, tvb, tMsgProps.iOffsetFormat, 8, (const char*)sFormat);
+ PROTO_ITEM_SET_HIDDEN(hidden_item);
+ }
+ }
+ if (check_col(pinfo->cinfo, COL_INFO))
+ {
+ col_append_fstr(pinfo->cinfo, COL_INFO, " (%d bytes)", iSizePayload - iHeadersLength);
+ }
+
+ {
+ /* Call subdissector for the payload */
+ tvbuff_t* next_tvb = NULL;
+ void* pd_save;
+ struct mqinfo mqinfo;
+ /* Format, encoding and character set are "data type" information, not subprotocol information */
+ mqinfo.encoding = tvb_get_guint32_endian(tvb, tMsgProps.iOffsetEncoding, int_rep);
+ mqinfo.ccsid = tvb_get_guint32_endian(tvb, tMsgProps.iOffsetCcsid, int_rep);
+ tvb_memcpy(tvb, mqinfo.format, tMsgProps.iOffsetFormat, 8);
+ pd_save = pinfo->private_data;
+ pinfo->private_data = &mqinfo;
+ next_tvb = tvb_new_subset_remaining(tvb, offset);
+ if (!dissector_try_heuristic(mq_heur_subdissector_list, next_tvb, pinfo, tree))
+ call_dissector(data_handle, next_tvb, pinfo, tree);
+ pinfo->private_data = pd_save;
+ }
+ }
+ offset = tvb_length(tvb);
+ }
+ /* After all recognised structures have been dissected, process remaining structure*/
+ if (tvb_length_remaining(tvb, offset) >= 4)
+ {
+ structId = tvb_get_ntohl(tvb, offset);
+ if (tree)
+ {
+ proto_tree_add_text(mqroot_tree, tvb, offset, -1, "%s", val_to_str(structId, 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 void
reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- /* 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)
- {
- guint32 structId;
- structId = tvb_get_ntohl(tvb, 0);
-
- if (structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC)
- {
- guint8 iControlFlags = 0;
- guint32 iSegmentLength = 0;
- guint32 iBeginLength = 0;
- guint8 opcode;
- gboolean bFirstSegment;
- gboolean bLastSegment;
- opcode = tvb_get_guint8(tvb, 9);
- iControlFlags = tvb_get_guint8(tvb, 10);
- iSegmentLength = tvb_get_ntohl(tvb, 4);
- bFirstSegment = ((iControlFlags & MQ_TCF_FIRST) != 0);
- bLastSegment = ((iControlFlags & MQ_TCF_LAST) != 0);
-
- if (opcode > 0x80 && !(bFirstSegment && bLastSegment))
- {
- /* Optimisation : only fragmented segments go through the reassembly process */
- if (mq_reassembly)
- {
- tvbuff_t* next_tvb;
- fragment_data* fd_head;
- guint32 iConnectionId = (pinfo->srcport + pinfo->destport);
- if (opcode > 0x80 && !bFirstSegment) iBeginLength = 28;
- fd_head = fragment_add_seq_next(tvb, iBeginLength, pinfo, iConnectionId, mq_fragment_table, mq_reassembled_table, iSegmentLength - iBeginLength, !bLastSegment);
- if (fd_head != NULL && pinfo->fd->num == fd_head->reassembled_in)
- {
- /* Reassembly finished */
- if (fd_head->next != NULL)
- {
- /* 2 or more fragments */
- next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len);
- add_new_data_source(pinfo, next_tvb, "Reassembled MQ");
- }
- else
- {
- /* Only 1 fragment */
- next_tvb = tvb;
- }
- dissect_mq_pdu(next_tvb, pinfo, tree);
- return;
- }
- else
- {
- /* Reassembly in progress */
- col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
- if (check_col(pinfo->cinfo, COL_INFO)) col_add_fstr(pinfo->cinfo, COL_INFO, "%s [Reassembled MQ]", val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
- if (tree)
- {
- proto_item* ti = NULL;
- ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
- proto_item_append_text(ti, " (%s) [Reassembled MQ]", val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
- }
- return;
- }
- }
- else
- {
- dissect_mq_pdu(tvb, pinfo, tree);
- if (bFirstSegment)
- {
- /* MQ segment is the first of a unreassembled series */
- col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]");
- }
- return;
- }
- }
- /* Reassembly not enabled or non-fragmented message */
- dissect_mq_pdu(tvb, pinfo, tree);
- return;
- }
- }
+ /* 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)
+ {
+ guint32 structId;
+ structId = tvb_get_ntohl(tvb, 0);
+
+ if (structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC)
+ {
+ guint8 iControlFlags = 0;
+ guint32 iSegmentLength = 0;
+ guint32 iBeginLength = 0;
+ guint8 opcode;
+ gboolean bFirstSegment;
+ gboolean bLastSegment;
+ opcode = tvb_get_guint8(tvb, 9);
+ iControlFlags = tvb_get_guint8(tvb, 10);
+ iSegmentLength = tvb_get_ntohl(tvb, 4);
+ bFirstSegment = ((iControlFlags & MQ_TCF_FIRST) != 0);
+ bLastSegment = ((iControlFlags & MQ_TCF_LAST) != 0);
+
+ if (opcode > 0x80 && !(bFirstSegment && bLastSegment))
+ {
+ /* Optimisation : only fragmented segments go through the reassembly process */
+ if (mq_reassembly)
+ {
+ tvbuff_t* next_tvb;
+ fragment_data* fd_head;
+ guint32 iConnectionId = (pinfo->srcport + pinfo->destport);
+ if (opcode > 0x80 && !bFirstSegment) iBeginLength = 28;
+ fd_head = fragment_add_seq_next(tvb, iBeginLength, pinfo, iConnectionId, mq_fragment_table, mq_reassembled_table,
+ iSegmentLength - iBeginLength, !bLastSegment);
+ if (fd_head != NULL && pinfo->fd->num == fd_head->reassembled_in)
+ {
+ /* Reassembly finished */
+ if (fd_head->next != NULL)
+ {
+ /* 2 or more fragments */
+ next_tvb = tvb_new_child_real_data(tvb, fd_head->data, fd_head->len, fd_head->len);
+ add_new_data_source(pinfo, next_tvb, "Reassembled MQ");
+ }
+ else
+ {
+ /* Only 1 fragment */
+ next_tvb = tvb;
+ }
+ dissect_mq_pdu(next_tvb, pinfo, tree);
+ return;
+ }
+ else
+ {
+ /* Reassembly in progress */
+ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
+ if (check_col(pinfo->cinfo, COL_INFO))
+ col_add_fstr(pinfo->cinfo, COL_INFO, "%s [Reassembled MQ]", val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
+ if (tree)
+ {
+ proto_item* ti = NULL;
+ ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
+ proto_item_append_text(ti, " (%s) [Reassembled MQ]", val_to_str(opcode, mq_opcode_vals, "Unknown (0x%02x)"));
+ }
+ return;
+ }
+ }
+ else
+ {
+ dissect_mq_pdu(tvb, pinfo, tree);
+ if (bFirstSegment)
+ {
+ /* MQ segment is the first of a unreassembled series */
+ col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]");
+ }
+ return;
+ }
+ }
+ /* Reassembly not enabled or non-fragmented message */
+ dissect_mq_pdu(tvb, pinfo, tree);
+ return;
+ }
+ }
}
static guint
get_mq_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset)
{
- if (tvb_length_remaining(tvb, offset) >= 8)
- {
- if ((tvb_get_ntohl(tvb, 0) == MQ_STRUCTID_TSH || tvb_get_ntohl(tvb, 0) == MQ_STRUCTID_TSH_EBCDIC))
- return tvb_get_ntohl(tvb, offset + 4);
- }
- return 0;
+ if (tvb_length_remaining(tvb, offset) >= 8)
+ {
+ if ((tvb_get_ntohl(tvb, 0) == MQ_STRUCTID_TSH || tvb_get_ntohl(tvb, 0) == MQ_STRUCTID_TSH_EBCDIC))
+ return tvb_get_ntohl(tvb, offset + 4);
+ }
+ return 0;
}
static void
dissect_mq_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq);
+ tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq);
}
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)
{
- if (tvb_length(tvb) >= 28)
- {
- guint32 structId;
- guint8 cEndian;
- structId = tvb_get_ntohl(tvb, 0);
- cEndian = tvb_get_guint8(tvb, 8);
-
- if ((structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC)
- && (cEndian == MQ_LITTLE_ENDIAN || cEndian == MQ_BIG_ENDIAN))
- {
- /* 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);
- return TRUE;
- }
- }
- return FALSE;
+ if (tvb_length(tvb) >= 28)
+ {
+ guint32 structId;
+ guint8 cEndian;
+ structId = tvb_get_ntohl(tvb, 0);
+ cEndian = tvb_get_guint8(tvb, 8);
+
+ if ((structId == MQ_STRUCTID_TSH || structId == MQ_STRUCTID_TSH_EBCDIC)
+ && (cEndian == MQ_LITTLE_ENDIAN || cEndian == MQ_BIG_ENDIAN))
+ {
+ /* 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);
+ return TRUE;
+ }
+ }
+ return FALSE;
}
static gboolean
dissect_mq_heur_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_TCP);
+ return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_TCP);
}
static gboolean
dissect_mq_heur_netbios(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_NETBIOS);
+ return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_NETBIOS);
}
static gboolean
dissect_mq_heur_http(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
{
- return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_HTTP);
+ return dissect_mq_heur(tvb, pinfo, tree, MQ_XPT_HTTP);
}
static void
mq_init(void)
{
- fragment_table_init(&mq_fragment_table);
- reassembled_table_init(&mq_reassembled_table);
+ fragment_table_init(&mq_fragment_table);
+ reassembled_table_init(&mq_reassembled_table);
}
void
proto_register_mq(void)
{
- static hf_register_info hf[] = {
- { &hf_mq_tsh_structid,
- { "TSH structid", "mq.tsh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ static hf_register_info hf[] = {
+ { &hf_mq_tsh_structid,
+ { "TSH structid", "mq.tsh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_mq_tsh_packetlength,
- { "MQ Segment length", "mq.tsh.seglength", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH MQ Segment length", HFILL }},
+ { &hf_mq_tsh_packetlength,
+ { "MQ Segment length", "mq.tsh.seglength", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH MQ Segment length", HFILL }},
- { &hf_mq_tsh_byteorder,
- { "Byte order", "mq.tsh.byteorder", FT_UINT8, BASE_HEX, VALS(mq_byteorder_vals), 0x0, "TSH Byte order", HFILL }},
+ { &hf_mq_tsh_byteorder,
+ { "Byte order", "mq.tsh.byteorder", FT_UINT8, BASE_HEX, VALS(mq_byteorder_vals), 0x0, "TSH Byte order", HFILL }},
- { &hf_mq_tsh_opcode,
- { "Segment type", "mq.tsh.type", FT_UINT8, BASE_HEX, VALS(mq_opcode_vals), 0x0, "TSH MQ segment type", HFILL }},
+ { &hf_mq_tsh_opcode,
+ { "Segment type", "mq.tsh.type", FT_UINT8, BASE_HEX, VALS(mq_opcode_vals), 0x0, "TSH MQ segment type", HFILL }},
- { &hf_mq_tsh_controlflags,
- { "Control flags", "mq.tsh.cflags", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags", HFILL }},
+ { &hf_mq_tsh_controlflags,
+ { "Control flags", "mq.tsh.cflags", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Control flags", HFILL }},
- { &hf_mq_tsh_reserved,
- { "Reserved", "mq.tsh.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Reserved", HFILL }},
+ { &hf_mq_tsh_reserved,
+ { "Reserved", "mq.tsh.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "TSH Reserved", HFILL }},
- { &hf_mq_tsh_luwid,
- { "Logical unit of work identifier", "mq.tsh.luwid", FT_BYTES, BASE_NONE, NULL, 0x0, "TSH logical unit of work identifier", HFILL }},
+ { &hf_mq_tsh_luwid,
+ { "Logical unit of work identifier", "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_encoding,
+ { "Encoding", "mq.tsh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "TSH Encoding", HFILL }},
- { &hf_mq_tsh_ccsid,
- { "Character set", "mq.tsh.ccsid", FT_UINT16, BASE_DEC, NULL, 0x0, "TSH CCSID", HFILL }},
+ { &hf_mq_tsh_ccsid,
+ { "Character set", "mq.tsh.ccsid", FT_UINT16, BASE_DEC, NULL, 0x0, "TSH CCSID", HFILL }},
- { &hf_mq_tsh_padding,
- { "Padding", "mq.tsh.padding", FT_UINT16, BASE_HEX, NULL, 0x0, "TSH Padding", HFILL }},
+ { &hf_mq_tsh_padding,
+ { "Padding", "mq.tsh.padding", FT_UINT16, BASE_HEX, NULL, 0x0, "TSH Padding", HFILL }},
- { &hf_mq_tsh_tcf_confirmreq,
- { "Confirm request", "mq.tsh.tcf.confirmreq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_CONFIRM_REQUEST, "TSH TCF Confirm request", HFILL }},
+ { &hf_mq_tsh_tcf_confirmreq,
+ { "Confirm request", "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_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,
- { "Request 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_reqclose,
+ { "Request 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 channel", "mq.tsh.tcf.closechann", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_CLOSE_CHANNEL, "TSH TCF Close channel", HFILL }},
+ { &hf_mq_tsh_tcf_closechann,
+ { "Close channel", "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", "mq.tsh.tcf.first", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_FIRST, "TSH TCF First", HFILL }},
+ { &hf_mq_tsh_tcf_first,
+ { "First", "mq.tsh.tcf.first", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_FIRST, "TSH TCF First", HFILL }},
- { &hf_mq_tsh_tcf_last,
- { "Last", "mq.tsh.tcf.last", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_LAST, "TSH TCF Last", HFILL }},
+ { &hf_mq_tsh_tcf_last,
+ { "Last", "mq.tsh.tcf.last", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_LAST, "TSH TCF Last", HFILL }},
- { &hf_mq_tsh_tcf_reqacc,
- { "Request accepted", "mq.tsh.tcf.reqacc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_TCF_REQUEST_ACCEPTED, "TSH TCF Request accepted", HFILL }},
+ { &hf_mq_tsh_tcf_reqacc,
+ { "Request accepted", "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_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_api_replylength,
- { "Reply length", "mq.api.replylength", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reply length", HFILL }},
+ { &hf_mq_api_replylength,
+ { "Reply length", "mq.api.replylength", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reply length", HFILL }},
- { &hf_mq_api_completioncode,
- { "Completion code", "mq.api.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "API Completion code", HFILL }},
+ { &hf_mq_api_completioncode,
+ { "Completion code", "mq.api.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "API Completion code", HFILL }},
- { &hf_mq_api_reasoncode,
- { "Reason code", "mq.api.reasoncode", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reason code", HFILL }},
+ { &hf_mq_api_reasoncode,
+ { "Reason code", "mq.api.reasoncode", FT_UINT32, BASE_DEC, NULL, 0x0, "API Reason code", HFILL }},
- { &hf_mq_api_objecthandle,
- { "Object handle", "mq.api.hobj", FT_UINT32, BASE_HEX, NULL, 0x0, "API Object handle", HFILL }},
+ { &hf_mq_api_objecthandle,
+ { "Object handle", "mq.api.hobj", FT_UINT32, BASE_HEX, NULL, 0x0, "API Object handle", HFILL }},
- { &hf_mq_id_icf_msgseq,
- { "Message sequence", "mq.id.icf.msgseq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_MSG_SEQ, "ID ICF Message sequence", HFILL }},
+ { &hf_mq_id_icf_msgseq,
+ { "Message sequence", "mq.id.icf.msgseq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_MSG_SEQ, "ID ICF Message sequence", HFILL }},
- { &hf_mq_id_icf_convcap,
- { "Conversion capable", "mq.id.icf.convcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL }},
+ { &hf_mq_id_icf_convcap,
+ { "Conversion capable", "mq.id.icf.convcap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL }},
- { &hf_mq_id_icf_splitmsg,
- { "Split messages", "mq.id.icf.splitmsg", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_SPLIT_MESSAGE, "ID ICF Split message", HFILL }},
+ { &hf_mq_id_icf_splitmsg,
+ { "Split messages", "mq.id.icf.splitmsg", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_SPLIT_MESSAGE, "ID ICF Split message", HFILL }},
- { &hf_mq_id_icf_mqreq,
- { "MQ request", "mq.id.icf.mqreq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_MQREQUEST, "ID ICF MQ request", HFILL }},
+ { &hf_mq_id_icf_mqreq,
+ { "MQ request", "mq.id.icf.mqreq", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_MQREQUEST, "ID ICF MQ request", HFILL }},
- { &hf_mq_id_icf_svrsec,
- { "Server connection security", "mq.id.icf.svrsec", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_SVRCONN_SECURITY, "ID ICF Server connection security", HFILL }},
+ { &hf_mq_id_icf_svrsec,
+ { "Server connection security", "mq.id.icf.svrsec", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_SVRCONN_SECURITY, "ID ICF Server connection security", HFILL }},
- { &hf_mq_id_icf_runtime,
- { "Runtime application", "mq.id.icf.runtime", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_RUNTIME, "ID ICF Runtime application", HFILL }},
+ { &hf_mq_id_icf_runtime,
+ { "Runtime application", "mq.id.icf.runtime", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF_RUNTIME, "ID ICF Runtime application", HFILL }},
- { &hf_mq_msh_structid,
- { "MSH structid", "mq.msh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_msh_structid,
+ { "MSH structid", "mq.msh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_mq_msh_seqnum,
- { "Sequence number", "mq.msh.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH sequence number", HFILL }},
+ { &hf_mq_msh_seqnum,
+ { "Sequence number", "mq.msh.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH sequence number", HFILL }},
- { &hf_mq_msh_datalength,
- { "Buffer length", "mq.msh.buflength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH buffer length", HFILL }},
+ { &hf_mq_msh_datalength,
+ { "Buffer length", "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_unknown1,
+ { "Unknown1", "mq.msh.unknown1", FT_UINT32, BASE_HEX, NULL, 0x0, "MSH unknown1", HFILL }},
- { &hf_mq_msh_msglength,
- { "Message length", "mq.msh.msglength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH message length", HFILL }},
+ { &hf_mq_msh_msglength,
+ { "Message length", "mq.msh.msglength", FT_UINT32, BASE_DEC, NULL, 0x0, "MSH message length", HFILL }},
- { &hf_mq_xqh_structid,
- { "XQH structid", "mq.xqh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_xqh_structid,
+ { "XQH 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_version,
+ { "Version", "mq.xqh.version", FT_UINT32, BASE_DEC, NULL, 0x0, "XQH version", HFILL }},
- { &hf_mq_xqh_remoteq,
- { "Remote queue", "mq.xqh.remoteq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue", HFILL }},
+ { &hf_mq_xqh_remoteq,
+ { "Remote queue", "mq.xqh.remoteq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue", HFILL }},
- { &hf_mq_xqh_remoteqmgr,
- { "Remote queue manager", "mq.xqh.remoteqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue manager", HFILL }},
+ { &hf_mq_xqh_remoteqmgr,
+ { "Remote queue manager", "mq.xqh.remoteqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "XQH remote queue manager", HFILL }},
- { &hf_mq_id_structid,
- { "ID structid", "mq.id.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_id_structid,
+ { "ID structid", "mq.id.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_mq_id_level,
- { "FAP level", "mq.id.level", FT_UINT8, BASE_DEC, NULL, 0x0, "ID Formats And Protocols level", HFILL }},
+ { &hf_mq_id_level,
+ { "FAP level", "mq.id.level", FT_UINT8, BASE_DEC, NULL, 0x0, "ID Formats And Protocols level", HFILL }},
- { &hf_mq_id_flags,
- { "Flags", "mq.id.flags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID flags", HFILL }},
+ { &hf_mq_id_flags,
+ { "Flags", "mq.id.flags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID flags", HFILL }},
- { &hf_mq_id_unknown2,
- { "Unknown2", "mq.id.unknown2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID unknown2", HFILL }},
+ { &hf_mq_id_unknown2,
+ { "Unknown2", "mq.id.unknown2", FT_UINT8, BASE_HEX, NULL, 0x0, "ID unknown2", HFILL }},
- { &hf_mq_id_ieflags,
- { "Initial error flags", "mq.id.ief", FT_UINT8, BASE_HEX, NULL, 0x0, "ID initial error flags", HFILL }},
+ { &hf_mq_id_ieflags,
+ { "Initial error flags", "mq.id.ief", FT_UINT8, BASE_HEX, NULL, 0x0, "ID initial error flags", HFILL }},
- { &hf_mq_id_unknown4,
- { "Unknown4", "mq.id.unknown4", FT_UINT16, BASE_HEX, NULL, 0x0, "ID unknown4", HFILL }},
+ { &hf_mq_id_unknown4,
+ { "Unknown4", "mq.id.unknown4", FT_UINT16, BASE_HEX, NULL, 0x0, "ID unknown4", HFILL }},
- { &hf_mq_id_maxmsgperbatch,
- { "Maximum messages per batch", "mq.id.maxmsgperbatch", FT_UINT16, BASE_DEC, NULL, 0x0, "ID max msg per batch", HFILL }},
+ { &hf_mq_id_maxmsgperbatch,
+ { "Maximum messages per batch", "mq.id.maxmsgperbatch", FT_UINT16, BASE_DEC, NULL, 0x0, "ID max msg per batch", HFILL }},
- { &hf_mq_id_maxtransmissionsize,
- { "Maximum transmission size", "mq.id.maxtranssize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max trans size", HFILL }},
+ { &hf_mq_id_maxtransmissionsize,
+ { "Maximum transmission size", "mq.id.maxtranssize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max trans size", HFILL }},
- { &hf_mq_id_maxmsgsize,
- { "Maximum message size", "mq.id.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max msg size", HFILL }},
+ { &hf_mq_id_maxmsgsize,
+ { "Maximum message size", "mq.id.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "ID max msg size", HFILL }},
- { &hf_mq_id_sequencewrapvalue,
- { "Sequence wrap value", "mq.id.seqwrap", FT_UINT32, BASE_DEC, NULL, 0x0, "ID seq wrap value", HFILL }},
+ { &hf_mq_id_sequencewrapvalue,
+ { "Sequence wrap value", "mq.id.seqwrap", FT_UINT32, BASE_DEC, NULL, 0x0, "ID seq wrap value", HFILL }},
- { &hf_mq_id_channel,
- { "Channel name", "mq.id.channelname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID channel name", HFILL }},
+ { &hf_mq_id_channel,
+ { "Channel name", "mq.id.channelname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID channel name", HFILL }},
- { &hf_mq_id_capflags,
- { "Capability flags", "mq.id.capflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability flags", HFILL }},
+ { &hf_mq_id_capflags,
+ { "Capability flags", "mq.id.capflags", FT_UINT8, BASE_HEX, NULL, 0x0, "ID Capability flags", HFILL }},
- { &hf_mq_id_unknown5,
- { "Unknown5", "mq.id.unknown5", FT_UINT8, BASE_HEX, NULL, 0x0, "ID unknown5", HFILL }},
+ { &hf_mq_id_unknown5,
+ { "Unknown5", "mq.id.unknown5", FT_UINT8, BASE_HEX, NULL, 0x0, "ID unknown5", HFILL }},
- { &hf_mq_id_ccsid,
- { "Character set", "mq.id.ccsid", FT_UINT16, BASE_DEC, NULL, 0x0, "ID character set", HFILL }},
+ { &hf_mq_id_ccsid,
+ { "Character set", "mq.id.ccsid", FT_UINT16, BASE_DEC, NULL, 0x0, "ID character set", HFILL }},
- { &hf_mq_id_queuemanager,
- { "Queue manager", "mq.id.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Queue manager", HFILL }},
+ { &hf_mq_id_queuemanager,
+ { "Queue manager", "mq.id.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Queue manager", HFILL }},
- { &hf_mq_id_heartbeatinterval,
- { "Heartbeat interval", "mq.id.hbint", FT_UINT32, BASE_DEC, NULL, 0x0, "ID Heartbeat interval", HFILL }},
+ { &hf_mq_id_heartbeatinterval,
+ { "Heartbeat interval", "mq.id.hbint", FT_UINT32, BASE_DEC, NULL, 0x0, "ID Heartbeat interval", HFILL }},
- { &hf_mq_id_unknown6,
- { "Unknown6", "mq.id.unknown6", FT_UINT16, BASE_HEX, NULL, 0x0, "ID unknown6", HFILL }},
+ { &hf_mq_id_unknown6,
+ { "Unknown6", "mq.id.unknown6", FT_UINT16, BASE_HEX, NULL, 0x0, "ID unknown6", HFILL }},
- { &hf_mq_id_ief_ccsid,
- { "Invalid CCSID", "mq.id.ief.ccsid", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_CCSID, "ID invalid CCSID", HFILL }},
+ { &hf_mq_id_ief_ccsid,
+ { "Invalid CCSID", "mq.id.ief.ccsid", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_CCSID, "ID invalid CCSID", HFILL }},
- { &hf_mq_id_ief_enc,
- { "Invalid encoding", "mq.id.ief.enc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_ENCODING, "ID invalid encoding", HFILL }},
+ { &hf_mq_id_ief_enc,
+ { "Invalid encoding", "mq.id.ief.enc", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_ENCODING, "ID invalid encoding", HFILL }},
- { &hf_mq_id_ief_mxtrsz,
- { "Invalid maximum transmission size", "mq.id.ief.mxtrsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_TRANSMISSION_SIZE, "ID invalid maximum transmission size", HFILL }},
+ { &hf_mq_id_ief_mxtrsz,
+ { "Invalid maximum transmission size", "mq.id.ief.mxtrsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_TRANSMISSION_SIZE, "ID invalid maximum transmission size", HFILL }},
- { &hf_mq_id_ief_fap,
- { "Invalid FAP level", "mq.id.ief.fap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_FAP_LEVEL, "ID invalid FAP level", HFILL }},
+ { &hf_mq_id_ief_fap,
+ { "Invalid FAP level", "mq.id.ief.fap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_FAP_LEVEL, "ID invalid FAP level", HFILL }},
- { &hf_mq_id_ief_mxmsgsz,
- { "Invalid message size", "mq.id.ief.mxmsgsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_MSG_SIZE, "ID invalid message size", HFILL }},
+ { &hf_mq_id_ief_mxmsgsz,
+ { "Invalid message size", "mq.id.ief.mxmsgsz", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_MSG_SIZE, "ID invalid message size", HFILL }},
- { &hf_mq_id_ief_mxmsgpb,
- { "Invalid maximum message per batch", "mq.id.ief.mxmsgpb", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_MSG_PER_BATCH, "ID maximum message per batch", HFILL }},
+ { &hf_mq_id_ief_mxmsgpb,
+ { "Invalid maximum message per batch", "mq.id.ief.mxmsgpb", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_MAX_MSG_PER_BATCH, "ID maximum message per batch", HFILL }},
- { &hf_mq_id_ief_seqwrap,
- { "Invalid sequence wrap value", "mq.id.ief.seqwrap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_SEQ_WRAP_VALUE, "ID invalid sequence wrap value", HFILL }},
+ { &hf_mq_id_ief_seqwrap,
+ { "Invalid sequence wrap value", "mq.id.ief.seqwrap", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_SEQ_WRAP_VALUE, "ID invalid sequence wrap value", HFILL }},
- { &hf_mq_id_ief_hbint,
- { "Invalid heartbeat interval", "mq.id.ief.hbint", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_HEARTBEAT_INTERVAL, "ID invalid heartbeat interval", HFILL }},
+ { &hf_mq_id_ief_hbint,
+ { "Invalid heartbeat interval", "mq.id.ief.hbint", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_IEF_HEARTBEAT_INTERVAL, "ID invalid heartbeat interval", HFILL }},
- { &hf_mq_uid_structid,
- { "UID structid", "mq.uid.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_uid_structid,
+ { "UID 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_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_password,
+ { "Password", "mq.uid.password", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID password", HFILL }},
- { &hf_mq_uid_longuserid,
- { "Long User ID", "mq.uid.longuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID long user id", HFILL }},
+ { &hf_mq_uid_longuserid,
+ { "Long User ID", "mq.uid.longuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "UID long user id", HFILL }},
- { &hf_mq_uid_securityid,
- { "Security ID", "mq.uid.securityid", FT_BYTES, BASE_NONE, NULL, 0x0, "UID security id", HFILL }},
+ { &hf_mq_uid_securityid,
+ { "Security ID", "mq.uid.securityid", FT_BYTES, BASE_NONE, NULL, 0x0, "UID security id", HFILL }},
- { &hf_mq_conn_queuemanager,
- { "Queue manager", "mq.conn.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN queue manager", HFILL }},
+ { &hf_mq_conn_queuemanager,
+ { "Queue manager", "mq.conn.qm", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN queue manager", HFILL }},
- { &hf_mq_conn_appname,
- { "Application name", "mq.conn.appname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN application name", HFILL }},
+ { &hf_mq_conn_appname,
+ { "Application name", "mq.conn.appname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "CONN application name", HFILL }},
- { &hf_mq_conn_apptype,
- { "Application type", "mq.conn.apptype", FT_INT32, BASE_DEC, NULL, 0x0, "CONN application type", HFILL }},
+ { &hf_mq_conn_apptype,
+ { "Application type", "mq.conn.apptype", FT_INT32, BASE_DEC, NULL, 0x0, "CONN application type", HFILL }},
- { &hf_mq_conn_acttoken,
- { "Accounting token", "mq.conn.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "CONN accounting token", HFILL }},
+ { &hf_mq_conn_acttoken,
+ { "Accounting token", "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_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_conn_options,
+ { "Options", "mq.conn.options", FT_UINT32, BASE_HEX, NULL, 0x0, "CONN options", HFILL }},
- { &hf_mq_inq_nbsel,
- { "Selector count", "mq.inq.nbsel", FT_UINT32, BASE_DEC, NULL, 0x0, "INQ Selector count", 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_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_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, NULL, 0x0, "INQ Selector", HFILL }},
+ { &hf_mq_inq_sel,
+ { "Selector", "mq.inq.sel", FT_UINT32, BASE_DEC, NULL, 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_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_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(mq_spi_verbs_vals), 0x0, NULL, HFILL }},
+ { &hf_mq_spi_verb,
+ { "SPI Verb", "mq.spi.verb", FT_UINT32, BASE_DEC, VALS(mq_spi_verbs_vals), 0x0, NULL, HFILL }},
- { &hf_mq_spi_version,
- { "Version", "mq.spi.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Version", 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_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, "SPI Base structid", HFILL }},
+ { &hf_mq_spi_base_structid,
+ { "SPI Structid", "mq.spib.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "SPI Base structid", HFILL }},
- { &hf_mq_spi_base_version,
- { "Version", "mq.spib.version", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Base Version", 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_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_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(mq_spi_verbs_vals), 0x0, "SPI Query Output VerbId", HFILL }},
+ { &hf_mq_spi_spqo_verbid,
+ { "Verb", "mq.spqo.verb", FT_UINT32, BASE_DEC, VALS(mq_spi_verbs_vals), 0x0, "SPI Query Output VerbId", HFILL }},
- { &hf_mq_spi_spqo_maxinoutversion,
- { "Max InOut Version", "mq.spqo.maxiov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max InOut Version", HFILL }},
+ { &hf_mq_spi_spqo_maxinoutversion,
+ { "Max InOut Version", "mq.spqo.maxiov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max InOut Version", HFILL }},
- { &hf_mq_spi_spqo_maxinversion,
- { "Max In Version", "mq.spqo.maxiv", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max In Version", HFILL }},
+ { &hf_mq_spi_spqo_maxinversion,
+ { "Max In Version", "mq.spqo.maxiv", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max In Version", HFILL }},
- { &hf_mq_spi_spqo_maxoutversion,
- { "Max Out Version", "mq.spqo.maxov", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Query Output Max Out Version", HFILL }},
+ { &hf_mq_spi_spqo_maxoutversion,
+ { "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_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(mq_spi_activate_vals), 0x0, "SPI Activate Input mode", HFILL }},
+ { &hf_mq_spi_spai_mode,
+ { "Mode", "mq.spai.mode", FT_UINT32, BASE_DEC, VALS(mq_spi_activate_vals), 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_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_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_spai_msgid,
+ { "Message Id", "mq.spai.msgid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "SPI Activate Input message id", HFILL }},
- { &hf_mq_spi_spgi_batchsize,
- { "Batch size", "mq.spgi.batchsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch size", HFILL }},
+ { &hf_mq_spi_spgi_batchsize,
+ { "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_batchint,
+ { "Batch interval", "mq.spgi.batchint", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input batch interval", HFILL }},
- { &hf_mq_spi_spgi_maxmsgsize,
- { "Max message size", "mq.spgi.maxmsgsize", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Input max message size", HFILL }},
+ { &hf_mq_spi_spgi_maxmsgsize,
+ { "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_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_spgo_size,
+ { "Size", "mq.spgo.size", FT_UINT32, BASE_DEC, NULL, 0x0, "SPI Get Output size", HFILL }},
- { &hf_mq_spi_options_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_options_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_options_syncpoint,
- { "Syncpoint", "mq.spi.options.sync", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_SYNCPOINT, "SPI Options syncpoint", HFILL }},
+ { &hf_mq_spi_options_syncpoint,
+ { "Syncpoint", "mq.spi.options.sync", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_SYNCPOINT, "SPI Options syncpoint", HFILL }},
- { &hf_mq_spi_options_deferred,
- { "Deferred", "mq.spi.options.deferred", FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_SPI_OPTIONS_DEFERRED, "SPI Options deferred", HFILL }},
+ { &hf_mq_spi_options_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_put_length,
+ { "Data length", "mq.put.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PUT Data length", HFILL }},
- { &hf_mq_open_options,
- { "Options", "mq.open.options", FT_UINT32, BASE_DEC, NULL, 0x0, "OPEN options", HFILL }},
+ { &hf_mq_open_options,
+ { "Options", "mq.open.options", FT_UINT32, BASE_DEC, NULL, 0x0, "OPEN options", HFILL }},
- { &hf_mq_ping_length,
- { "Length", "mq.ping.length", FT_UINT32, BASE_DEC, NULL, 0x0, "PING length", 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_ping_buffer,
+ { "Buffer", "mq.ping.buffer", FT_BYTES, BASE_NONE, NULL, 0x0, "PING buffer", HFILL }},
- { &hf_mq_reset_length,
- { "Length", "mq.ping.length", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET length", HFILL }},
+ { &hf_mq_reset_length,
+ { "Length", "mq.ping.length", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET length", HFILL }},
- { &hf_mq_reset_seqnum,
- { "Sequence number", "mq.ping.seqnum", FT_UINT32, BASE_DEC, NULL, 0x0, "RESET sequence number", HFILL }},
+ { &hf_mq_reset_seqnum,
+ { "Sequence number", "mq.ping.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_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(mq_status_vals), 0x0, "STATUS code", HFILL }},
+ { &hf_mq_status_code,
+ { "Code", "mq.status.code", FT_UINT32, BASE_DEC, VALS(mq_status_vals), 0x0, "STATUS code", HFILL }},
- { &hf_mq_status_value,
- { "Value", "mq.status.value", FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS value", HFILL }},
+ { &hf_mq_status_value,
+ { "Value", "mq.status.value", FT_UINT32, BASE_DEC, NULL, 0x0, "STATUS value", HFILL }},
- { &hf_mq_od_structid,
- { "OD structid", "mq.od.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_od_structid,
+ { "OD 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_version,
+ { "Version", "mq.od.version", FT_UINT32, BASE_DEC, NULL, 0x0, "OD version", HFILL }},
- { &hf_mq_od_objecttype,
- { "Object type", "mq.od.objtype", FT_UINT32, BASE_DEC, NULL, 0x0, "OD object type", HFILL }},
+ { &hf_mq_od_objecttype,
+ { "Object type", "mq.od.objtype", FT_UINT32, BASE_DEC, NULL, 0x0, "OD object type", HFILL }},
- { &hf_mq_od_objectname,
- { "Object name", "mq.od.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object name", HFILL }},
+ { &hf_mq_od_objectname,
+ { "Object name", "mq.od.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object name", HFILL }},
- { &hf_mq_od_objectqmgrname,
- { "Object queue manager name", "mq.od.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object queue manager name", HFILL }},
+ { &hf_mq_od_objectqmgrname,
+ { "Object queue manager name", "mq.od.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD object queue manager name", HFILL }},
- { &hf_mq_od_dynamicqname,
- { "Dynamic queue name", "mq.od.dynqname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD dynamic queue name", HFILL }},
+ { &hf_mq_od_dynamicqname,
+ { "Dynamic queue name", "mq.od.dynqname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD dynamic queue name", HFILL }},
- { &hf_mq_od_alternateuserid,
- { "Alternate user id", "mq.od.altuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate userid", HFILL }},
+ { &hf_mq_od_alternateuserid,
+ { "Alternate user id", "mq.od.altuserid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate userid", HFILL }},
- { &hf_mq_od_recspresent,
- { "Number of records", "mq.od.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "OD number of records", HFILL }},
+ { &hf_mq_od_recspresent,
+ { "Number of records", "mq.od.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "OD number of records", HFILL }},
- { &hf_mq_od_knowndestcount,
- { "Known destination count", "mq.od.kdestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD known destination count", HFILL }},
+ { &hf_mq_od_knowndestcount,
+ { "Known destination count", "mq.od.kdestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD known destination count", HFILL }},
- { &hf_mq_od_unknowndestcount,
- { "Unknown destination count", "mq.od.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD unknown destination count", HFILL }},
+ { &hf_mq_od_unknowndestcount,
+ { "Unknown destination count", "mq.od.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD unknown destination count", HFILL }},
- { &hf_mq_od_invaliddestcount,
- { "Invalid destination count", "mq.od.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD invalid destination count", HFILL }},
+ { &hf_mq_od_invaliddestcount,
+ { "Invalid destination count", "mq.od.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "OD invalid destination count", HFILL }},
- { &hf_mq_od_objectrecoffset,
- { "Offset of first OR", "mq.od.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first OR", HFILL }},
+ { &hf_mq_od_objectrecoffset,
+ { "Offset of first OR", "mq.od.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first OR", HFILL }},
- { &hf_mq_od_responserecoffset,
- { "Offset of first RR", "mq.od.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first RR", HFILL }},
+ { &hf_mq_od_responserecoffset,
+ { "Offset of first RR", "mq.od.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "OD offset of first RR", HFILL }},
- { &hf_mq_od_objectrecptr,
- { "Address of first OR", "mq.od.addror", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first OR", HFILL }},
+ { &hf_mq_od_objectrecptr,
+ { "Address of first OR", "mq.od.addror", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first OR", HFILL }},
- { &hf_mq_od_responserecptr,
- { "Address of first RR", "mq.od.addrrr", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first RR", HFILL }},
+ { &hf_mq_od_responserecptr,
+ { "Address of first RR", "mq.od.addrrr", FT_UINT32, BASE_HEX, NULL, 0x0, "OD address of first RR", HFILL }},
- { &hf_mq_od_alternatesecurityid,
- { "Alternate security id", "mq.od.altsecid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate security id", HFILL }},
+ { &hf_mq_od_alternatesecurityid,
+ { "Alternate security id", "mq.od.altsecid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD alternate security id", HFILL }},
- { &hf_mq_od_resolvedqname,
- { "Resolved queue name", "mq.od.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue name", HFILL }},
+ { &hf_mq_od_resolvedqname,
+ { "Resolved queue name", "mq.od.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue name", HFILL }},
- { &hf_mq_od_resolvedqmgrname,
- { "Resolved queue manager name", "mq.od.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue manager name", HFILL }},
+ { &hf_mq_od_resolvedqmgrname,
+ { "Resolved queue manager name", "mq.od.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OD resolved queue manager name", HFILL }},
- { &hf_mq_or_objname,
- { "Object name", "mq.od.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object name", HFILL }},
+ { &hf_mq_or_objname,
+ { "Object name", "mq.od.objname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object name", HFILL }},
- { &hf_mq_or_objqmgrname,
- { "Object queue manager name", "mq.od.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object queue manager name", HFILL }},
+ { &hf_mq_or_objqmgrname,
+ { "Object queue manager name", "mq.od.objqmgrname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "OR object queue manager name", HFILL }},
- { &hf_mq_rr_completioncode,
- { "Completion code", "mq.rr.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR completion code", HFILL }},
+ { &hf_mq_rr_completioncode,
+ { "Completion code", "mq.rr.completioncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR completion code", HFILL }},
- { &hf_mq_rr_reasoncode,
- { "Reason code", "mq.rr.reasoncode", FT_UINT32, BASE_DEC, NULL, 0x0, "OR reason code", HFILL }},
+ { &hf_mq_rr_reasoncode,
+ { "Reason 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_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_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_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_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_pmr_acttoken,
+ { "Accounting token", "mq.pmr.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "PMR accounting token", HFILL }},
- { &hf_mq_md_structid,
- { "MD structid", "mq.md.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_md_structid,
+ { "MD 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_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_report,
+ { "Report", "mq.md.report", FT_UINT32, BASE_DEC, NULL, 0x0, "MD report", HFILL }},
- { &hf_mq_md_msgtype,
- { "Message type", "mq.md.msgtype", FT_UINT32, BASE_DEC, NULL, 0x0, "MD message type", HFILL }},
+ { &hf_mq_md_msgtype,
+ { "Message 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_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_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_encoding,
+ { "Encoding", "mq.md.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "MD encoding", HFILL }},
- { &hf_mq_md_ccsid,
- { "Character set", "mq.md.ccsid", FT_INT32, BASE_DEC, NULL, 0x0, "MD character set", HFILL }},
+ { &hf_mq_md_ccsid,
+ { "Character set", "mq.md.ccsid", FT_INT32, BASE_DEC, NULL, 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_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_priority,
+ { "Priority", "mq.md.priority", FT_INT32, BASE_DEC, NULL, 0x0, "MD priority", HFILL }},
- { &hf_mq_md_persistence,
- { "Persistence", "mq.md.persistence", FT_UINT32, BASE_DEC, NULL, 0x0, "MD persistence", HFILL }},
+ { &hf_mq_md_persistence,
+ { "Persistence", "mq.md.persistence", FT_UINT32, BASE_DEC, NULL, 0x0, "MD persistence", HFILL }},
- { &hf_mq_md_msgid,
- { "MessageId", "mq.md.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Message Id", HFILL }},
+ { &hf_mq_md_msgid,
+ { "MessageId", "mq.md.msgid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Message Id", HFILL }},
- { &hf_mq_md_correlid,
- { "CorrelationId", "mq.md.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Correlation Id", HFILL }},
+ { &hf_mq_md_correlid,
+ { "CorrelationId", "mq.md.correlid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD Correlation Id", HFILL }},
- { &hf_mq_md_backountcount,
- { "Backount count", "mq.md.backount", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Backount count", HFILL }},
+ { &hf_mq_md_backountcount,
+ { "Backount count", "mq.md.backount", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Backount count", HFILL }},
- { &hf_mq_md_replytoq,
- { "ReplyToQ", "mq.md.replytoq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD ReplyTo queue", HFILL }},
+ { &hf_mq_md_replytoq,
+ { "ReplyToQ", "mq.md.replytoq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD ReplyTo queue", HFILL }},
- { &hf_mq_md_replytoqmgr,
- { "ReplyToQMgr", "mq.md.replytoqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD ReplyTo queue manager", HFILL }},
+ { &hf_mq_md_replytoqmgr,
+ { "ReplyToQMgr", "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_userid,
+ { "UserId", "mq.md.userid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD UserId", HFILL }},
- { &hf_mq_md_acttoken,
- { "Accounting token", "mq.md.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "MD accounting token", HFILL }},
+ { &hf_mq_md_acttoken,
+ { "Accounting token", "mq.md.acttoken", FT_BYTES, BASE_NONE, NULL, 0x0, "MD accounting token", HFILL }},
- { &hf_mq_md_appliddata,
- { "ApplicationId data", "mq.md.appldata", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put applicationId data", HFILL }},
+ { &hf_mq_md_appliddata,
+ { "ApplicationId data", "mq.md.appldata", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put applicationId data", HFILL }},
- { &hf_mq_md_putappltype,
- { "Put Application Type", "mq.md.appltype", FT_INT32, BASE_DEC, NULL, 0x0, "MD Put application type", HFILL }},
+ { &hf_mq_md_putappltype,
+ { "Put Application Type", "mq.md.appltype", FT_INT32, BASE_DEC, NULL, 0x0, "MD Put application type", HFILL }},
- { &hf_mq_md_putapplname,
- { "Put Application Name", "mq.md.applname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put application name", HFILL }},
+ { &hf_mq_md_putapplname,
+ { "Put Application Name", "mq.md.applname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put application name", HFILL }},
- { &hf_mq_md_putdate,
- { "Put date", "mq.md.date", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put date", HFILL }},
+ { &hf_mq_md_putdate,
+ { "Put date", "mq.md.date", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put date", HFILL }},
- { &hf_mq_md_puttime,
- { "Put time", "mq.md.time", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put time", HFILL }},
+ { &hf_mq_md_puttime,
+ { "Put time", "mq.md.time", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Put time", HFILL }},
- { &hf_mq_md_applorigindata,
- { "Application original data", "mq.md.origdata", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Application original data", HFILL }},
+ { &hf_mq_md_applorigindata,
+ { "Application original data", "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_groupid,
+ { "GroupId", "mq.md.groupid", FT_BYTES, BASE_NONE, NULL, 0x0, "MD GroupId", HFILL }},
- { &hf_mq_md_msgseqnumber,
- { "Message sequence number", "mq.md.msgseqnumber", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Message sequence number", HFILL }},
+ { &hf_mq_md_msgseqnumber,
+ { "Message sequence number", "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_offset,
+ { "Offset", "mq.md.offset", FT_UINT32, BASE_DEC, NULL, 0x0, "MD Offset", HFILL }},
- { &hf_mq_md_msgflags,
- { "Message flags", "mq.md.msgflags", FT_UINT32, BASE_HEX, NULL, 0x0, "MD Message flags", HFILL }},
+ { &hf_mq_md_msgflags,
+ { "Message flags", "mq.md.msgflags", FT_UINT32, BASE_HEX, NULL, 0x0, "MD Message flags", HFILL }},
- { &hf_mq_md_originallength,
- { "Original length", "mq.md.origdata", FT_INT32, BASE_DEC, NULL, 0x0, "MD Original length", HFILL }},
+ { &hf_mq_md_originallength,
+ { "Original length", "mq.md.origdata", FT_INT32, BASE_DEC, NULL, 0x0, "MD Original length", HFILL }},
- { &hf_mq_md_hidden_lastformat,
- { "Last format", "mq.md.lastformat", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Last format", HFILL }},
+ { &hf_mq_md_hidden_lastformat,
+ { "Last format", "mq.md.lastformat", FT_STRINGZ, BASE_NONE, NULL, 0x0, "MD Last format", HFILL }},
- { &hf_mq_dlh_structid,
- { "DLH structid", "mq.dlh.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_dlh_structid,
+ { "DLH 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_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_reason,
+ { "Reason", "mq.dlh.reason", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH reason", HFILL }},
- { &hf_mq_dlh_destq,
- { "Destination queue", "mq.dlh.destq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH destination queue", HFILL }},
+ { &hf_mq_dlh_destq,
+ { "Destination queue", "mq.dlh.destq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH destination queue", HFILL }},
- { &hf_mq_dlh_destqmgr,
- { "Destination queue manager", "mq.dlh.destqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH destination queue manager", HFILL }},
+ { &hf_mq_dlh_destqmgr,
+ { "Destination queue manager", "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_encoding,
+ { "Encoding", "mq.dlh.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "DLH encoding", HFILL }},
- { &hf_mq_dlh_ccsid,
- { "Character set", "mq.dlh.ccsid", FT_INT32, BASE_DEC, NULL, 0x0, "DLH character set", HFILL }},
+ { &hf_mq_dlh_ccsid,
+ { "Character set", "mq.dlh.ccsid", FT_INT32, BASE_DEC, NULL, 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_format,
+ { "Format", "mq.dlh.format", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH format", HFILL }},
- { &hf_mq_dlh_putappltype,
- { "Put application type", "mq.dlh.putappltype", FT_INT32, BASE_DEC, NULL, 0x0, "DLH put application type", HFILL }},
+ { &hf_mq_dlh_putappltype,
+ { "Put application type", "mq.dlh.putappltype", FT_INT32, BASE_DEC, NULL, 0x0, "DLH put application type", HFILL }},
- { &hf_mq_dlh_putapplname,
- { "Put application name", "mq.dlh.putapplname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put application name", HFILL }},
+ { &hf_mq_dlh_putapplname,
+ { "Put application name", "mq.dlh.putapplname", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put application name", HFILL }},
- { &hf_mq_dlh_putdate,
- { "Put date", "mq.dlh.putdate", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put date", HFILL }},
+ { &hf_mq_dlh_putdate,
+ { "Put date", "mq.dlh.putdate", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put date", HFILL }},
- { &hf_mq_dlh_puttime,
- { "Put time", "mq.dlh.puttime", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put time", HFILL }},
+ { &hf_mq_dlh_puttime,
+ { "Put time", "mq.dlh.puttime", FT_STRINGZ, BASE_NONE, NULL, 0x0, "DLH put time", HFILL }},
- { &hf_mq_dh_putmsgrecfields,
- { "Flags PMR", "mq.dh.flagspmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH flags PMR", HFILL }},
+ { &hf_mq_dh_putmsgrecfields,
+ { "Flags PMR", "mq.dh.flagspmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH flags PMR", HFILL }},
- { &hf_mq_dh_recspresent,
- { "Number of records", "mq.dh.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "DH number of records", HFILL }},
+ { &hf_mq_dh_recspresent,
+ { "Number of records", "mq.dh.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "DH number of records", HFILL }},
- { &hf_mq_dh_objectrecoffset,
- { "Offset of first OR", "mq.dh.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first OR", HFILL }},
+ { &hf_mq_dh_objectrecoffset,
+ { "Offset of first OR", "mq.dh.offsetor", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first OR", HFILL }},
- { &hf_mq_dh_putmsgrecoffset,
- { "Offset of first PMR", "mq.dh.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first PMR", HFILL }},
+ { &hf_mq_dh_putmsgrecoffset,
+ { "Offset of first PMR", "mq.dh.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "DH offset of first PMR", HFILL }},
- { &hf_mq_gmo_structid,
- { "GMO structid", "mq.gmo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_gmo_structid,
+ { "GMO 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_version,
+ { "Version", "mq.gmo.version", FT_UINT32, BASE_DEC, NULL, 0x0, "GMO version", HFILL }},
- { &hf_mq_gmo_options,
- { "Options", "mq.gmo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO options", HFILL }},
+ { &hf_mq_gmo_options,
+ { "Options", "mq.gmo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO options", HFILL }},
- { &hf_mq_gmo_waitinterval,
- { "Wait Interval", "mq.gmo.waitint", FT_INT32, BASE_DEC, NULL, 0x0, "GMO wait interval", HFILL }},
+ { &hf_mq_gmo_waitinterval,
+ { "Wait Interval", "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_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_signal2,
+ { "Signal 2", "mq.gmo.signal2", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO signal 2", HFILL }},
- { &hf_mq_gmo_resolvedqname,
- { "Resolved queue name", "mq.gmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "GMO resolved queue name", HFILL }},
+ { &hf_mq_gmo_resolvedqname,
+ { "Resolved queue name", "mq.gmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "GMO resolved queue name", HFILL }},
- { &hf_mq_gmo_matchoptions,
- { "Match options", "mq.gmo.matchopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO match options", HFILL }},
+ { &hf_mq_gmo_matchoptions,
+ { "Match options", "mq.gmo.matchopt", FT_UINT32, BASE_HEX, NULL, 0x0, "GMO match options", HFILL }},
- { &hf_mq_gmo_groupstatus,
- { "Group status", "mq.gmo.grpstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO group status", HFILL }},
+ { &hf_mq_gmo_groupstatus,
+ { "Group status", "mq.gmo.grpstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO group status", HFILL }},
- { &hf_mq_gmo_segmentstatus,
- { "Segment status", "mq.gmo.sgmtstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segment status", HFILL }},
+ { &hf_mq_gmo_segmentstatus,
+ { "Segment status", "mq.gmo.sgmtstat", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segment status", HFILL }},
- { &hf_mq_gmo_segmentation,
- { "Segmentation", "mq.gmo.segmentation", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO segmentation", HFILL }},
+ { &hf_mq_gmo_segmentation,
+ { "Segmentation", "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_reserved,
+ { "Reserved", "mq.gmo.reserved", FT_UINT8, BASE_HEX, NULL, 0x0, "GMO reserved", HFILL }},
- { &hf_mq_gmo_msgtoken,
- { "Message token", "mq.gmo.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "GMO message token", HFILL }},
+ { &hf_mq_gmo_msgtoken,
+ { "Message token", "mq.gmo.msgtoken", FT_BYTES, BASE_NONE, NULL, 0x0, "GMO message token", HFILL }},
- { &hf_mq_gmo_returnedlength,
- { "Returned length", "mq.gmo.retlen", FT_INT32, BASE_DEC, NULL, 0x0, "GMO returned length", HFILL }},
+ { &hf_mq_gmo_returnedlength,
+ { "Returned length", "mq.gmo.retlen", FT_INT32, BASE_DEC, NULL, 0x0, "GMO returned length", HFILL }},
- { &hf_mq_pmo_structid,
- { "PMO structid", "mq.pmo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
+ { &hf_mq_pmo_structid,
+ { "PMO structid", "mq.pmo.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, NULL, HFILL }},
- { &hf_mq_pmo_version,
- { "Version", "mq.pmo.structid", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO version", HFILL }},
+ { &hf_mq_pmo_version,
+ { "Version", "mq.pmo.structid", 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,
+ { "Options", "mq.pmo.options", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO options", HFILL }},
- { &hf_mq_pmo_timeout,
- { "Timeout", "mq.pmo.timeout", FT_INT32, BASE_DEC, NULL, 0x0, "PMO time out", 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_context,
+ { "Context", "mq.pmo.context", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO context", HFILL }},
- { &hf_mq_pmo_knowndestcount,
- { "Known destination count", "mq.pmo.kdstcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO known destination count", HFILL }},
+ { &hf_mq_pmo_knowndestcount,
+ { "Known destination count", "mq.pmo.kdstcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO known destination count", HFILL }},
- { &hf_mq_pmo_unknowndestcount,
- { "Unknown destination count", "mq.pmo.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO unknown destination count", HFILL }},
+ { &hf_mq_pmo_unknowndestcount,
+ { "Unknown destination count", "mq.pmo.udestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO unknown destination count", HFILL }},
- { &hf_mq_pmo_invaliddestcount,
- { "Invalid destination count", "mq.pmo.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO invalid destination count", HFILL }},
+ { &hf_mq_pmo_invaliddestcount,
+ { "Invalid destination count", "mq.pmo.idestcount", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO invalid destination count", HFILL }},
- { &hf_mq_pmo_resolvedqname,
- { "Resolved queue name", "mq.pmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue name", HFILL }},
+ { &hf_mq_pmo_resolvedqname,
+ { "Resolved queue name", "mq.pmo.resolvq", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue name", HFILL }},
- { &hf_mq_pmo_resolvedqmgrname,
- { "Resolved queue name manager", "mq.pmo.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue manager name", HFILL }},
+ { &hf_mq_pmo_resolvedqmgrname,
+ { "Resolved queue name manager", "mq.pmo.resolvqmgr", FT_STRINGZ, BASE_NONE, NULL, 0x0, "PMO resolved queue manager name", HFILL }},
- { &hf_mq_pmo_recspresent,
- { "Number of records", "mq.pmo.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO number of records", HFILL }},
+ { &hf_mq_pmo_recspresent,
+ { "Number of records", "mq.pmo.nbrrec", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO number of records", HFILL }},
- { &hf_mq_pmo_putmsgrecfields,
- { "Flags PMR fields", "mq.pmo.flagspmr", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO flags PMR fields", HFILL }},
+ { &hf_mq_pmo_putmsgrecfields,
+ { "Flags PMR fields", "mq.pmo.flagspmr", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO flags PMR fields", HFILL }},
- { &hf_mq_pmo_putmsgrecoffset,
- { "Offset of first PMR", "mq.pmo.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first PMR", HFILL }},
+ { &hf_mq_pmo_putmsgrecoffset,
+ { "Offset of first PMR", "mq.pmo.offsetpmr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first PMR", HFILL }},
- { &hf_mq_pmo_responserecoffset,
- { "Offset of first RR", "mq.pmo.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first RR", HFILL }},
+ { &hf_mq_pmo_responserecoffset,
+ { "Offset of first RR", "mq.pmo.offsetrr", FT_UINT32, BASE_DEC, NULL, 0x0, "PMO offset of first RR", HFILL }},
- { &hf_mq_pmo_putmsgrecptr,
- { "Address of first record", "mq.pmo.addrrec", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first record", HFILL }},
+ { &hf_mq_pmo_putmsgrecptr,
+ { "Address of first record", "mq.pmo.addrrec", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first record", HFILL }},
- { &hf_mq_pmo_responserecptr,
- { "Address of first response record", "mq.pmo.addrres", FT_UINT32, BASE_HEX, NULL, 0x0, "PMO address of first response record", HFILL }},
+ { &hf_mq_pmo_responserecptr,
+ { "Address of first response record", "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_structid,
+ { "Structid", "mq.head.structid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "Header structid", HFILL }},
- { &hf_mq_head_version,
- { "Structid", "mq.head.version", FT_UINT32, BASE_DEC, NULL, 0x0, "Header version", HFILL }},
+ { &hf_mq_head_version,
+ { "Structid", "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_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_encoding,
+ { "Encoding", "mq.head.encoding", FT_UINT32, BASE_DEC, NULL, 0x0, "Header encoding", HFILL }},
- { &hf_mq_head_ccsid,
- { "Character set", "mq.head.ccsid", FT_INT32, BASE_DEC, NULL, 0x0, "Header character set", HFILL }},
+ { &hf_mq_head_ccsid,
+ { "Character set", "mq.head.ccsid", FT_INT32, BASE_DEC, NULL, 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_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_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_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_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_returnvalue,
+ { "Return value", "mq.xa.returnvalue", FT_INT32, BASE_DEC, VALS(mq_xaer_vals), 0x0, "XA Return Value", HFILL }},
- { &hf_mq_xa_tmflags,
- { "Transaction Manager Flags", "mq.xa.tmflags", FT_UINT32, BASE_HEX, NULL, 0x0, "XA Transaction Manager Flags", HFILL }},
+ { &hf_mq_xa_tmflags,
+ { "Transaction Manager Flags", "mq.xa.tmflags", FT_UINT32, BASE_HEX, NULL, 0x0, "XA Transaction Manager Flags", HFILL }},
- { &hf_mq_xa_rmid,
- { "Resource manager ID", "mq.xa.rmid", FT_UINT32, BASE_DEC, NULL, 0x0, "XA Resource Manager ID", HFILL }},
+ { &hf_mq_xa_rmid,
+ { "Resource manager ID", "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_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_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_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_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_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_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_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_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_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_formatid,
+ { "Format ID", "mq.xa.xid.formatid", FT_INT32, BASE_DEC, NULL, 0x0, "XA Xid Format ID", HFILL }},
- { &hf_mq_xa_xid_globalxid_length,
- { "Global TransactionId Length", "mq.xa.xid.gxidl", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Global TransactionId Length", HFILL }},
+ { &hf_mq_xa_xid_globalxid_length,
+ { "Global TransactionId Length", "mq.xa.xid.gxidl", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Global TransactionId Length", HFILL }},
- { &hf_mq_xa_xid_brq_length,
- { "Branch Qualifier Length", "mq.xa.xid.bql", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Branch Qualifier Length", HFILL }},
+ { &hf_mq_xa_xid_brq_length,
+ { "Branch Qualifier Length", "mq.xa.xid.bql", FT_UINT8, BASE_DEC, NULL, 0x0, "XA Xid Branch Qualifier Length", HFILL }},
- { &hf_mq_xa_xid_globalxid,
- { "Global TransactionId", "mq.xa.xid.gxid", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Global TransactionId", HFILL }},
-
- { &hf_mq_xa_xid_brq,
- { "Branch Qualifier", "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 }}
-
- };
- static gint *ett[] = {
- &ett_mq,
- &ett_mq_tsh,
- &ett_mq_tsh_tcf,
- &ett_mq_api,
- &ett_mq_msh,
- &ett_mq_xqh,
- &ett_mq_id,
- &ett_mq_id_icf,
- &ett_mq_id_ief,
- &ett_mq_uid,
- &ett_mq_conn,
- &ett_mq_inq,
- &ett_mq_spi,
- &ett_mq_spi_base,
- &ett_mq_spi_options,
- &ett_mq_put,
- &ett_mq_open,
- &ett_mq_ping,
- &ett_mq_reset,
- &ett_mq_status,
- &ett_mq_od,
- &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_pmo,
- &ett_mq_head,
- &ett_mq_xa,
- &ett_mq_xa_tmflags,
- &ett_mq_xa_xid,
- &ett_mq_xa_info,
- };
-
- 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);
+ { &hf_mq_xa_xid_globalxid,
+ { "Global TransactionId", "mq.xa.xid.gxid", FT_BYTES, BASE_NONE, NULL, 0x0, "XA Xid Global TransactionId", HFILL }},
+
+ { &hf_mq_xa_xid_brq,
+ { "Branch Qualifier", "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 }}
+
+ };
+ static gint *ett[] = {
+ &ett_mq,
+ &ett_mq_tsh,
+ &ett_mq_tsh_tcf,
+ &ett_mq_api,
+ &ett_mq_msh,
+ &ett_mq_xqh,
+ &ett_mq_id,
+ &ett_mq_id_icf,
+ &ett_mq_id_ief,
+ &ett_mq_uid,
+ &ett_mq_conn,
+ &ett_mq_inq,
+ &ett_mq_spi,
+ &ett_mq_spi_base,
+ &ett_mq_spi_options,
+ &ett_mq_put,
+ &ett_mq_open,
+ &ett_mq_ping,
+ &ett_mq_reset,
+ &ett_mq_status,
+ &ett_mq_od,
+ &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_pmo,
+ &ett_mq_head,
+ &ett_mq_xa,
+ &ett_mq_xa_tmflags,
+ &ett_mq_xa_xid,
+ &ett_mq_xa_info,
+ };
+
+ 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 = 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");
+ /* 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 = 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");
}