packet-mq: Improve display of ID Struct + Segmented Msgs

Improve display of ID Struct for FAP Lvl 13
Improve display for Segmented MQ Mesages
Add also the ReasonCode of the ASYNCH_MESSAGE in column and tre node
Added various new CONST for display

Change-Id: I458296e466d0744627e0b4f645d634b0c6d930de
Reviewed-on: https://code.wireshark.org/review/25009
Petri-Dish: Anders Broman <a.broman58@gmail.com>
Tested-by: Petri Dish Buildbot
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Robert Grange 2017-12-27 08:17:19 +01:00 committed by Anders Broman
parent 7dcf57719f
commit 487eae3507
5 changed files with 208 additions and 107 deletions

View File

@ -3571,7 +3571,7 @@ Ishraq Ibne Ashraf <ishraq[AT]tinkerforge.com> {
tfp (Tinkerforge) dissector
}
RobiOneKenobi <robionekenobi[AT]bluewin.ch> {
Robert Grange <robionekenobi[AT]bluewin.ch> {
IBM WebSphere MQ protocol dissector enhancements
}

View File

@ -272,6 +272,7 @@ DEF_VALSB(ChannelType)
/* 8*/ DEF_VALS1(MQCHT_CLUSRCVR),
/* 9*/ DEF_VALS1(MQCHT_CLUSSDR),
/* 10*/ DEF_VALS1(MQCHT_MQTT),
/* 11*/ DEF_VALS1(MQCHT_AMQP),
DEF_VALSE;
DEF_VALSB(ServiceIntervalEvent)
@ -299,7 +300,7 @@ DEF_VALSB(QueueType)
/* 1001*/ DEF_VALS1(MQQT_ALL),
DEF_VALSE;
DEF_VALSB(EventRule)
DEF_VALSB(MQEVR)
/* 0*/ DEF_VALS1(MQEVR_DISABLED),
/* 1*/ DEF_VALS1(MQEVR_ENABLED),
/* 2*/ DEF_VALS1(MQEVR_EXCEPTION),
@ -458,6 +459,11 @@ DEF_VALSB(Persistence)
/* 2*/ DEF_VALS1(MQPER_PERSISTENCE_AS_Q_DEF),
DEF_VALSE;
DEF_VALSB(MQUCI)
/* 0*/ DEF_VALS1(MQUCI_NO),
/* 1*/ DEF_VALS1(MQUCI_YES),
DEF_VALSE;
#if 0
DEF_VALSB(MQLR)
/* -2*/ DEF_VALS1(MQLR_MAX),
@ -559,8 +565,7 @@ DEF_VALSB(AsynchronousStateValues)
/* 7*/ DEF_VALS1(MQAS_INACTIVE),
DEF_VALSE;
#if 0
DEF_VALSB(AuthorityValues)
DEF_VALSB(MQAUTH)
/* -3*/ DEF_VALS1(MQAUTH_ALL_MQI),
/* -2*/ DEF_VALS1(MQAUTH_ALL_ADMIN),
/* -1*/ DEF_VALS1(MQAUTH_ALL),
@ -588,7 +593,6 @@ DEF_VALSB(AuthorityValues)
/* 21*/ DEF_VALS1(MQAUTH_RESUME),
/* 22*/ DEF_VALS1(MQAUTH_SYSTEM),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(BridgeTypes)
@ -1031,43 +1035,40 @@ DEF_VALSB(MQADPCTX)
/* 1*/ DEF_VALS1(MQADPCTX_YES),
DEF_VALSE;
#if 0
DEF_VALSB(MQSECCOMM)
/* 0*/ DEF_VALS1(MQSECCOMM_NO),
/* 1*/ DEF_VALS1(MQSECCOMM_YES),
/* 2*/ DEF_VALS1(MQSECCOMM_ANON),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(LDAPAuthorisationMethod)
DEF_VALSB(MQLDAP_AUTHORMD)
/* 0*/ DEF_VALS1(MQLDAP_AUTHORMD_OS),
/* 1*/ DEF_VALS1(MQLDAP_AUTHORMD_SEARCHGRP),
/* 2*/ DEF_VALS1(MQLDAP_AUTHORMD_SEARCHUSR),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(LDAPNestedGroupPolicy)
DEF_VALSB(MQLDAP_NESTGRP)
/* 0*/ DEF_VALS1(MQLDAP_NESTGRP_NO),
/* 1*/ DEF_VALS1(MQLDAP_NESTGRP_YES),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(AuthenticationMethod)
DEF_VALSB(MQAUTHENTICATE)
/* 0*/ DEF_VALS1(MQAUTHENTICATE_OS),
/* 1*/ DEF_VALS1(MQAUTHENTICATE_PAM),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(QMgrLDAPConnectionStatus)
DEF_VALSB(MQLDAPC)
/* 0*/ DEF_VALS1(MQLDAPC_INACTIVE),
/* 1*/ DEF_VALS1(MQLDAPC_CONNECTED),
/* 2*/ DEF_VALS1(MQLDAPC_ERROR),
DEF_VALSE;
#endif
DEF_VALSB(MQZAET)
/* 0*/ DEF_VALS1(MQZAET_NONE),
/* 1*/ DEF_VALS1(MQZAET_PRINCIPAL),
/* 2*/ DEF_VALS1(MQZAET_GROUP),
/* 3*/ DEF_VALS1(MQZAET_UNKNOWN),
DEF_VALSE;
DEF_VALSB(InhibitPublications)
/* 0*/ DEF_VALS1(MQTA_PUB_AS_PARENT),
@ -1154,29 +1155,26 @@ DEF_VALSB(MQSYSP)
/* 36*/ DEF_VALS1(MQSYSP_STATUS_COPYING_LOG),
DEF_VALSE;
DEF_VALSB(DurableSubscriptions)
DEF_VALSB(MQSUB_DURABLE)
/*-1*/ DEF_VALS1(MQSUB_DURABLE_ALL),
/* 0*/ DEF_VALS1(MQSUB_DURABLE_AS_PARENT),
/* 1*/ DEF_VALS1(MQSUB_DURABLE_ALLOWED),
/* 2*/ DEF_VALS1(MQSUB_DURABLE_INHIBITED),
/* 1*/ DEF_VALS2(MQSUB_DURABLE_ALLOWED, "ALLOWED/YES"),
/* 2*/ DEF_VALS2(MQSUB_DURABLE_INHIBITED, "INHIBITED/NO"),
DEF_VALSE;
#if 0
DEF_VALSB(Durable)
/* -1*/ DEF_VALS1(MQSUB_DURABLE_ALL),
/* 1*/ DEF_VALS1(MQSUB_DURABLE_YES),
/* 2*/ DEF_VALS1(MQSUB_DURABLE_NO),
DEF_VALSB(MQQSO)
/* 0*/ DEF_VALS1(MQQSO_NO),
/* 1*/ DEF_VALS2(MQQSO_YES, "SHARED/YES"),
/* 2*/ DEF_VALS1(MQQSO_EXCLUSIVE),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(SubscriptionTypes)
DEF_VALSB(MQSUBTYPE)
/* -2*/ DEF_VALS1(MQSUBTYPE_USER),
/* -1*/ DEF_VALS1(MQSUBTYPE_ALL),
/* 1*/ DEF_VALS1(MQSUBTYPE_API),
/* 2*/ DEF_VALS1(MQSUBTYPE_ADMIN),
/* 3*/ DEF_VALS1(MQSUBTYPE_PROXY),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(SubscriptionDestinationClass)
@ -1185,12 +1183,10 @@ DEF_VALSB(SubscriptionDestinationClass)
DEF_VALSE;
#endif
#if 0
DEF_VALSB(SubscriptionRequestOnly)
DEF_VALSB(MQRU_PUBLISH)
/* 1*/ DEF_VALS1(MQRU_PUBLISH_ON_REQUEST),
/* 2*/ DEF_VALS1(MQRU_PUBLISH_ALL),
DEF_VALSE;
#endif
#if 0
DEF_VALSB(TimeUnits)
@ -1585,6 +1581,27 @@ DEF_VALSB(MQRDNS)
/* 1*/ DEF_VALS1(MQRDNS_DISABLED),
DEF_VALSE;
DEF_VALSB(MQCIT)
/* 1*/ DEF_VALS1(MQCIT_MULTICAST),
DEF_VALSE;
DEF_VALSB(MQMCB)
/* 0*/ DEF_VALS1(MQMCB_DISABLED),
/* 1*/ DEF_VALS1(MQMCB_ENABLED),
DEF_VALSE;
DEF_VALSB(MQNSH)
/*-1*/ DEF_VALS1(MQNSH_ALL),
/* 0*/ DEF_VALS1(MQNSH_NONE),
DEF_VALSE;
DEF_VALSB(MQPSST)
/* 0*/ DEF_VALS1(MQPSST_ALL),
/* 1*/ DEF_VALS1(MQPSST_LOCAL),
/* 2*/ DEF_VALS1(MQPSST_PARENT),
/* 3*/ DEF_VALS1(MQPSST_CHILD),
DEF_VALSE;
DEF_VALSB(SMDSUsage)
/* 0*/ DEF_VALS1(MQUSAGE_SMDS_AVAILABLE),
/* 1*/ DEF_VALS1(MQUSAGE_SMDS_NO_DATA),
@ -4465,20 +4482,20 @@ DEF_VALSB(MQCFINT_Parse)
/* 30*/ DEF_VALS2(MQIA_SYNCPOINT, GET_VALSP(SyncpointAvailability)),
/* 32*/ DEF_VALS2(MQIA_PLATFORM, GET_VALSP(Platform)),
/* 34*/ DEF_VALS2(MQIA_DIST_LISTS, GET_VALSP(DistributionLists)),
/* 42*/ DEF_VALS2(MQIA_Q_DEPTH_MAX_EVENT, GET_VALSP(EventRule)),
/* 43*/ DEF_VALS2(MQIA_Q_DEPTH_HIGH_EVENT, GET_VALSP(EventRule)),
/* 44*/ DEF_VALS2(MQIA_Q_DEPTH_LOW_EVENT, GET_VALSP(EventRule)),
/* 42*/ DEF_VALS2(MQIA_Q_DEPTH_MAX_EVENT, GET_VALSP(MQEVR)),
/* 43*/ DEF_VALS2(MQIA_Q_DEPTH_HIGH_EVENT, GET_VALSP(MQEVR)),
/* 44*/ DEF_VALS2(MQIA_Q_DEPTH_LOW_EVENT, GET_VALSP(MQEVR)),
/* 45*/ DEF_VALS2(MQIA_SCOPE, GET_VALSP(QueueDefinitionScope)),
/* 46*/ DEF_VALS2(MQIA_Q_SERVICE_INTERVAL_EVENT, GET_VALSP(ServiceIntervalEvent)),
/* 47*/ DEF_VALS2(MQIA_AUTHORITY_EVENT, GET_VALSP(EventRule)),
/* 48*/ DEF_VALS2(MQIA_INHIBIT_EVENT, GET_VALSP(EventRule)),
/* 49*/ DEF_VALS2(MQIA_LOCAL_EVENT, GET_VALSP(EventRule)),
/* 50*/ DEF_VALS2(MQIA_REMOTE_EVENT, GET_VALSP(EventRule)),
/* 51*/ DEF_VALS2(MQIA_CONFIGURATION_EVENT, GET_VALSP(EventRule)),
/* 52*/ DEF_VALS2(MQIA_START_STOP_EVENT, GET_VALSP(EventRule)),
/* 53*/ DEF_VALS2(MQIA_PERFORMANCE_EVENT, GET_VALSP(EventRule)),
/* 47*/ DEF_VALS2(MQIA_AUTHORITY_EVENT, GET_VALSP(MQEVR)),
/* 48*/ DEF_VALS2(MQIA_INHIBIT_EVENT, GET_VALSP(MQEVR)),
/* 49*/ DEF_VALS2(MQIA_LOCAL_EVENT, GET_VALSP(MQEVR)),
/* 50*/ DEF_VALS2(MQIA_REMOTE_EVENT, GET_VALSP(MQEVR)),
/* 51*/ DEF_VALS2(MQIA_CONFIGURATION_EVENT, GET_VALSP(MQEVR)),
/* 52*/ DEF_VALS2(MQIA_START_STOP_EVENT, GET_VALSP(MQEVR)),
/* 53*/ DEF_VALS2(MQIA_PERFORMANCE_EVENT, GET_VALSP(MQEVR)),
/* 55*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF, GET_VALSP(ChanAutoDef)),
/* 56*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF_EVENT, GET_VALSP(EventRule)),
/* 56*/ DEF_VALS2(MQIA_CHANNEL_AUTO_DEF_EVENT, GET_VALSP(MQEVR)),
/* 57*/ DEF_VALS2(MQIA_INDEX_TYPE, GET_VALSP(IndexTypes)),
/* 61*/ DEF_VALS2(MQIA_DEF_BIND, GET_VALSP(Bindings)),
/* 63*/ DEF_VALS2(MQIA_QSG_DISP, GET_VALSP(QShrGrpDisp)),
@ -4486,16 +4503,16 @@ DEF_VALSB(MQCFINT_Parse)
/* 65*/ DEF_VALS2(MQIA_IGQ_PUT_AUTHORITY, GET_VALSP(IGQPutAuthority)),
/* 66*/ DEF_VALS2(MQIA_AUTH_INFO_TYPE, GET_VALSP(AuthInfoType)),
/* 71*/ DEF_VALS2(MQIA_CF_RECOVER, GET_VALSP(CFRecoverability)),
/* 73*/ DEF_VALS2(MQIA_CHANNEL_EVENT, GET_VALSP(EventRule)),
/* 74*/ DEF_VALS2(MQIA_BRIDGE_EVENT, GET_VALSP(EventRule)),
/* 75*/ DEF_VALS2(MQIA_SSL_EVENT, GET_VALSP(EventRule)),
/* 73*/ DEF_VALS2(MQIA_CHANNEL_EVENT, GET_VALSP(MQEVR)),
/* 74*/ DEF_VALS2(MQIA_BRIDGE_EVENT, GET_VALSP(MQEVR)),
/* 75*/ DEF_VALS2(MQIA_SSL_EVENT, GET_VALSP(MQEVR)),
/* 77*/ DEF_VALS2(MQIA_SHARED_Q_Q_MGR_NAME, GET_VALSP(SharedQueueQueueManagerName)),
/* 78*/ DEF_VALS2(MQIA_NPM_CLASS, GET_VALSP(NonpersistentMsgCls)),
/* 92*/ DEF_VALS2(MQIA_SSL_FIPS_REQUIRED, GET_VALSP(FipsRequired)),
/* 93*/ DEF_VALS2(MQIA_IP_ADDRESS_VERSION, GET_VALSP(IPAddressVersion)),
/* 94*/ DEF_VALS2(MQIA_LOGGER_EVENT, GET_VALSP(EventRule)),
/* 94*/ DEF_VALS2(MQIA_LOGGER_EVENT, GET_VALSP(MQEVR)),
/* 98*/ DEF_VALS2(MQIA_CLWL_USEQ, GET_VALSP(CLWLUseQ)),
/* 99*/ DEF_VALS2(MQIA_COMMAND_EVENT, GET_VALSP(EventRule)),
/* 99*/ DEF_VALS2(MQIA_COMMAND_EVENT, GET_VALSP(MQEVR)),
/* 102*/ DEF_VALS2(MQIA_ADOPTNEWMCA_CHECK, GET_VALSP(AdoptNewMCACheck)),
/* 103*/ DEF_VALS2(MQIA_ADOPTNEWMCA_TYPE, GET_VALSP(AdoptNewMCAType)),
/* 106*/ DEF_VALS2(MQIA_DNS_WLM, GET_VALSP(DNSWLM)),
@ -4520,7 +4537,7 @@ DEF_VALSB(MQCFINT_Parse)
/* 137*/ DEF_VALS2(MQIA_TRACE_ROUTE_RECORDING, GET_VALSP(TraceRouteRecording)),
/* 138*/ DEF_VALS2(MQIA_ACTIVITY_RECORDING, GET_VALSP(ActivityRecording)),
/* 141*/ DEF_VALS2(MQIA_SECURITY_CASE, GET_VALSP(SecurityCase)),
/* 175*/ DEF_VALS2(MQIA_DURABLE_SUB, GET_VALSP(DurableSubscriptions)),
/* 175*/ DEF_VALS2(MQIA_DURABLE_SUB, GET_VALSP(MQSUB_DURABLE)),
/* 176*/ DEF_VALS2(MQIA_MULTICAST, GET_VALSP(MQMC)),
/* 181*/ DEF_VALS2(MQIA_INHIBIT_PUB, GET_VALSP(InhibitPublications)),
/* 182*/ DEF_VALS2(MQIA_INHIBIT_SUB, GET_VALSP(InhibitSubscriptions)),
@ -4543,8 +4560,11 @@ DEF_VALSB(MQCFINT_Parse)
/* 219*/ DEF_VALS2(MQIA_PUB_SCOPE, GET_VALSP(PubSubScope)),
/* 221*/ DEF_VALS2(MQIA_GROUP_UR, GET_VALSP(MQGUR)),
/* 222*/ DEF_VALS2(MQIA_UR_DISP, GET_VALSP(QShrGrpDisp)),
/* 223*/ DEF_VALS2(MQIA_COMM_INFO_TYPE, GET_VALSP(MQCIT)),
/* 224*/ DEF_VALS2(MQIA_CF_OFFLOAD, GET_VALSP(OffloadUse)),
/* 229*/ DEF_VALS2(MQIA_CF_OFFLDUSE, GET_VALSP(OffloadUse)),
/* 232*/ DEF_VALS2(MQIA_COMM_EVENT, GET_VALSP(MQEVR)),
/* 233*/ DEF_VALS2(MQIA_MCAST_BRIDGE, GET_VALSP(MQMCB)),
/* 234*/ DEF_VALS2(MQIA_USE_DEAD_LETTER_Q, GET_VALSP(MQUSEDLQ)),
/* 240*/ DEF_VALS2(MQIA_ACTIVITY_TRACE, GET_VALSP(Monitoring)),
/* 243*/ DEF_VALS2(MQIA_XR_CAPABILITY, GET_VALSP(Capability)),
@ -4563,6 +4583,10 @@ DEF_VALSB(MQCFINT_Parse)
/* 257*/ DEF_VALS2(MQIA_CHECK_LOCAL_BINDING, GET_VALSP(MQCHK)),
/* 258*/ DEF_VALS2(MQIA_CHECK_CLIENT_BINDING, GET_VALSP(MQCHK)),
/* 260*/ DEF_VALS2(MQIA_ADOPT_CONTEXT, GET_VALSP(MQADPCTX)),
/* 261*/ DEF_VALS2(MQIA_LDAP_SECURE_COMM, GET_VALSP(MQSECCOMM)),
/* 263*/ DEF_VALS2(MQIA_LDAP_AUTHORMD, GET_VALSP(MQLDAP_AUTHORMD)),
/* 264*/ DEF_VALS2(MQIA_LDAP_NESTGRP, GET_VALSP(MQLDAP_NESTGRP)),
/* 266*/ DEF_VALS2(MQIA_AUTHENTICATION_METHOD, GET_VALSP(MQAUTHENTICATE)),
/* 267*/ DEF_VALS2(MQIA_KEY_REUSE_COUNT, GET_VALSP(Keyreusecount)),
/* 1001*/ DEF_VALS2(MQIACF_Q_MGR_ATTRS, GET_VALSP(PrmId)),
/* 1002*/ DEF_VALS2(MQIACF_Q_ATTRS, GET_VALSP(PrmId)),
@ -4586,6 +4610,8 @@ DEF_VALSB(MQCFINT_Parse)
/* 1106*/ DEF_VALS2(MQIACF_SECURITY_TYPE, GET_VALSP(MQSECTYPE)),
/* 1107*/ DEF_VALS2(MQIACF_CONNECTION_ATTRS, GET_VALSP(PrmId)),
/* 1110*/ DEF_VALS2(MQIACF_CONN_INFO_TYPE, GET_VALSP(ConnInfoType)),
/* 1115*/ DEF_VALS2(MQIACF_AUTHORIZATION_LIST, GET_VALSP(MQAUTH)),
/* 1118*/ DEF_VALS2(MQIACF_ENTITY_TYPE, GET_VALSP(MQZAET)),
/* 1120*/ DEF_VALS2(MQIACF_COMMAND_INFO, GET_VALSP(CommandInformationValues)),
/* 1126*/ DEF_VALS2(MQIACF_QSG_DISPS, GET_VALSP(QShrGrpDisp)),
/* 1128*/ DEF_VALS2(MQIACF_UOW_STATE, GET_VALSP(UOWStates)),
@ -4600,7 +4626,7 @@ DEF_VALSB(MQCFINT_Parse)
/* 1154*/ DEF_VALS2(MQIACF_SECURITY_SWITCH, GET_VALSP(MQSECSW)),
/* 1155*/ DEF_VALS2(MQIACF_SECURITY_SETTING, GET_VALSP(MQSECSW)),
/* 1157*/ DEF_VALS2(MQIACF_USAGE_TYPE, GET_VALSP(PrmId)),
/* 1165*/ DEF_VALS2(MQIACF_PAGESET_STATUS, GET_VALSP(PrmId)),
/* 1165*/ DEF_VALS2(MQIACF_PAGESET_STATUS, GET_VALSP(MQUSAGE_PS)),
/* 1167*/ DEF_VALS2(MQIACF_USAGE_DATA_SET_TYPE, GET_VALSP(MQUSAGE_DS)),
/* 1175*/ DEF_VALS2(MQIACF_SYSP_TYPE, GET_VALSP(MQSYSP)),
/* 1182*/ DEF_VALS2(MQIACF_SYSP_ARCHIVE, GET_VALSP(MQSYSP)),
@ -4617,12 +4643,17 @@ DEF_VALSB(MQCFINT_Parse)
/* 1218*/ DEF_VALS2(MQIACF_SYSP_LOG_SUSPEND, GET_VALSP(MQSYSP)),
/* 1219*/ DEF_VALS2(MQIACF_SYSP_OFFLOAD_STATUS, GET_VALSP(MQSYSP)),
/* 1232*/ DEF_VALS2(MQIACF_CHINIT_STATUS, GET_VALSP(MQSVC_STATUS)),
/* 1261*/ DEF_VALS2(MQIACF_Q_TYPES, GET_VALSP(MQUSAGE_PS)),
/* 1261*/ DEF_VALS2(MQIACF_Q_TYPES, GET_VALSP(QueueType)),
/* 1265*/ DEF_VALS2(MQIACF_USAGE_EXPAND_TYPE, GET_VALSP(MQUSAGE_EXPAND)),
/* 1271*/ DEF_VALS2(MQIACF_PUBSUB_PROPERTIES, GET_VALSP(MQPSPROP)),
/* 1283*/ DEF_VALS2(MQIACF_PUB_PRIORITY, GET_VALSP(MQPRI)),
/* 1274*/ DEF_VALS2(MQIACF_DURABLE_SUBSCRIPTION, GET_VALSP(MQSUB_DURABLE)),
/* 1280*/ DEF_VALS2(MQIACF_REQUEST_ONLY, GET_VALSP(MQSUB_DURABLE)),
/* 1283*/ DEF_VALS2(MQIACF_PUB_PRIORITY, GET_VALSP(MQRU_PUBLISH)),
/* 1289*/ DEF_VALS2(MQIACF_SUB_TYPE, GET_VALSP(MQSUBTYPE)),
/* 1300*/ DEF_VALS2(MQIACF_RETAINED_PUBLICATION, GET_VALSP(MQQSO)),
/* 1302*/ DEF_VALS2(MQIACF_TOPIC_STATUS_TYPE, GET_VALSP(PrmId)),
/* 1308*/ DEF_VALS2(MQIACF_ASYNC_STATE, GET_VALSP(AsynchronousStateValues)),
/* 1308*/ DEF_VALS2(MQIACF_PS_STATUS_TYPE, GET_VALSP(MQPSST)),
/* 1322*/ DEF_VALS2(MQIACF_LOG_COMPRESSION, GET_VALSP(MQCOMPRESS)),
/* 1324*/ DEF_VALS2(MQIACF_MULC_CAPTURE, GET_VALSP(MQMULC)),
/* 1328*/ DEF_VALS2(MQIACF_CF_SMDS_BLOCK_SIZE, GET_VALSP(DSBlock)),
@ -4635,6 +4666,7 @@ DEF_VALSB(MQCFINT_Parse)
/* 1350*/ DEF_VALS2(MQIACF_SMDS_AVAIL, GET_VALSP(SMDSAvail)),
/* 1352*/ DEF_VALS2(MQIACF_CHLAUTH_TYPE, GET_VALSP(ChlauthType)),
/* 1376*/ DEF_VALS2(MQIACF_SMDS_EXPANDST, GET_VALSP(SMDSExpandSt)),
/* 1409*/ DEF_VALS2(MQIACF_LDAP_CONNECTION_STATUS, GET_VALSP(MQLDAPC)),
/* 1414*/ DEF_VALS2(MQIACF_SYSP_ZHYPERWRITE, GET_VALSP(MQSYSP)),
/* 1501*/ DEF_VALS2(MQIACH_XMIT_PROTOCOL_TYPE, GET_VALSP(TransportType)),
/* 1508*/ DEF_VALS2(MQIACH_PUT_AUTHORITY, GET_VALSP(PutAuthority)),
@ -4652,9 +4684,13 @@ DEF_VALSB(MQCFINT_Parse)
/* 1576*/ DEF_VALS2(MQIACH_MSG_COMPRESSION, GET_VALSP(MQCOMPRESS)),
/* 1580*/ DEF_VALS2(MQIACH_CHANNEL_DISP, GET_VALSP(ChannelDisp)),
/* 1581*/ DEF_VALS2(MQIACH_INBOUND_DISP, GET_VALSP(MQINBD)),
/* 1582*/ DEF_VALS2(MQIACH_CHANNEL_TYPES, GET_VALSP(ChannelType)),
/* 1599*/ DEF_VALS2(MQIACH_LISTENER_STATUS, GET_VALSP(MQSVC_STATUS)),
/* 1601*/ DEF_VALS2(MQIACH_LISTENER_CONTROL, GET_VALSP(MQSVC_CONTROL)),
/* 1609*/ DEF_VALS2(MQIACH_CHANNEL_SUBSTATE, GET_VALSP(ChannelSubStates)),
/* 1614*/ DEF_VALS2(MQIACH_DEF_CHANNEL_DISP, GET_VALSP(ChannelDisp)),
/* 1627*/ DEF_VALS2(MQIACH_NEW_SUBSCRIBER_HISTORY, GET_VALSP(MQNSH)),
/* 1629*/ DEF_VALS2(MQIACH_USE_CLIENT_ID, GET_VALSP(MQUCI)),
/* 1638*/ DEF_VALS2(MQIACH_USER_SOURCE, GET_VALSP(UserSource)),
/* 1639*/ DEF_VALS2(MQIACH_WARNING, GET_VALSP(Warning)),
DEF_VALSE;

View File

@ -80,6 +80,7 @@ static int hf_mq_pcf_bytestring = -1;
static int hf_mq_pcf_int64 = -1;
static int hf_mq_pcf_int64list = -1;
static expert_field ei_mq_pcf_hdrlne = EI_INIT;
static expert_field ei_mq_pcf_prmln0 = EI_INIT;
static expert_field ei_mq_pcf_MaxInt = EI_INIT;
static expert_field ei_mq_pcf_MaxStr = EI_INIT;
@ -164,6 +165,7 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree,
char strPrm[256];
guint32 uTyp;
guint32 uLen = 0;
guint32 uMax = 0;
guint32 uPrm;
guint32 uCnt;
guint32 uCCS;
@ -174,6 +176,7 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree,
const char sMaxLst[] = " Max # of List reached. DECODE interrupted (actual %u of %u)";
const char sPrmLn0[] = " MQPrm[%3u] has a zero length. DECODE Failed (MQPrm Count: %u)";
const char sHdrLne[] = " MQPrm[%3u] PCF Header not enough remaining bytes in pdu. DECODE Failed (MQPrm Count: %u)";
const char sMaxPrm[] = " Max # of Parm reached. DECODE interrupted (actual %u of %u)";
const char sPrmCnt[] = " Cnt=-1 and Length(%u) < 16. DECODE interrupted for elem %u";
@ -204,6 +207,13 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree,
for (u = 0; u < uCount && u < mq_pcf_maxprm; u++)
{
tOfs = offset;
uMax = (guint)tvb_reported_length_remaining(tvb, tOfs);
if (uMax < 12)
{
proto_tree_add_expert_format(tree, pinfo, &ei_mq_pcf_hdrlne, tvb, offset, 12, sHdrLne, u + 1, uCount);
u = uCount;
break;
}
uTyp = tvb_get_guint32(tvb, offset , bLittleEndian);
uLen = tvb_get_guint32(tvb, offset + 4, bLittleEndian);
if (uLen == 0)
@ -212,6 +222,9 @@ void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree,
u = uCount;
break;
}
/* Try to decode as much as possible value */
uLen = MIN(uLen, uMax);
uPrm = tvb_get_guint32(tvb, offset + 8, bLittleEndian);
uLenF = 12;
@ -676,6 +689,7 @@ void proto_register_mqpcf(void)
static ei_register_info ei[] =
{
{ &ei_mq_pcf_prmln0, { "mqpcf.parm.len0" , PI_MALFORMED, PI_ERROR, "MQPCF Parameter length is 0", EXPFILL }},
{ &ei_mq_pcf_hdrlne, { "mqpcf.parm.hdrlenerr", PI_MALFORMED, PI_ERROR, "MQPCF Header not enough bytes in pdu", EXPFILL}},
{ &ei_mq_pcf_MaxInt, { "mqpcf.parm.IntList" , PI_UNDECODED, PI_WARN , "MQPCF Parameter Integer list exhausted", EXPFILL }},
{ &ei_mq_pcf_MaxStr, { "mqpcf.parm.StrList" , PI_UNDECODED, PI_WARN , "MQPCF Parameter String list exhausted", EXPFILL }},
{ &ei_mq_pcf_MaxI64, { "mqpcf.parm.Int64List", PI_UNDECODED, PI_WARN , "MQPCF Parameter Int64 list exhausted", EXPFILL }},

View File

@ -194,6 +194,8 @@ static int hf_mq_id_ThreadId = -1;
static int hf_mq_id_TraceId = -1;
static int hf_mq_id_ProdId = -1;
static int hf_mq_id_mqmid = -1;
static int hf_mq_id_pal = -1;
static int hf_mq_id_r = -1;
/* Initial Data Capability Flag 1 */
static int hf_mq_id_icf1_msgseq = -1;
@ -960,7 +962,7 @@ static gint ett_mq_xa_tmflags = -1;
static gint ett_mq_xa_xid = -1;
static gint ett_mq_xa_info = -1;
static gint ett_mq_charv = -1;
static gint ett_mq_reaasemb = -1;
static gint ett_mq_reassemb = -1;
static gint ett_mq_notif = -1;
static gint ett_mq_structid = -1;
@ -978,6 +980,8 @@ static gboolean mq_reassembly = TRUE;
static gboolean mq_in_reassembly = FALSE;
static guint32 mq_AsyMsgRsn;
static reassembly_table mq_reassembly_table;
#define MQ_PORT_TCP 1414
@ -2311,15 +2315,20 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_
{
guint8 iFAPLvl;
gint iSize;
gint iPktSz;
iPktSz = tvb_reported_length_remaining(tvb, offset);
iFAPLvl = tvb_get_guint8(tvb, offset + 4);
if (iFAPLvl < 4)
iSize = 44;
else if (iFAPLvl < 10)
else if (iFAPLvl < 9)
iSize = 102;
else
else if (iFAPLvl < 11)
iSize = 208;
else
iSize = 240;
iSize = MIN(iSize, iPktSz);
if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize)
{
@ -2331,7 +2340,7 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_
{
col_append_fstr(pinfo->cinfo, COL_INFO, ", CHL=%s", sChannel);
}
if (iFAPLvl >= 4)
if (iSize > 48)
{
guint8 *sQMgr;
sQMgr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 48, p_mq_parm->mq_str_enc);
@ -2362,7 +2371,7 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_
proto_tree_add_item(mq_tree, hf_mq_id_SeqWrapVal , tvb, offset + 20, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_channel , tvb, offset + 24, 20, p_mq_parm->mq_str_enc);
if (iFAPLvl >= 4)
if (iSize > 44)
{
/* ID Capability flags 2 */
proto_tree_add_bitmask(mq_tree, tvb, offset + 44, hf_mq_id_icf2, ett_mq_id_icf2, pf_flds_icf2, ENC_BIG_ENDIAN);
@ -2372,28 +2381,36 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_
proto_tree_add_item(mq_tree, hf_mq_id_qmgrname , tvb, offset + 48, 48, p_mq_parm->mq_str_enc);
proto_tree_add_item(mq_tree, hf_mq_id_HBInterval, tvb, offset + 96, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_EFLLength , tvb, offset + 100, 2, p_mq_parm->mq_int_enc);
if (iFAPLvl >= 10)
if (iSize > 102)
{
/* Error flags 2*/
proto_tree_add_bitmask(mq_tree, tvb, offset + 102, hf_mq_id_ief2, ett_mq_id_ief2, pf_flds_ief2, ENC_BIG_ENDIAN);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved1 , tvb, offset + 103, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved1, tvb, offset + 103, 1, ENC_BIG_ENDIAN);
proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_HdrCprsLst, tvb, offset + 104, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_MsgCprsLst, tvb, offset + 106, 16, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved2 , tvb, offset + 122, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst , tvb, offset + 124, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt , tvb, offset + 128, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved2, tvb, offset + 122, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_SSLKeyRst, tvb, offset + 124, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ConvBySkt, tvb, offset + 128, 4, p_mq_parm->mq_int_enc);
/* ID Capability flags 3 */
proto_tree_add_bitmask(mq_tree, tvb, offset + 132, hf_mq_id_icf3, ett_mq_id_icf3, pf_flds_icf3, ENC_BIG_ENDIAN);
proto_tree_add_bitmask(mq_tree, tvb, offset + 133, hf_mq_id_Eicf3, ett_mq_id_eicf3, pf_flds_icf3, ENC_BIG_ENDIAN);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ThreadId , tvb, offset + 140, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_TraceId , tvb, offset + 144, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ProdId , tvb, offset + 148, 12, p_mq_parm->mq_str_enc);
proto_tree_add_item(mq_tree, hf_mq_id_mqmid , tvb, offset + 160, 48, p_mq_parm->mq_str_enc);
proto_tree_add_item(mq_tree, hf_mq_id_Reserved3, tvb, offset + 134, 2, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ProcessId, tvb, offset + 136, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ThreadId, tvb, offset + 140, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_TraceId, tvb, offset + 144, 4, p_mq_parm->mq_int_enc);
proto_tree_add_item(mq_tree, hf_mq_id_ProdId, tvb, offset + 148, 12, p_mq_parm->mq_str_enc);
}
if (iSize > 160)
{
proto_tree_add_item(mq_tree, hf_mq_id_mqmid, tvb, offset + 160, 48, p_mq_parm->mq_str_enc);
}
if (iSize > 208)
{
proto_tree_add_item(mq_tree, hf_mq_id_pal, tvb, offset + 208, 20, p_mq_parm->mq_str_enc);
proto_tree_add_item(mq_tree, hf_mq_id_r, tvb, offset + 228, 12, p_mq_parm->mq_str_enc);
}
}
}
@ -2574,8 +2591,9 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (!mq_in_reassembly)
{
col_clear_fence(pinfo->cinfo, COL_INFO);
col_clear(pinfo->cinfo, COL_INFO);
col_append_sep_fstr(pinfo->cinfo, COL_INFO, " | ", "%-17s", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
col_append_sep_fstr(pinfo->cinfo, COL_INFO, " | ", " %-17s", val_to_str_ext(p_mq_parm->mq_opcode, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
col_set_fence(pinfo->cinfo, COL_INFO);
}
@ -3055,24 +3073,29 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
}
else if (p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE)
{
gint iReasnCode = 0;
gint iSegmIndex;
gint iGlbMsgIdx;
gint iPadLen;
gint iSegLength;
gint8 iStrLen;
gint iHdl;
gint iHdrL;
iHdl = tvb_get_guint32(tvb, offset + 4, p_mq_parm->mq_int_enc);
iGlbMsgIdx = tvb_get_guint32(tvb, offset + 12, p_mq_parm->mq_int_enc);
iSegLength = tvb_get_guint32(tvb, offset + 16, p_mq_parm->mq_int_enc);
iSegmIndex = tvb_get_guint16(tvb, offset + 20, p_mq_parm->mq_int_enc);
if (p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST)
{
iReasnCode = tvb_get_guint32(tvb, offset + 24, p_mq_parm->mq_int_enc);
}
if (iSegmIndex == 0)
{
iStrLen = tvb_get_guint8(tvb, offset + 54);
iPadLen = (2+1+iStrLen) % 4;
iPadLen = (iPadLen) ? 4-iPadLen : 0;
iPadLen = (2 + 1 + iStrLen) % 4;
iPadLen = (iPadLen) ? 4 - iPadLen : 0;
}
else
{
@ -3085,8 +3108,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
if (!mq_in_reassembly)
{
dissect_mq_addCR_colinfo(pinfo, p_mq_parm);
col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
col_append_fstr(pinfo->cinfo, COL_INFO,
" Hdl=0x%04x GlbMsgIdx=%d, Full Message, RC=%d(0x%x) - %s",
iHdl, iGlbMsgIdx, iReasnCode, iReasnCode,
val_to_str_ext(iReasnCode, GET_VALS_EXTP(mqrc), "Unknown (0x%02x)"));
}
mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iHdrL, ett_mq_msg, NULL, MQ_TEXT_ASYMSG);
@ -3114,7 +3139,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL;
iSizePayload = tvb_reported_length_remaining(tvb, offset);
bPayload = (iSizePayload>0);
bPayload = (iSizePayload > 0);
}
else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && capLen >= 12)
{
@ -3871,6 +3896,7 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
if (iSegmIndex == 0)
{
mq_AsyMsgRsn = tvb_get_guint32(tvb, iHdrL + 24, iEnco);
uStrL = tvb_get_guint8(tvb, iHdrL + 54);
uPadL = ((((2+1+uStrL)/4)+1)*4)-(2+1+uStrL);
}
@ -3883,15 +3909,18 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
/*
if it is the 1st Segment, it means we are
of the beginning of a reassembling. We must take the whole segment (with tSHM, and headers)
of the beginning of a reassembling. We must take the whole segment (with TSHM, and headers)
*/
iBegL = (bSeg1st) ? 0 : iNxtP;
if (iSegL <= iBegL) {
if (iSegL <= iBegL)
{
/* negative or null fragment length - something is wrong; skip reassembly */
fd_head = NULL;
reassembly_error = TRUE;
} else {
}
else
{
fd_head = fragment_add_seq_next(&mq_reassembly_table,
tvb, iBegL,
pinfo, iConnectionId, NULL,
@ -3901,44 +3930,59 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
if (tree)
{
proto_item *ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
if (bMore)
{
proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]",
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
dissect_mq_addCR_colinfo(pinfo, &mq_parm);
proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
}
else
{
proto_item_append_text(ti, " %s",
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
dissect_mq_addCR_colinfo(pinfo, &mq_parm);
proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
}
proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]",
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
dissect_mq_addCR_colinfo(pinfo, &mq_parm);
proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
if (reassembly_error)
{
expert_add_info_format(pinfo, ti, &ei_mq_reassembly_error,
"Wrong fragment length (%d) - skipping reassembly", iSegL - iBegL);
}
mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb);
mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb);
}
else
{
mq_tree = tree;
}
if (fd_head != NULL && pinfo->num == fd_head->reassembled_in)
if (fd_head != NULL && pinfo->num == fd_head->reassembled_in && !bMore)
{
tvbuff_t *next_tvb;
/* Reassembly finished */
if (fd_head->next != NULL)
{
/* 2 or more fragments */
proto_item *ti;
/* dissect the last(s) MQ segment received */
/* Reassembly in progress, so no decode */
mq_in_reassembly = TRUE;
dissect_mq_pdu(tvb, pinfo, mq_tree);
mq_in_reassembly = FALSE;
/*
2 or more fragments.
Build Up the full pdu to be dissected correwctly
*/
next_tvb = tvb_new_chain(tvb, fd_head->tvb_data);
add_new_data_source(pinfo, next_tvb, "Reassembled MQ");
/* Create the tree element for the full reassembled MQ Msg */
ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA);
proto_item_append_text(ti, "%s",
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
dissect_mq_addCR_colinfo(pinfo, &mq_parm);
proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, Full, Len=%d, RC=%d(0x%x) - %s",
iHdl, iGlbMsgIdx,
tvb_reported_length_remaining(next_tvb, 0),
mq_AsyMsgRsn, mq_AsyMsgRsn,
val_to_str_ext(mq_AsyMsgRsn, GET_VALS_EXTP(mqrc), "Unknown (0x%02x)"));
mq_tree = proto_item_add_subtree(ti, ett_mq_reassemb);
}
else
{
@ -3952,12 +3996,11 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo
{
mq_in_reassembly = TRUE;
/* Reassembly in progress */
col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ");
col_add_fstr(pinfo->cinfo, COL_INFO, "[%s of a Reassembled MQ Segment]",
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
val_to_str_ext(iOpcd, GET_VALS_EXTP(opcode), "Unknown (0x%02x)"));
dissect_mq_addCR_colinfo(pinfo, &mq_parm);
col_add_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d",
iHdl, iGlbMsgIdx, iSegmIndex, iSegLength);
dissect_mq_pdu(tvb, pinfo, mq_tree);
return tvb_reported_length(tvb);
}
@ -4142,6 +4185,8 @@ void proto_register_mq(void)
{ &hf_mq_id_TraceId , {"TraceId...", "mq.id.traceid", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "ID Trace Identifier", HFILL }},
{ &hf_mq_id_ProdId , {"ProdId....", "mq.id.prodid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID Product Identifier", HFILL }},
{ &hf_mq_id_mqmid , {"MQM ID....", "mq.id.mqmid", FT_STRINGZ, BASE_NONE, NULL, 0x0, "ID MQM ID", HFILL }},
{ &hf_mq_id_pal , {"PAL.......", "mq.id.pal", FT_BYTES, BASE_NONE, NULL, 0x0, "ID PAL", HFILL}},
{ &hf_mq_id_r , {"R.........", "mq.id.r", FT_BYTES, BASE_NONE, NULL, 0x0, "ID R", HFILL}},
{ &hf_mq_id_icf1_msgseq , {"Message sequence", "mq.id.icf.msgseq" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_MSG_SEQ, "ID ICF Message sequence", HFILL }},
{ &hf_mq_id_icf1_convcap , {"Conversion capable", "mq.id.icf.convcap" , FT_BOOLEAN, 8, TFS(&tfs_set_notset), MQ_ICF1_CONVERSION_CAPABLE, "ID ICF Conversion capable", HFILL }},
@ -4309,7 +4354,7 @@ void proto_register_mq(void)
{ &hf_mq_msgasy_SegLength, {"SegLength", "mq.msgasy.seglength", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Length", HFILL }},
{ &hf_mq_msgasy_SegmIndex, {"SegmIndex", "mq.msgasy.segmindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Segment Index", HFILL }},
{ &hf_mq_msgasy_SeleIndex, {"SeleIndex", "mq.msgasy.seleindex", FT_UINT16, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Selection Index", HFILL }},
{ &hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_HEX , NULL, 0x0, "MSGASYNC Reason Code", HFILL }},
{ &hf_mq_msgasy_ReasonCod, {"ReasonCod", "mq.msgasy.reasoncod", FT_UINT32, BASE_DEC | BASE_EXT_STRING, GET_VALS_EXTP(mqrc), 0x0, "MSGASYNC Reason Code", HFILL }},
{ &hf_mq_msgasy_ActMsgLen, {"ActMsgLen", "mq.msgasy.actmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Actual Message Length", HFILL }},
{ &hf_mq_msgasy_TotMsgLen, {"TotMsgLen", "mq.msgasy.totmsglen", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MSGASYNC Total Message Length", HFILL }},
{ &hf_mq_msgasy_MsgToken , {"MsgToken.", "mq.msgasy.msgtoken" , FT_BYTES , BASE_NONE , NULL, 0x0, "MSGASYNC Mesasage Token", HFILL }},
@ -4708,7 +4753,7 @@ void proto_register_mq(void)
&ett_mq_xa_info,
&ett_mq_charv,
&ett_mq_rfh_ValueName,
&ett_mq_reaasemb,
&ett_mq_reassemb,
&ett_mq_structid
};

View File

@ -4979,6 +4979,7 @@ typedef struct _mq_parm_t
#define MQ_MQCHT_CLUSRCVR 8
#define MQ_MQCHT_CLUSSDR 9
#define MQ_MQCHT_MQTT 10
#define MQ_MQCHT_AMQP 11
/* Channel Compression */
#define MQ_MQCOMPRESS_NOT_AVAILABLE (-1)
@ -5042,6 +5043,11 @@ typedef struct _mq_parm_t
#define MQ_MQCLXQ_SCTQ 0
#define MQ_MQCLXQ_CHANNEL 1
#define MQ_MQZAET_NONE 0
#define MQ_MQZAET_PRINCIPAL 1
#define MQ_MQZAET_GROUP 2
#define MQ_MQZAET_UNKNOWN 3
#endif
extern gint32 strip_trailing_blanks(guint8 *a_str,