From robionekenobi: Enhancement of the packet-mq dissector (WMQ 7.1-7.5)

Add more detail for SPI Open LPOO Structure
Add more int_to_vals for INQ_Q_MGR reply
Add more display detail for encoding value
Some fix and display correction

See: https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9367


svn path=/trunk/; revision=53027
This commit is contained in:
Bill Meier 2013-11-01 20:13:15 +00:00
parent 250641f5de
commit 02f2b76bdd
4 changed files with 522 additions and 334 deletions

View File

@ -59,7 +59,7 @@ guint16 tvb_get_guint16_endian(tvbuff_t *a_tvb, gint a_iOffset, gint a_rep)
return sResult;
};
/* This routine truncates the string at the first blank space */
guint32 strip_trailing_blanks(guint8* a_str, guint32 a_size)
gint32 strip_trailing_blanks(guint8* a_str, guint32 a_size)
{
gint32 i = 0;
if (a_str != NULL)
@ -75,6 +75,15 @@ guint32 strip_trailing_blanks(guint8* a_str, guint32 a_size)
return i;
}
DEF_VALRB(ccsid)
DEF_VALR3(MQCCSI_UNDEFINED , MQCCSI_UNDEFINED, "UNDEFINED/DEFAULT/Q_MGR"),
DEF_VALR1(MQCCSI_EMBEDDED ),
DEF_VALR1(MQCCSI_INHERIT ),
DEF_VALR1(MQCCSI_APPL ),
DEF_VALR1(MQCCSI_AS_PUBLISHED),
DEF_VALR3(MQCCSI_1 ,MQCCSI_65535, ""),
DEF_VALRE;
DEF_VALSB(mqat)
DEF_VALS1(MQAT_UNKNOWN ),
DEF_VALS1(MQAT_NO_CONTEXT ),
@ -1713,8 +1722,8 @@ DEF_VALSE;
DEF_VALSB(Monitoring)
DEF_VALS1(MQMON_NONE ),
DEF_VALS1(MQMON_ON ),
DEF_VALS1(MQMON_OFF ),
DEF_VALS2(MQMON_ON ,"ON/ENABLED"),
DEF_VALS2(MQMON_OFF ,"OFF/DISABLED"),
DEF_VALS1(MQMON_LOW ),
DEF_VALS1(MQMON_MEDIUM),
DEF_VALS1(MQMON_HIGH ),
@ -4881,10 +4890,6 @@ DEF_VALSB(IGQPutAuthority)
DEF_VALS1(MQIGQPA_ALTERNATE_OR_IGQ),
DEF_VALSE;
/*Only on z/OS */
#define MQSCYC_UPPER 0
#define MQSCYC_MIXED 1
DEF_VALSB(SecurityCase)
DEF_VALS1(MQSCYC_UPPER),
DEF_VALS1(MQSCYC_MIXED),
@ -4892,8 +4897,8 @@ DEF_VALSE;
DEF_VALSB(ChlauthType)
DEF_VALS1(MQCAUT_BLOCKUSER ),
DEF_VALS1(MQCAUT_BLOCKADDR ),
DEF_VALS1(MQCAUT_SSLPEERMAP),
DEF_VALS1(MQCAUT_BLOCKADDR ),
DEF_VALS1(MQCAUT_SSLPEERMAP),
DEF_VALS1(MQCAUT_ADDRESSMAP),
DEF_VALS1(MQCAUT_USERMAP ),
DEF_VALS1(MQCAUT_QMGRMAP ),
@ -4910,10 +4915,52 @@ DEF_VALSB(Warning)
DEF_VALS1(MQWARN_YES),
DEF_VALSE;
DEF_VALSB(CertValPolicy)
DEF_VALS1(MQ_CERT_VAL_POLICY_ANY ),
DEF_VALS1(MQ_CERT_VAL_POLICY_RFC5280),
DEF_VALSE;
DEF_VALSB(ChanAutoDef)
DEF_VALS1(MQCHAD_DISABLED),
DEF_VALS1(MQCHAD_ENABLED ),
DEF_VALSE;
DEF_VALSB(ChlAuthRecords)
DEF_VALS1(MQCHLA_DISABLED),
DEF_VALS1(MQCHLA_ENABLED ),
DEF_VALSE;
DEF_VALSB(DefClusXmitTyp)
DEF_VALS1(MQCLXQ_SCTQ ),
DEF_VALS1(MQCLXQ_CHANNEL),
DEF_VALSE;
DEF_VALSB(ServiceControl)
DEF_VALS1(MQSVC_CONTROL_Q_MGR ),
DEF_VALS1(MQSVC_CONTROL_Q_MGR_START),
DEF_VALS1(MQSVC_CONTROL_MANUAL ),
DEF_VALSE;
DEF_VALSB(Capability)
DEF_VALS1(MQCAP_NOT_SUPPORTED),
DEF_VALS1(MQCAP_SUPPORTED ),
DEF_VALS1(MQCAP_EXPIRED ),
DEF_VALSE;
DEF_VALSB(FipsRequired)
DEF_VALS1(MQSSL_FIPS_NO ),
DEF_VALS1(MQSSL_FIPS_YES),
DEF_VALSE;
DEF_VALSB(SyncpointAvailability)
DEF_VALS1(MQSP_AVAILABLE ),
DEF_VALS1(MQSP_NOT_AVAILABLE),
DEF_VALSE;
DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIACF_ASYNC_STATE ,GET_VALSP(AsynchronousStateValues)),
DEF_VALS2(MQIACF_CLUSTER_Q_MGR_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_CHLAUTH_TYPE ,GET_VALSP(ChlauthType)),
DEF_VALS2(MQIACF_CLUSTER_Q_MGR_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_COMMAND ,GET_VALSP(Command)),
DEF_VALS2(MQIACF_CONNECTION_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_CONN_INFO_TYPE ,GET_VALSP(ConnInfoType)),
@ -4925,17 +4972,17 @@ DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIACF_OPEN_INPUT_TYPE ,GET_VALSP(QueueStatusOpenOptions)),
DEF_VALS2(MQIACF_OPEN_INQUIRE ,GET_VALSP(QueueStatusOptionsYesNo)),
DEF_VALS2(MQIACF_OPEN_OUTPUT ,GET_VALSP(QueueStatusOptionsYesNo)),
DEF_VALS2(MQIACF_OPEN_TYPE ,GET_VALSP(QueueStatusOpenTypes)),
DEF_VALS2(MQIACF_OPEN_SET ,GET_VALSP(QueueStatusOptionsYesNo)),
DEF_VALS2(MQIACF_OPEN_TYPE ,GET_VALSP(QueueStatusOpenTypes)),
DEF_VALS2(MQIACF_PARAMETER_ID ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_QSG_DISPS ,GET_VALSP(QShrGrpDisp)),
DEF_VALS2(MQIACF_Q_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_Q_MGR_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_QSG_DISPS ,GET_VALSP(QShrGrpDisp)),
DEF_VALS2(MQIACF_Q_STATUS_ATTRS ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_Q_STATUS_TYPE ,GET_VALSP(PrmId)),
DEF_VALS2(MQIACF_Q_TYPES ,GET_VALSP(QueueType)),
DEF_VALS2(MQIACF_UOW_TYPE ,GET_VALSP(UOWTypes)),
DEF_VALS2(MQIACF_UOW_STATE ,GET_VALSP(UOWStates)),
DEF_VALS2(MQIACF_UOW_TYPE ,GET_VALSP(UOWTypes)),
DEF_VALS2(MQIACH_CHANNEL_DISP ,GET_VALSP(ChannelDisp)),
DEF_VALS2(MQIACH_CHANNEL_INSTANCE_TYPE ,GET_VALSP(ObjType)),
DEF_VALS2(MQIACH_CHANNEL_STATUS ,GET_VALSP(ChannelStatus)),
@ -4954,29 +5001,39 @@ DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIACH_USER_SOURCE ,GET_VALSP(UserSource)),
DEF_VALS2(MQIACH_WARNING ,GET_VALSP(Warning)),
DEF_VALS2(MQIACH_XMIT_PROTOCOL_TYPE ,GET_VALSP(TransportType)),
DEF_VALS2(MQIA_ACCOUNTING_CONN_OVERRIDE,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_ACCOUNTING_MQI ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_ACCOUNTING_Q ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_ACTIVITY_RECORDING ,GET_VALSP(ActivityRecording)),
DEF_VALS2(MQIA_ACTIVITY_TRACE ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_ADOPTNEWMCA_CHECK ,GET_VALSP(AdoptNewMCACheck)),
DEF_VALS2(MQIA_ADOPTNEWMCA_TYPE ,GET_VALSP(AdoptNewMCAType)),
DEF_VALS2(MQIA_APPL_TYPE ,GET_VALSP(ApplType)),
DEF_VALS2(MQIA_AUTH_INFO_TYPE ,GET_VALSP(AuthInfoType)),
DEF_VALS2(MQIA_AUTHORITY_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_AUTH_INFO_TYPE ,GET_VALSP(AuthInfoType)),
DEF_VALS2(MQIA_BASE_TYPE ,GET_VALSP(BaseType)),
DEF_VALS2(MQIA_BRIDGE_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_CERT_VAL_POLICY ,GET_VALSP(CertValPolicy)),
DEF_VALS2(MQIA_CHANNEL_AUTO_DEF ,GET_VALSP(ChanAutoDef)),
DEF_VALS2(MQIA_CHANNEL_AUTO_DEF_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_CHANNEL_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_CHINIT_CONTROL ,GET_VALSP(ServiceControl)),
DEF_VALS2(MQIA_CHINIT_TRACE_AUTO_START ,GET_VALSP(ChinitTraceAutoStart)),
DEF_VALS2(MQIA_CHLAUTH_RECORDS ,GET_VALSP(ChlAuthRecords)),
DEF_VALS2(MQIA_CLWL_USEQ ,GET_VALSP(CLWLUseQ)),
DEF_VALS2(MQIA_CMD_SERVER_CONTROL ,GET_VALSP(ServiceControl)),
DEF_VALS2(MQIA_COMMAND_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_CONFIGURATION_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_DEFINITION_TYPE ,GET_VALSP(DefinitionType)),
DEF_VALS2(MQIA_DEF_BIND ,GET_VALSP(Bindings)),
DEF_VALS2(MQIA_DEF_CLUSTER_XMIT_Q_TYPE ,GET_VALSP(DefClusXmitTyp)),
DEF_VALS2(MQIA_DEF_INPUT_OPEN_OPTION ,GET_VALSP(InputOpenOption)),
DEF_VALS2(MQIA_DEF_PERSISTENCE ,GET_VALSP(Persistence)),
DEF_VALS2(MQIA_DEF_PUT_RESPONSE_TYPE ,GET_VALSP(PutResponse)),
DEF_VALS2(MQIA_DEF_READ_AHEAD ,GET_VALSP(ReadAheadValues)),
DEF_VALS2(MQIA_DURABLE_SUB ,GET_VALSP(DurableSubscriptions)),
DEF_VALS2(MQIA_DIST_LISTS ,GET_VALSP(DistributionLists)),
DEF_VALS2(MQIA_DNS_WLM ,GET_VALSP(DNSWLM)),
DEF_VALS2(MQIA_DURABLE_SUB ,GET_VALSP(DurableSubscriptions)),
DEF_VALS2(MQIA_GROUP_UR ,GET_VALSP(GroupUR)),
DEF_VALS2(MQIA_HARDEN_GET_BACKOUT ,GET_VALSP(BackOutHardening)),
DEF_VALS2(MQIA_IGQ_PUT_AUTHORITY ,GET_VALSP(IGQPutAuthority)),
@ -4989,23 +5046,26 @@ DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIA_INTRA_GROUP_QUEUING ,GET_VALSP(IntraGroupQueuing)),
DEF_VALS2(MQIA_IP_ADDRESS_VERSION ,GET_VALSP(IPAddressVersion)),
DEF_VALS2(MQIA_LOCAL_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_LOGGER_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_MONITORING_AUTO_CLUSSDR ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_MONITORING_AUTO_CLUSSDR ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_MONITORING_CHANNEL ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_MONITORING_Q ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_MSG_DELIVERY_SEQUENCE ,GET_VALSP(MsgDelivSeq)),
DEF_VALS2(MQIA_PM_DELIVERY ,GET_VALSP(MsgDelivery)),
DEF_VALS2(MQIA_NPM_DELIVERY ,GET_VALSP(MsgDelivery)),
DEF_VALS2(MQIA_NPM_CLASS ,GET_VALSP(NonpersistentMsgCls)),
DEF_VALS2(MQIA_NPM_DELIVERY ,GET_VALSP(MsgDelivery)),
DEF_VALS2(MQIA_PERFORMANCE_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_PLATFORM ,GET_VALSP(Platform)),
DEF_VALS2(MQIA_PM_DELIVERY ,GET_VALSP(MsgDelivery)),
DEF_VALS2(MQIA_PROPERTY_CONTROL ,GET_VALSP(PropertyCtlVal)),
DEF_VALS2(MQIA_PROT_POLICY_CAPABILITY ,GET_VALSP(Capability)),
DEF_VALS2(MQIA_PROXY_SUB ,GET_VALSP(ProxySubscriptions)),
DEF_VALS2(MQIA_PUB_SCOPE ,GET_VALSP(PubSubScope)),
DEF_VALS2(MQIA_PUBSUB_CLUSTER ,GET_VALSP(PubSubCluster)),
DEF_VALS2(MQIA_PUBSUB_MODE ,GET_VALSP(PubSubMode)),
DEF_VALS2(MQIA_PUBSUB_NP_MSG ,GET_VALSP(PubSubNP)),
DEF_VALS2(MQIA_PUBSUB_NP_RESP ,GET_VALSP(PubSubNP)),
DEF_VALS2(MQIA_PUBSUB_SYNC_PT ,GET_VALSP(PubSubSync)),
DEF_VALS2(MQIA_PUB_SCOPE ,GET_VALSP(PubSubScope)),
DEF_VALS2(MQIA_QMGR_CFCONLOS ,GET_VALSP(CFConLoss)),
DEF_VALS2(MQIA_QSG_DISP ,GET_VALSP(QShrGrpDisp)),
DEF_VALS2(MQIA_Q_DEPTH_HIGH_EVENT ,GET_VALSP(EventRule)),
@ -5020,8 +5080,15 @@ DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIA_SHAREABILITY ,GET_VALSP(Shareability)),
DEF_VALS2(MQIA_SHARED_Q_Q_MGR_NAME ,GET_VALSP(SharedQueueQueueManagerName)),
DEF_VALS2(MQIA_SSL_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_SUB_SCOPE ,GET_VALSP(PubSubScope)),
DEF_VALS2(MQIA_SSL_FIPS_REQUIRED ,GET_VALSP(FipsRequired)),
DEF_VALS2(MQIA_START_STOP_EVENT ,GET_VALSP(EventRule)),
DEF_VALS2(MQIA_STATISTICS_AUTO_CLUSSDR ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_STATISTICS_CHANNEL ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_STATISTICS_INTERVAL ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_STATISTICS_MQI ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_STATISTICS_Q ,GET_VALSP(Monitoring)),
DEF_VALS2(MQIA_SUB_SCOPE ,GET_VALSP(PubSubScope)),
DEF_VALS2(MQIA_SYNCPOINT ,GET_VALSP(SyncpointAvailability)),
DEF_VALS2(MQIA_TCP_KEEP_ALIVE ,GET_VALSP(TCPKeepAlive)),
DEF_VALS2(MQIA_TCP_STACK_TYPE ,GET_VALSP(TCPStackType)),
DEF_VALS2(MQIA_TOPIC_DEF_PERSISTENCE ,GET_VALSP(Persistence)),
@ -5032,6 +5099,7 @@ DEF_VALSB(MQCFINT_Parse)
DEF_VALS2(MQIA_UR_DISP ,GET_VALSP(QShrGrpDisp)),
DEF_VALS2(MQIA_USAGE ,GET_VALSP(Usage)),
DEF_VALS2(MQIA_WILDCARD_OPERATION ,GET_VALSP(WildcardOperation)),
DEF_VALS2(MQIA_XR_CAPABILITY ,GET_VALSP(Capability)),
DEF_VALSE;
/*

View File

@ -31,9 +31,9 @@
*
* MQ PCF documentation is called "WebSphere MQ Programmable Command Formats and Administration Interface"
*/
#include "config.h"
#include <string.h>
#include <math.h>
@ -68,6 +68,7 @@ static int hf_mqpcf_cfh_ParmCount = -1;
static int hf_mq_pcf_prmtyp = -1;
static int hf_mq_pcf_prmlen = -1;
static int hf_mq_pcf_prmid = -1;
static int hf_mq_pcf_prmidnovals = -1;
static int hf_mq_pcf_filterop = -1;
static int hf_mq_pcf_prmccsid = -1;
static int hf_mq_pcf_prmstrlen = -1;
@ -111,13 +112,15 @@ guint8 *dissect_mqpcf_parm_getintval(guint uPrm,guint uVal)
return NULL;
}
void dissect_mqpcf_parm_int(tvbuff_t *tvb, proto_tree *tree, guint offset, guint uPrm,
guint uVal, int hfindex, guint iCnt, guint iMaxCnt, guint iDigit)
void dissect_mqpcf_parm_int(tvbuff_t *tvb, proto_tree *tree, guint offset, guint uPrm,
guint uVal, int hfindex, guint iCnt, guint iMaxCnt, guint iDigit, gboolean bParse)
{
header_field_info *hfinfo;
guint8 *pVal;
guint8 *pVal = NULL;
if (bParse)
pVal=dissect_mqpcf_parm_getintval(uPrm,uVal);
pVal=dissect_mqpcf_parm_getintval(uPrm,uVal);
hfinfo=proto_registrar_get_nth(hfindex);
if (iMaxCnt>1)
@ -148,7 +151,8 @@ void dissect_mqpcf_parm_int(tvbuff_t *tvb, proto_tree *tree, guint offset, guint
}
}
static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree, guint offset,guint32 uCount,guint bLittleEndian)
static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq_tree,
guint offset, guint32 uCount, guint bLittleEndian, gboolean bParse)
{
guint32 u=0;
guint32 tOfs=0;
@ -168,8 +172,21 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
const char sPrmLn0[] = " MQPrm[%3u] has a zero length. DECODE Failed (MQPrm Count: %u)";
const char sMaxPrm[] = " Max # of Parm reached. DECODE interrupted (actual %u of %u)";
proto_item *ti=NULL;
proto_tree *tree=NULL;
proto_item *ti = NULL;
proto_tree *tree = NULL;
if (uCount == (guint32)-1)
{
guint32 xOfs=offset;
guint32 uCnt=0;
while (tvb_length_remaining(tvb, xOfs) >= 16)
{
uLen = tvb_get_guint32_endian(tvb, xOfs + 4, bLittleEndian);
uCnt++;
xOfs+=uLen;
}
uCount=uCnt;
}
uDig=dissect_mqpcf_getDigits(uCount);
@ -188,10 +205,16 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
uPrm=tvb_get_guint32_endian(tvb, offset + 8, bLittleEndian);
uLenF=12;
g_snprintf(strPrm,(gulong)sizeof(strPrm)-1," %-s[%*u] {%2d-%-15.15s} %8x/%5d-%-30.30s",
"MQPrm", uDig, u+1,
uTyp,val_to_str_const(uTyp,GET_VALSV(PrmTyp)," Unknown")+6,
uPrm,uPrm,val_to_str_const(uPrm,GET_VALSV(PrmId),"Unknown"));
if (bParse)
g_snprintf(strPrm,(gulong)sizeof(strPrm)-1," %-s[%*u] {%2d-%-15.15s} %8x/%5d-%-30.30s",
"MQPrm", uDig, u+1,
uTyp,val_to_str_const(uTyp,GET_VALSV(PrmTyp)," Unknown")+6,
uPrm,uPrm,val_to_str_const(uPrm,GET_VALSV(PrmId),"Unknown"));
else
g_snprintf(strPrm,(gulong)sizeof(strPrm)-1," %-s[%*u] {%2d-%-15.15s} %8x/%5d",
"XtraD", uDig, u+1,
uTyp, val_to_str_const(uTyp,GET_VALSV(PrmTyp)," Unknown")+6,
uPrm, uPrm);
switch (uTyp)
{
@ -203,9 +226,10 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
break;
case MQ_MQCFT_INTEGER:
{
guint8 *pVal;
guint8 *pVal = NULL;
uVal = tvb_get_guint32_endian(tvb, offset + uLenF, bLittleEndian);
pVal = dissect_mqpcf_parm_getintval(uPrm,uVal);
if (bParse)
pVal = dissect_mqpcf_parm_getintval(uPrm, uVal);
if (pVal)
{
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %d-%s",
@ -219,9 +243,9 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp, tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen, tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
dissect_mqpcf_parm_int(tvb, tree, offset+uLenF, uPrm, uVal, hf_mq_pcf_int, 0, 0, 0);
dissect_mqpcf_parm_int(tvb, tree, offset+uLenF, uPrm, uVal, hf_mq_pcf_int, 0, 0, 0, bParse);
}
break;
case MQ_MQCFT_STRING:
@ -230,7 +254,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
uCCS = tvb_get_guint32_endian(tvb, offset + uLenF, bLittleEndian);
uSLn = tvb_get_guint32_endian(tvb, offset + uLenF + 4, bLittleEndian);
sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + uLenF + 8,
sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + uLenF + 8,
uSLn, (uCCS!=500)?ENC_ASCII:ENC_EBCDIC);
if (*sStr)
strip_trailing_blanks(sStr,uSLn);
@ -242,7 +266,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmccsid , tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmstrlen, tvb, offset + 16, 4, bLittleEndian);
@ -262,14 +286,14 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmcount, tvb, offset + 12, 4, bLittleEndian);
offset += uLenF+4;
for (u2 = 0; u2 < uCnt && u2 < mq_pcf_maxlst; u2++)
{
uVal = tvb_get_guint32_endian(tvb, offset, bLittleEndian);
dissect_mqpcf_parm_int(tvb, tree, offset, uPrm, uVal, hf_mq_pcf_intlist, u2+1, uCnt, uDigit);
dissect_mqpcf_parm_int(tvb, tree, offset, uPrm, uVal, hf_mq_pcf_intlist, u2+1, uCnt, uDigit, bParse);
offset += 4;
}
if (u2 != uCnt)
@ -297,7 +321,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmccsid , tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmcount , tvb, offset + 16, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmstrlen, tvb, offset + 20, 4, bLittleEndian);
@ -307,7 +331,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
offset += uLenF+12;
for (u2 = 0; u2 < uCnt && u2 < mq_pcf_maxlst; u2++)
{
sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset,
sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, offset,
uSLn, (uCCS!=500)?ENC_ASCII:ENC_EBCDIC);
if (*sStr)
strip_trailing_blanks(sStr,uSLn);
@ -328,6 +352,16 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
case MQ_MQCFT_EVENT:
break;
case MQ_MQCFT_USER:
{
uSLn = tvb_get_guint32_endian(tvb, offset + uLenF, bLittleEndian);
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s", strPrm);
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_bytestring, tvb, offset + 8, uLen - 8, bLittleEndian);
}
break;
case MQ_MQCFT_BYTE_STRING:
{
@ -353,7 +387,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmstrlen, tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_bytestring, tvb, offset + uLenF + 4 , uSLn, bLittleEndian);
@ -370,13 +404,13 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
uOpe = tvb_get_guint32_endian(tvb, offset + uLenF , bLittleEndian);
uVal = tvb_get_guint32_endian(tvb, offset + uLenF + 4, bLittleEndian);
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s %d",
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s %d",
strPrm, val_to_str(uOpe, GET_VALSV(FilterOP)," Unknown (0x%02x)")+7, uVal);
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_filterop , tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_int, tvb, offset + uLenF + 4, 4, bLittleEndian);
@ -393,13 +427,13 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
sStr = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + uLenF + 12, uSLn, (uCCS!=500)?ENC_ASCII:ENC_EBCDIC), uSLn, '.');
strip_trailing_blanks(sStr,uSLn);
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s %s",
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s %s",
strPrm, val_to_str(uOpe, GET_VALSV(FilterOP)," Unknown (0x%02x)")+7, sStr);
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_filterop , tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmccsid , tvb, offset + 16, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmstrlen, tvb, offset + 20, 4, bLittleEndian);
@ -416,19 +450,19 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
{
guint8 *sStrA = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + uLenF + 8,uSLn,ENC_ASCII) , uSLn, '.');
guint8 *sStrE = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + uLenF + 8,uSLn,ENC_EBCDIC), uSLn, '.');
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s A(%s) E(%s)",
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s A(%s) E(%s)",
strPrm, val_to_str(uOpe, GET_VALSV(FilterOP)," Unknown (0x%02x)")+7, sStrA, sStrE);
}
else
{
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s <MISSING>",
ti = proto_tree_add_text(mq_tree, tvb, offset, uLen, "%s %s <MISSING>",
strPrm, val_to_str(uOpe, GET_VALSV(FilterOP)," Unknown (0x%02x)")+7);
}
tree = proto_item_add_subtree(ti, ett_mqpcf_prm);
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_filterop , tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmstrlen, tvb, offset + 16, 4, bLittleEndian);
@ -458,7 +492,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmunused, tvb, offset + 12, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_int64, tvb, offset + uLenF + 4, 8, bLittleEndian);
@ -479,7 +513,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
proto_tree_add_item(tree, hf_mq_pcf_prmtyp , tvb, offset , 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmlen , tvb, offset + 4, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmid , tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, (bParse)?hf_mq_pcf_prmid:hf_mq_pcf_prmidnovals, tvb, offset + 8, 4, bLittleEndian);
proto_tree_add_item(tree, hf_mq_pcf_prmcount, tvb, offset + 12, 4, bLittleEndian);
offset += uLenF + 4;
@ -507,12 +541,12 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq
}
}
static void dissect_mqpcf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, struct mqinfo* mqinfo)
static void dissect_mqpcf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, mq_parm_t* p_mq_parm)
{
gint offset = 0;
gboolean bLittleEndian;
bLittleEndian = ((mqinfo->encoding & MQ_MQENC_INTEGER_MASK)==MQ_MQENC_INTEGER_REVERSED)?ENC_LITTLE_ENDIAN:ENC_BIG_ENDIAN;
bLittleEndian = ((p_mq_parm->mq_cur_ccsid.encod & MQ_MQENC_INTEGER_MASK)==MQ_MQENC_INTEGER_REVERSED)?ENC_LITTLE_ENDIAN:ENC_BIG_ENDIAN;
if (tvb_length(tvb) >= 36)
{
@ -573,7 +607,7 @@ static void dissect_mqpcf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, s
proto_tree_add_item(mq_tree, hf_mqpcf_cfh_compcode , tvb, offset + 24, 4, bLittleEndian);
proto_tree_add_item(mq_tree, hf_mqpcf_cfh_reason , tvb, offset + 28, 4, bLittleEndian);
proto_tree_add_item(mq_tree, hf_mqpcf_cfh_ParmCount, tvb, offset + 32, 4, bLittleEndian);
dissect_mqpcf_parm(tvb, pinfo, mqroot_tree, offset + iSizeMQCFH, uCnt, bLittleEndian);
dissect_mqpcf_parm(tvb, pinfo, mqroot_tree, offset + iSizeMQCFH, uCnt, bLittleEndian, TRUE);
}
}
}
@ -582,13 +616,20 @@ static gboolean dissect_mqpcf_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree
{
if (tvb_length(tvb) >= 36)
{
struct mqinfo* mqinfo = (struct mqinfo *)data;
if (strncmp((const char*)mqinfo->format, MQ_MQFMT_ADMIN, 8) == 0
|| strncmp((const char*)mqinfo->format, MQ_MQFMT_EVENT, 8) == 0
|| strncmp((const char*)mqinfo->format, MQ_MQFMT_PCF, 8) == 0)
mq_parm_t* p_mq_parm = (mq_parm_t *)data;
if (strncmp((const char*)p_mq_parm->mq_format, MQ_MQFMT_ADMIN, 8) == 0
|| strncmp((const char*)p_mq_parm->mq_format, MQ_MQFMT_EVENT, 8) == 0
|| strncmp((const char*)p_mq_parm->mq_format, MQ_MQFMT_PCF, 8) == 0)
{
/* Dissect the packet */
dissect_mqpcf(tvb, pinfo, tree, mqinfo);
dissect_mqpcf(tvb, pinfo, tree, p_mq_parm);
return TRUE;
}
if (strncmp((const char *)p_mq_parm->mq_format, "LPOO", 4) == 0)
{
gboolean bLittleEndian;
bLittleEndian = ((p_mq_parm->mq_cur_ccsid.encod & MQ_MQENC_INTEGER_MASK)==MQ_MQENC_INTEGER_REVERSED)?ENC_LITTLE_ENDIAN:ENC_BIG_ENDIAN;
dissect_mqpcf_parm(tvb, pinfo, tree, 0, (guint32)-1, bLittleEndian, FALSE);
return TRUE;
}
}
@ -599,7 +640,7 @@ void proto_register_mqpcf(void)
{
expert_module_t* expert_mqpcf;
static hf_register_info hf[] =
static hf_register_info hf[] =
{
{ &hf_mqpcf_cfh_type , { "Type.....", "mqpcf.cfh.type", FT_UINT32, BASE_DEC, VALS(&GET_VALSV(mqcft)), 0x0, "CFH type", HFILL }},
{ &hf_mqpcf_cfh_length , { "Length...", "mqpcf.cfh.length", FT_UINT32, BASE_DEC, NULL, 0x0, "CFH length", HFILL }},
@ -614,8 +655,9 @@ void proto_register_mqpcf(void)
{ &hf_mq_pcf_prmtyp , { "ParmTyp..", "mqpcf.parm.type", FT_UINT32, BASE_DEC, VALS(&GET_VALSV(PrmTyp)), 0x0, "MQPCF parameter type", HFILL }},
{ &hf_mq_pcf_prmlen , { "ParmLen..", "mqpcf.parm.len", FT_UINT32, BASE_DEC, NULL, 0x0, "MQPCF parameter length", HFILL }},
{ &hf_mq_pcf_prmid , { "ParmID...", "mqpcf.parm.id", FT_UINT32, BASE_DEC, VALS(&GET_VALSV(PrmId)), 0x0, "MQPCF parameter id", HFILL }},
{ &hf_mq_pcf_prmidnovals , { "ParmID...", "mqpcf.parm.idNoVals", FT_UINT32, BASE_HEX_DEC, NULL, 0x0, "MQPCF parameter id No Vals", HFILL }},
{ &hf_mq_pcf_filterop , { "FilterOP.", "mqpcf.filter.op", FT_UINT32, BASE_DEC, VALS(&GET_VALSV(FilterOP)), 0x0, "MQPCF Filter operator", HFILL }},
{ &hf_mq_pcf_prmccsid , { "ParmCCSID", "mqpcf.parm.ccsid", FT_UINT32, BASE_DEC, NULL, 0x0, "MQPCF parameter ccsid", HFILL }},
{ &hf_mq_pcf_prmccsid , { "ParmCCSID", "mqpcf.parm.ccsid", FT_UINT32, BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "MQPCF parameter ccsid", HFILL }},
{ &hf_mq_pcf_prmstrlen , { "ParmStrLn", "mqpcf.parm.strlen", FT_UINT32, BASE_DEC, NULL, 0x0, "MQPCF parameter strlen", HFILL }},
{ &hf_mq_pcf_prmcount , { "ParmCount", "mqpcf.parm.count", FT_UINT32, BASE_DEC, NULL, 0x0, "MQPCF parameter count", HFILL }},
{ &hf_mq_pcf_prmunused , { "ParmUnuse", "mqpcf.parm.unused", FT_UINT32, BASE_DEC, NULL, 0x0, "MQPCF parameter unused", HFILL }},
@ -627,13 +669,13 @@ void proto_register_mqpcf(void)
{ &hf_mq_pcf_int64 , { "Int64....", "mqpcf.parm.int64", FT_INT64, BASE_DEC, NULL, 0x0, "MQPCF parameter int64", HFILL }},
{ &hf_mq_pcf_int64list , { "Int64List", "mqpcf.parm.int64list", FT_INT64, BASE_DEC, NULL, 0x0, "MQPCF parameter int64 list", HFILL }},
};
static gint *ett[] =
static gint *ett[] =
{
&ett_mqpcf,
&ett_mqpcf_prm,
&ett_mqpcf_cfh,
};
static ei_register_info ei[] =
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_MaxInt, { "mqpcf.parm.IntList", PI_UNDECODED, PI_WARN, "MQPCF Parameter Integer list exhausted", EXPFILL }},

File diff suppressed because it is too large Load Diff

View File

@ -28,43 +28,57 @@
#ifndef __PACKET_MQ_H__
#define __PACKET_MQ_H__
#define DEF_VALSX(A) extern const value_string mq_##A##_vals[]
#define GET_VALSV(A) mq_##A##_vals
#define GET_VALSP(F) (gchar *)GET_VALSV(F)
#define DEF_VALSB(A) const value_string mq_##A##_vals[] = \
#define GET_VALSV(A) mq_##A##_vals
#define DEF_VALSX(A) extern const value_string GET_VALSV(A)[]
#define GET_VALSP(F) (gchar *)GET_VALSV(F)
#define DEF_VALSB(A) const value_string GET_VALSV(A)[] = \
{
#define DEF_VALS1(A) { (guint32)MQ_##A, #A }
#define DEF_VALS2(A,B) { (guint32)MQ_##A, B }
#define DEF_VALSE \
{ 0, NULL } \
}
#define DEF_VALSEXT(A) value_string_ext GET_VALSV(A)_ext = VALUE_STRING_EXT_INIT(GET_VALSV(A))
#define DEF_VALSEXTX(A) extern value_string_ext GET_VALSV(A)_ext
#define DEF_VALSEXT(A) value_string_ext mq_##A##_vals_ext = VALUE_STRING_EXT_INIT(mq_##A##_vals)
#define DEF_VALSEXTX(A) extern value_string_ext mq_##A##_vals_ext
/*
* Private data passed from the MQ dissector to subdissectors.
*/
struct mqinfo
/* | BASE_RANGE_STRING, GET_VALRV(RVALS(aaa)) */
#define GET_VALRV(A) mq_##A##_rvals
#define DEF_VALRX(A) extern const range_string GET_VALRV(A)[]
#define GET_VALRP(F) (gchar *)GET_VALRV(F)
#define DEF_VALRB(A) const range_string GET_VALRV(A)[] = \
{
guint32 encoding; /* Message encoding */
guint32 ccsid; /* Message character set */
guint8 format[8]; /* Message format */
};
#define DEF_VALR1(A) { (guint32)MQ_##A, (guint32)MQ_##A, #A }
#define DEF_VALR3(A,B,C) { (guint32)MQ_##A, (guint32)MQ_##B, C }
#define DEF_VALRE \
{ 0, 0, NULL } \
}
#define DEF_VALREXTX(A) extern value_string_ext GET_VALRV(A)_ext
typedef struct _mq_ccsid_t
{
guint32 encod;
guint32 ccsid;
} mq_ccsid_t;
typedef struct _mq_parm_t
{
guint32 mq_strucID ;
guint32 mq_int_enc ;
guint32 mq_str_enc ;
guint32 mq_encode ;
guint16 mq_ccsid ;
guint8 mq_ctlf1 ;
guint8 mq_ctlf2 ;
guint8 mq_opcode ;
mq_ccsid_t mq_tsh_ccsid;
mq_ccsid_t mq_id_ccsid;
mq_ccsid_t mq_md_ccsid;
mq_ccsid_t mq_dlh_ccsid;
mq_ccsid_t mq_head_ccsid;
mq_ccsid_t mq_msgreq_ccsid;
mq_ccsid_t mq_cur_ccsid;
guint8 mq_format[8];
gint32 iOfsEnc; /* Offset to Message encoding */
gint32 iOfsCcs; /* Offset to Message character set */
gint32 iOfsFmt; /* Offset to Message format */
} mq_parm_t;
#define MQ_MQCA_XR_VERSION2 2120
@ -336,6 +350,11 @@ typedef struct _mq_parm_t
#define MQ_MQMO_MATCH_MSG_TOKEN 0x00000020
#define MQ_MQMO_NONE 0x00000000
/* LPOO Options */
#define MQ_LPOO_SAVE_IDENTITY_CTXT 0x00000001
#define MQ_LPOO_SAVE_ORIGIN_CTXT 0x00000002
#define MQ_LPOO_SAVE_USER_CTXT 0x00000004
/* Group Status */
#define MQ_MQGS_NOT_IN_GROUP ' '
#define MQ_MQGS_MSG_IN_GROUP 'G'
@ -531,13 +550,15 @@ typedef struct _mq_parm_t
#define MQ_MQENC_AS_PUBLISHED (-1)
/* Coded Character Set Identifiers */
#define MQ_MQCCSI_AS_PUBLISHED (-4)
#define MQ_MQCCSI_APPL (-3)
#define MQ_MQCCSI_INHERIT (-2)
#define MQ_MQCCSI_EMBEDDED (-1)
#define MQ_MQCCSI_UNDEFINED 0
#define MQ_MQCCSI_DEFAULT 0
#define MQ_MQCCSI_Q_MGR 0
#define MQ_MQCCSI_INHERIT (-2)
#define MQ_MQCCSI_EMBEDDED (-1)
#define MQ_MQCCSI_APPL (-3)
#define MQ_MQCCSI_AS_PUBLISHED (-4)
#define MQ_MQCCSI_1 1
#define MQ_MQCCSI_65535 65535
/* Formats */
#define MQ_MQFMT_NONE " "
@ -1855,7 +1876,6 @@ typedef struct _mq_parm_t
/* Capability */
#define MQ_MQCAP_NOT_SUPPORTED 0
#define MQ_MQCAP_SUPPORTED 1
#define MQ_MQCAP_EXPIRED 2
/****************************************************************/
/* Values Related to Topic Attributes */
@ -4797,12 +4817,16 @@ typedef struct _mq_parm_t
#define MQ_MQCLCT_STATIC 0
#define MQ_MQCLCT_DYNAMIC 1
/* Transmission queue types */
#define MQ_MQCLXQ_SCTQ 0
#define MQ_MQCLXQ_CHANNEL 1
#endif
extern guint32 tvb_get_guint32_endian(tvbuff_t *a_tvb, gint a_iOffset, gint a_rep);
extern guint16 tvb_get_guint16_endian(tvbuff_t *a_tvb, gint a_iOffset, gint a_rep);
extern guint64 tvb_get_guint64_endian(tvbuff_t *a_tvb, gint a_iOffset, gint a_rep);
extern guint32 strip_trailing_blanks(guint8 *a_str, guint32 a_size);
extern gint32 strip_trailing_blanks(guint8 *a_str, guint32 a_size);
DEF_VALSX(mqcc);
DEF_VALSX(mqrc);
@ -4817,6 +4841,8 @@ DEF_VALSX(FilterOP);
DEF_VALSX(MQCFINT_Parse);
DEF_VALRX(ccsid);
/*
* Editor modelines - http://www.wireshark.org/tools/modelines.html
*