diff options
author | robionekenobi <robionekenobi@bluewin.ch> | 2014-08-03 21:49:29 +0200 |
---|---|---|
committer | Anders Broman <a.broman58@gmail.com> | 2014-08-06 06:49:31 +0000 |
commit | 09357c116c8edf29f9d224ed70774f1dfdd75331 (patch) | |
tree | 48a2cf8ff17d2744ef2998ad48f405ed6761de43 | |
parent | 1a02ca0150e434d9ddc7c023267c9097a059b6be (diff) |
mq improvements:
- handle RFH structure
- use tvb_reported_length...,
- Add Conversation/Request in row display
Change-Id: I84c5cf3e9479d91b363eb093e71bb6bdf07e8194
Reviewed-on: https://code.wireshark.org/review/3354
Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r-- | epan/dissectors/packet-mq-pcf.c | 6 | ||||
-rw-r--r-- | epan/dissectors/packet-mq.c | 359 | ||||
-rw-r--r-- | epan/dissectors/packet-mq.h | 2 |
3 files changed, 235 insertions, 132 deletions
diff --git a/epan/dissectors/packet-mq-pcf.c b/epan/dissectors/packet-mq-pcf.c index 4e9635644c..94b3017a79 100644 --- a/epan/dissectors/packet-mq-pcf.c +++ b/epan/dissectors/packet-mq-pcf.c @@ -188,7 +188,7 @@ static void dissect_mqpcf_parm(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mq guint32 xOfs = offset; uCnt = 0; - while (tvb_length_remaining(tvb, xOfs) >= 16) + while (tvb_reported_length_remaining(tvb, xOfs) >= 16) { uLen = tvb_get_guint32_endian(tvb, xOfs + 4, bLittleEndian); if (uLen < 16) @@ -553,7 +553,7 @@ static void dissect_mqpcf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, m 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) + if (tvb_reported_length(tvb) >= 36) { gint iSizeMQCFH = 36; guint32 iCommand = tvb_get_guint32_endian(tvb, offset + 12, bLittleEndian); @@ -618,7 +618,7 @@ static void dissect_mqpcf(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, m static gboolean dissect_mqpcf_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data) { - if (data && tvb_length(tvb) >= 36) + if (data && tvb_reported_length(tvb) >= 36) { mq_parm_t *p_mq_parm = (mq_parm_t *)data; if (strncmp((const char*)p_mq_parm->mq_format, MQ_MQFMT_ADMIN, 8) == 0 diff --git a/epan/dissectors/packet-mq.c b/epan/dissectors/packet-mq.c index 5f525419e8..ba1d989718 100644 --- a/epan/dissectors/packet-mq.c +++ b/epan/dissectors/packet-mq.c @@ -610,9 +610,9 @@ static int hf_mq_lpoo_lpiopts = -1; static int hf_mq_lpoo_defpersist = -1; static int hf_mq_lpoo_defputresptype = -1; static int hf_mq_lpoo_defreadahead = -1; +static int hf_mq_lpoo_unknown5 = -1; static int hf_mq_lpoo_qprotect = -1; static int hf_mq_lpoo_unknown6 = -1; -/*static int hf_mq_lpoo_unknown7 = -1;*/ static int hf_mq_lpoo_xtradata = -1; static int hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT = -1; @@ -620,9 +620,9 @@ static int hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT = -1 ; static int hf_mq_lpoo_lpiopts_SAVE_USER_CTXT = -1; static const int *pf_flds_lpooopt[] = { - &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, - &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, &hf_mq_lpoo_lpiopts_SAVE_USER_CTXT, + &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT, + &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, NULL }; @@ -859,6 +859,10 @@ static int hf_mq_cih_erroroffset = -1; static int hf_mq_cih_inputitem = -1; static int hf_mq_cih_reserved4 = -1; +static int hf_mq_rfh_ccsid = -1; +static int hf_mq_rfh_length = -1; +static int hf_mq_rfh_string = -1; + static int hf_mq_rmh_flags_last = -1; static const int *pf_flds_rmh_flags[] = { @@ -930,6 +934,7 @@ static gint ett_mq_gmo_option = -1; static gint ett_mq_gmo_matchoption = -1; static gint ett_mq_pmo = -1; static gint ett_mq_pmo_option = -1; +static gint ett_mq_rfh_ValueName = -1; static gint ett_mq_lpoo = -1; static gint ett_mq_lpoo_options = -1; @@ -1354,6 +1359,7 @@ static reassembly_table mq_reassembly_table; #define MQ_TEXT_OD "Object Descriptor" #define MQ_TEXT_PMO "Put Message Options" #define MQ_TEXT_RMH "Reference Message Header" +#define MQ_TEXT_RFH "Rules and Formatting Header" #define MQ_TEXT_TM "Trigger Message" #define MQ_TEXT_TMC2 "Trigger Message 2 (character format)" #define MQ_TEXT_WIH "Work Information Header" @@ -1556,6 +1562,7 @@ DEF_VALSB(StructID) DEF_VALS2(STRUCTID_MSH , MQ_TEXT_MSH), DEF_VALS2(STRUCTID_OD , MQ_TEXT_OD), DEF_VALS2(STRUCTID_PMO , MQ_TEXT_PMO), + DEF_VALS2(STRUCTID_RFH , MQ_TEXT_RFH), DEF_VALS2(STRUCTID_RMH , MQ_TEXT_RMH), DEF_VALS2(STRUCTID_TM , MQ_TEXT_TM), DEF_VALS2(STRUCTID_TMC2 , MQ_TEXT_TMC2), @@ -1594,6 +1601,7 @@ DEF_VALSB(StructID) DEF_VALS2(STRUCTID_MDE_EBCDIC , MQ_TEXT_MDE), DEF_VALS2(STRUCTID_OD_EBCDIC , MQ_TEXT_OD), DEF_VALS2(STRUCTID_PMO_EBCDIC , MQ_TEXT_PMO), + DEF_VALS2(STRUCTID_RFH_EBCDIC , MQ_TEXT_RFH), DEF_VALS2(STRUCTID_RMH_EBCDIC , MQ_TEXT_RMH), DEF_VALS2(STRUCTID_TM_EBCDIC , MQ_TEXT_TM), DEF_VALS2(STRUCTID_TMC2_EBCDIC, MQ_TEXT_TMC2), @@ -1861,7 +1869,7 @@ static gint dissect_mq_charv(tvbuff_t *tvb, proto_tree *tree, gint offset, gint eStr = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); if (lStr && oStr) { - sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, oStr, lStr, p_mq_parm->mq_str_enc); + sStr = (const char *)tvb_get_string_enc(wmem_packet_scope(), tvb, oStr, lStr, p_mq_parm->mq_str_enc); } else sStr = NULL; @@ -1891,7 +1899,7 @@ static gint dissect_mq_pmr(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iN if (offsetPMR != 0 && iSizePMR1 != 0) { iSizePMR = iNbrRecords * iSizePMR1; - if (tvb_length_remaining(tvb, offset) >= iSizePMR) + if (tvb_reported_length_remaining(tvb, offset) >= iSizePMR) { if (tree) { @@ -1938,7 +1946,7 @@ static gint dissect_mq_or(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iNb if (offsetOR != 0) { iSizeOR = iNbrRecords * 96; - if (tvb_length_remaining(tvb, offset) >= iSizeOR) + if (tvb_reported_length_remaining(tvb, offset) >= iSizeOR) { if (tree) { @@ -1963,7 +1971,7 @@ static gint dissect_mq_rr(tvbuff_t *tvb, proto_tree *tree, gint offset, gint iNb if (offsetRR != 0) { iSizeRR = iNbrRecords * 8; - if (tvb_length_remaining(tvb, offset) >= iSizeRR) + if (tvb_reported_length_remaining(tvb, offset) >= iSizeRR) { if (tree) { @@ -1986,7 +1994,7 @@ static gint dissect_mq_gmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, { gint iSize = 0; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_GMO || p_mq_parm->mq_strucID == MQ_STRUCTID_GMO_EBCDIC) { guint32 iVersion = 0; @@ -1999,7 +2007,7 @@ static gint dissect_mq_gmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, case 3: iSize = 100; break; } - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sQueue; sQueue = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 24, 48, p_mq_parm->mq_str_enc); @@ -2050,7 +2058,7 @@ static gint dissect_mq_pmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, { gint iSize = 0; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_PMO || p_mq_parm->mq_strucID == MQ_STRUCTID_PMO_EBCDIC) { guint32 iVersion = 0; @@ -2062,7 +2070,7 @@ static gint dissect_mq_pmo(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, case 2: iSize = 152;break; } - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sQueue; @@ -2129,7 +2137,7 @@ static gint dissect_mq_od(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g { gint iSize = 0; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_OD || p_mq_parm->mq_strucID == MQ_STRUCTID_OD_EBCDIC) { /* The OD struct can be present in several messages at different levels */ @@ -2144,7 +2152,7 @@ static gint dissect_mq_od(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g case 4: iSize = 336+3*20+4; break; } - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { gint iNbrRecords = 0; guint8 *sObj; @@ -2220,7 +2228,7 @@ static gint dissect_mq_od(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, g static gint dissect_mq_xid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm, gint offset) { gint iSizeXid = 0; - if (tvb_length_remaining(tvb, offset) >= 6) + if (tvb_reported_length_remaining(tvb, offset) >= 6) { guint8 iXidLength = 0; guint8 iBqLength = 0; @@ -2229,7 +2237,7 @@ static gint dissect_mq_xid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm iBqLength = tvb_get_guint8(tvb, offset + 5); iSizeXid = 6 + iXidLength + iBqLength; - if (tvb_length_remaining(tvb, offset) >= iSizeXid) + if (tvb_reported_length_remaining(tvb, offset) >= iSizeXid) { if (tree) { @@ -2244,7 +2252,7 @@ static gint dissect_mq_xid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm 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) + if (tvb_reported_length_remaining(tvb, offset) < iSizeXid) iSizeXid = 0; } else iSizeXid = 0; @@ -2279,6 +2287,11 @@ static gint dissect_mq_sid(tvbuff_t *tvb, proto_tree *tree, mq_parm_t *p_mq_parm } return offset - bOffset; } +static void dissect_mq_addCR_colinfo(packet_info *pinfo, mq_parm_t *p_mq_parm) +{ + if (p_mq_parm->mq_convID) + col_append_fstr(pinfo->cinfo, COL_INFO, " C.R=%d.%d", p_mq_parm->mq_convID, p_mq_parm->mq_rqstID); +} static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_tree, gint offset, mq_parm_t *p_mq_parm) { guint8 iFAPLvl; @@ -2293,10 +2306,11 @@ static gint dissect_mq_id(tvbuff_t *tvb, packet_info *pinfo, proto_tree *mqroot_ else iSize = 208; - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { guint8 *sChannel; sChannel = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 24, 20, p_mq_parm->mq_str_enc); + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); col_append_fstr(pinfo->cinfo, COL_INFO, " FAPLvl=%d", iFAPLvl); if (strip_trailing_blanks(sChannel, 20) > 0) { @@ -2375,7 +2389,7 @@ static gint dissect_mq_md(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_parm_ { gint iSize = 0; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_MD || p_mq_parm->mq_strucID == MQ_STRUCTID_MD_EBCDIC) { guint32 iVersion = 0; @@ -2387,7 +2401,7 @@ static gint dissect_mq_md(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_parm_ case 2: iSize = 364; break; } - if (bDecode && iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (bDecode && iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { p_mq_parm->iOfsEnc = offset + 24; p_mq_parm->iOfsCcs = offset + 28; @@ -2441,11 +2455,11 @@ static gint dissect_mq_fopa(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_par { gint iSize = 0; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA || p_mq_parm->mq_strucID == MQ_STRUCTID_FOPA_EBCDIC) { iSize = tvb_get_guint32_endian(tvb, offset+8, p_mq_parm->mq_int_enc); - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { if (tree) { @@ -2470,13 +2484,14 @@ static gint dissect_mq_fopa(tvbuff_t *tvb, proto_tree *tree, gint offset, mq_par } static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { - gint offset = 0; - guint32 iSegmentLength = 0; - guint32 iSizePayload = 0; - gint iSizeMD = 0; - gboolean bPayload = FALSE; - gboolean bEBCDIC = FALSE; + gint offset = 0; + guint32 iSegmentLength = 0; + guint32 iSizePayload = 0; + gint iSizeMD = 0; + gboolean bPayload = FALSE; + gboolean bEBCDIC = FALSE; gint iDistributionListSize = 0; + gint capLen; mq_parm_t *p_mq_parm; heur_dtbl_entry_t *hdtbl_entry; @@ -2491,12 +2506,13 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) p_mq_parm->iOfsEnc = 0; p_mq_parm->iOfsFmt = 0; p_mq_parm->iOfsCcs = 0; - if (tvb_length(tvb) >= 4) + + if (tvb_reported_length(tvb) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); if (((p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (p_mq_parm->mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 28) + && tvb_reported_length_remaining(tvb, offset) >= 28) { proto_tree *mq_tree = NULL; proto_tree *mqroot_tree = NULL; @@ -2516,10 +2532,12 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM || p_mq_parm->mq_strucID == MQ_STRUCTID_TSHM_EBCDIC) { - if (tvb_length_remaining(tvb, offset) < 36) + if (tvb_reported_length_remaining(tvb, offset) < 36) return; iSizeMPF += 8; iSizeTSH = 36; + p_mq_parm->mq_convID = tvb_get_ntohl(tvb, offset + 8); + p_mq_parm->mq_rqstID = tvb_get_ntohl(tvb, offset + 12); } p_mq_parm->mq_opcode = tvb_get_guint8(tvb, offset + iSizeMPF + 9); @@ -2589,21 +2607,22 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += iSizeTSH; /* Now dissect the embedded structures */ - if (tvb_length_remaining(tvb, offset) >= 4) + if (tvb_reported_length_remaining(tvb, offset) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); if (((p_mq_parm->mq_ctlf1 & MQ_TCF_FIRST) != 0) || p_mq_parm->mq_opcode < 0x80) { /* First MQ segment (opcodes below 0x80 never span several TSH) */ gint iSizeAPI = 16; - if (p_mq_parm->mq_opcode >= 0x80 && p_mq_parm->mq_opcode <= 0x9F && tvb_length_remaining(tvb, offset) >= 16) + if (p_mq_parm->mq_opcode >= 0x80 && p_mq_parm->mq_opcode <= 0x9F && tvb_reported_length_remaining(tvb, offset) >= 16) { guint32 iReturnCode = 0; guint32 iHdl = 0; iReturnCode = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); iHdl = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); if (iHdl != 0 && iHdl != 0xffffffff) - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x", iHdl); if (iReturnCode != 0) col_append_fstr(pinfo->cinfo, COL_INFO, " [RC=%d]", iReturnCode); @@ -2617,9 +2636,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_api_objecthdl, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); } offset += iSizeAPI; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 20) + capLen = tvb_reported_length_remaining(tvb , offset); + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MSH || p_mq_parm->mq_strucID == MQ_STRUCTID_MSH_EBCDIC) && capLen >= 20) { gint iSize = 20; iSizePayload = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); @@ -2636,7 +2656,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } offset += iSize; } - else if (p_mq_parm->mq_opcode == MQ_TST_CONAUTH_INFO && tvb_length_remaining(tvb, offset) >= 20) + else if (p_mq_parm->mq_opcode == MQ_TST_CONAUTH_INFO && capLen >= 20) { gint iSize = 24; gint iUsr = 0; @@ -2660,13 +2680,24 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_caut_usr, tvb, offset + 24, iUsr, p_mq_parm->mq_str_enc); if (iPsw) proto_tree_add_item(mq_tree, hf_mq_caut_psw, tvb, offset + 24 + iUsr, iPsw, p_mq_parm->mq_str_enc); -} + } offset += iSize + iUsr + iPsw; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } - else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && tvb_length_remaining(tvb, offset) >= 20) + else if (p_mq_parm->mq_opcode == MQ_TST_SOCKET_ACTION && capLen >= 20) { gint iSize = 20; + gint iTy; + gint iP1; + gint iP2; + + p_mq_parm->mq_convID = tvb_get_guint32_endian(tvb, offset , p_mq_parm->mq_int_enc); + p_mq_parm->mq_rqstID = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); + iTy = tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); + iP1 = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); + iP2 = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); + col_append_fstr(pinfo->cinfo, COL_INFO, " Type=%d, P1=%d, P2=%d", iTy, iP1, iP2); if (tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, iSizeAPI, ett_mq_socket, NULL, MQ_TEXT_SOCKET); @@ -2678,9 +2709,9 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_socket_parm2, tvb, offset + 16, 4, p_mq_parm->mq_int_enc); } offset += iSize; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } - else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && tvb_length_remaining(tvb, offset) >= 8) + else if (p_mq_parm->mq_opcode == MQ_TST_STATUS && capLen >= 8) { /* Some status are 28 bytes long and some are 36 bytes long */ gint iStatus = 0; @@ -2689,7 +2720,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) iStatus = tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); iStatusLength = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); - if (tvb_length_remaining(tvb, offset) >= iStatusLength) + if (tvb_reported_length_remaining(tvb, offset) >= iStatusLength) { if (iStatus != 0) col_append_fstr(pinfo->cinfo, COL_INFO, " Code=%s", val_to_str(iStatus, GET_VALSV(status), "Unknown (0x%08x)")); @@ -2707,7 +2738,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += iStatusLength; } } - else if (p_mq_parm->mq_opcode == MQ_TST_PING && tvb_length_remaining(tvb, offset) > 4) + else if (p_mq_parm->mq_opcode == MQ_TST_PING && capLen > 4) { if (tree) { @@ -2716,9 +2747,9 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_ping_length, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_ping_buffer, tvb, offset + 4, -1, ENC_NA); } - offset = tvb_length(tvb); + offset = tvb_reported_length(tvb); } - else if (p_mq_parm->mq_opcode == MQ_TST_RESET && tvb_length_remaining(tvb, offset) >= 8) + else if (p_mq_parm->mq_opcode == MQ_TST_RESET && capLen >= 8) { if (tree) { @@ -2727,11 +2758,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_reset_length, tvb, offset, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_reset_seqnum, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); } - offset = tvb_length(tvb); + offset = tvb_reported_length(tvb); } else if ((p_mq_parm->mq_opcode == MQ_TST_MQOPEN || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE || - p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY) - && tvb_length_remaining(tvb, offset) >= 4) + p_mq_parm->mq_opcode == MQ_TST_MQOPEN_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQCLOSE_REPLY) && capLen >= 4) { offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); if (tree) @@ -2747,11 +2777,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } offset += 4; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; offset += dissect_mq_fopa(tvb, mqroot_tree, offset, p_mq_parm); } - else if ((p_mq_parm->mq_opcode == MQ_TST_MQCONN || p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY) && - tvb_length_remaining(tvb, offset) > 0) + else if ((p_mq_parm->mq_opcode == MQ_TST_MQCONN || p_mq_parm->mq_opcode == MQ_TST_MQCONN_REPLY) && capLen > 0) { gint iSizeCONN = 0; gint nofs; @@ -2764,17 +2793,17 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (iSizeCONN != 112 && iSizeCONN != 120 && iSizeCONN != 260 && iSizeCONN != 332) iSizeCONN = 0; - if (iSizeCONN != 0 && tvb_length_remaining(tvb, offset) >= iSizeCONN) + if (iSizeCONN != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeCONN) { - guint8 *sApplicationName; - guint8 *sQMgr; + gchar *sApplicationName; + gchar *sQMgr; sApplicationName = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 48, 28, p_mq_parm->mq_str_enc), 28, '.'); - if (strip_trailing_blanks(sApplicationName, 28) > 0) + if (strip_trailing_blanks((guint8 *)sApplicationName, 28) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " App=%s", sApplicationName); } sQMgr = format_text_chr(tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 48, p_mq_parm->mq_str_enc), 48, '.'); - if (strip_trailing_blanks(sQMgr, 48) > 0) + if (strip_trailing_blanks((guint8 *)sQMgr, 48) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " QM=%s", sQMgr); } @@ -2822,7 +2851,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += iSizeCONN; } } - else if ((p_mq_parm->mq_opcode == MQ_TST_MQINQ || p_mq_parm->mq_opcode == MQ_TST_MQINQ_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQSET) && tvb_length_remaining(tvb, offset) >= 12) + else if ((p_mq_parm->mq_opcode == MQ_TST_MQINQ || p_mq_parm->mq_opcode == MQ_TST_MQINQ_REPLY || p_mq_parm->mq_opcode == MQ_TST_MQSET) && capLen >= 12) { /* The MQINQ/MQSET structure is special because it does not start with a structid */ gint iNbSelectors; @@ -2839,12 +2868,12 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_inq, NULL, MQ_TEXT_INQ); - proto_tree_add_item(mq_tree, hf_mq_inq_nbsel, tvb, offset, 4, p_mq_parm->mq_int_enc); - proto_tree_add_item(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_inq_nbsel, tvb, offset, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_inq_nbint, tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_inq_charlen, tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } iOffsetINQ = 12; - if (tvb_length_remaining(tvb, offset + iOffsetINQ) >= iNbSelectors * 4) + if (tvb_reported_length_remaining(tvb, offset + iOffsetINQ) >= iNbSelectors * 4) { if (tree) { @@ -2858,7 +2887,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { gint iSizeINQValues; iSizeINQValues = iNbIntegers * 4 + iCharLen; - if (tvb_length_remaining(tvb, offset + iOffsetINQ) >= iSizeINQValues) + if (tvb_reported_length_remaining(tvb, offset + iOffsetINQ) >= iSizeINQValues) { gint iInteger; if (tree) @@ -2879,15 +2908,19 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } } - offset += tvb_length(tvb); + offset += tvb_reported_length(tvb); } else if (p_mq_parm->mq_opcode == MQ_TST_NOTIFICATION) { - gint iHdl; + guint uHdl; + guint uCod; - iHdl = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); + uHdl = tvb_get_guint32_endian(tvb, offset+4, p_mq_parm->mq_int_enc); + uCod = tvb_get_guint32_endian(tvb, offset+8, p_mq_parm->mq_int_enc); - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x", iHdl); + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x Cod=%s(0x%x)", + uHdl, try_val_to_str(uCod, GET_VALSV(notifcode)), uCod); if (tree) { @@ -2899,7 +2932,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_notif_value, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); } offset+=16; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_REQUEST_MSGS) { @@ -2920,7 +2953,8 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) p_mq_parm->mq_msgreq_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 44, p_mq_parm->mq_int_enc); p_mq_parm->mq_msgreq_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 48, p_mq_parm->mq_int_enc); } - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, MaxLen=%d", + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); + col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, MaxLen=%d", iHdl, iGlbMsgIdx, iMaxMsgLen); if (tree) @@ -2973,7 +3007,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } offset += (iFlags & 0x00000010) ? (64+xOfs) : 40; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } else if (p_mq_parm->mq_opcode == MQ_TST_ASYNC_MESSAGE) { @@ -3006,7 +3040,8 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (!mq_in_reassembly) { - col_append_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", + 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); } @@ -3035,12 +3070,12 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } offset+=iHdrL; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; - iSizePayload = tvb_length_remaining(tvb, offset); + iSizePayload = tvb_reported_length_remaining(tvb, offset); bPayload = (iSizePayload>0); } - else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && tvb_length_remaining(tvb, offset) >= 12) + else if ((p_mq_parm->mq_opcode == MQ_TST_SPI || p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) && capLen >= 12) { gint iOffsetSPI = 0; guint32 iSpiVerb = 0; @@ -3062,31 +3097,31 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } offset += 12; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (((p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxU_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 12) + && tvb_reported_length_remaining(tvb, offset) >= 12) { gint iSizeSPIMD = 0; if (tree) { guint8 *sStructId; sStructId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 4, ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx) ? ENC_ASCII : ENC_EBCDIC); - mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi_base, NULL, sStructId); + mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, 12, ett_mq_spi_base, NULL, (const char *)sStructId); proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_length , tvb, offset + 8, 4, p_mq_parm->mq_int_enc); } offset += 12; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if ((iSizeSPIMD = dissect_mq_md(tvb, mqroot_tree, offset, p_mq_parm, TRUE)) != 0) { offset += iSizeSPIMD; offset += dissect_mq_gmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm); offset += dissect_mq_pmo(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); @@ -3095,14 +3130,14 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxO_EBCDIC || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI || (p_mq_parm->mq_strucID & MQ_MASK_SPxZ) == MQ_STRUCTID_SPxI_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 12) + && tvb_reported_length_remaining(tvb, offset) >= 12) { if (tree) { /* Dissect the common part of these structures */ guint8 *sStructId; sStructId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, 4, ((p_mq_parm->mq_strucID & MQ_MASK_SPxx) == MQ_STRUCTID_SPxx) ? ENC_ASCII : ENC_EBCDIC); - mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_spi_base, NULL, sStructId); + mq_tree = proto_tree_add_subtree(mqroot_tree, tvb, offset, -1, ett_mq_spi_base, NULL, (const char *)sStructId); proto_tree_add_item(mq_tree, hf_mq_spi_base_StructID, tvb, offset, 4, p_mq_parm->mq_str_enc); proto_tree_add_item(mq_tree, hf_mq_spi_base_version , tvb, offset + 4, 4, p_mq_parm->mq_int_enc); @@ -3110,7 +3145,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPQO_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 16) + && tvb_reported_length_remaining(tvb, offset) >= 16) { if (tree) { @@ -3118,7 +3153,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_spi_spqo_nbverb, tvb, offset + 12, 4, p_mq_parm->mq_int_enc); iVerbNumber = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); - if (tvb_length_remaining(tvb, offset) >= iVerbNumber * 20 + 16) + if (tvb_reported_length_remaining(tvb, offset) >= iVerbNumber * 20 + 16) { gint iVerb = 0; iOffsetSPI = offset + 16; @@ -3136,7 +3171,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPAI_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 136) + && tvb_reported_length_remaining(tvb, offset) >= 136) { if (tree) { @@ -3148,7 +3183,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += 136; } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPGI_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 24) + && tvb_reported_length_remaining(tvb, offset) >= 24) { if (tree) { @@ -3160,7 +3195,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } else if ((p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI || p_mq_parm->mq_strucID == MQ_STRUCTID_SPGO_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_SPPI_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 20) + && tvb_reported_length_remaining(tvb, offset) >= 20) { if (tree) { @@ -3175,11 +3210,11 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) { offset += 12; } - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } } } - else if ((p_mq_parm->mq_opcode >= 0xA0 && p_mq_parm->mq_opcode <= 0xB9) && tvb_length_remaining(tvb, offset) >= 16) + else if ((p_mq_parm->mq_opcode >= 0xA0 && p_mq_parm->mq_opcode <= 0xB9) && capLen >= 16) { /* The XA structures are special because they do not start with a structid */ if (tree) @@ -3204,11 +3239,11 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += iSizeXid; } else if ((p_mq_parm->mq_opcode == MQ_TST_XA_OPEN || p_mq_parm->mq_opcode == MQ_TST_XA_CLOSE) - && tvb_length_remaining(tvb, offset) >= 1) + && tvb_reported_length_remaining(tvb, offset) >= 1) { guint8 iXAInfoLength = 0; iXAInfoLength = tvb_get_guint8(tvb, offset); - if (tvb_length_remaining(tvb, offset) >= iXAInfoLength + 1) + if (tvb_reported_length_remaining(tvb, offset) >= iXAInfoLength + 1) { if (tree) { @@ -3221,7 +3256,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += 1 + iXAInfoLength; } else if ((p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER || p_mq_parm->mq_opcode == MQ_TST_XA_RECOVER_REPLY) - && tvb_length_remaining(tvb, offset) >= 4) + && tvb_reported_length_remaining(tvb, offset) >= 4) { gint iNbXid = 0; iNbXid = tvb_get_guint32_endian(tvb, offset, p_mq_parm->mq_int_enc); @@ -3244,7 +3279,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO || p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO_EBCDIC) && tvb_length_remaining(tvb, offset) >= 32) + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO || p_mq_parm->mq_strucID == MQ_STRUCTID_LPOO_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 32) { guint iVersion; guint iXtraData = 0; @@ -3256,7 +3291,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) iXtraData = tvb_get_guint32_endian(tvb, offset + 84, p_mq_parm->mq_int_enc); } - if (iSize != 0 && tvb_length_remaining(tvb, offset) >= iSize) + if (iSize != 0 && tvb_reported_length_remaining(tvb, offset) >= iSize) { if (tree) { @@ -3267,7 +3302,8 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) dissect_mq_MQOO(tvb, mq_tree, offset+8, ett_mq_lpoo_options, hf_mq_lpoo_options, p_mq_parm); - dissect_mq_LPOO_LPIOPTS(tvb, mq_tree, offset+16, ett_mq_lpoo_lpiopts, p_mq_parm); + dissect_mq_LPOO_LPIOPTS(tvb, mq_tree, offset+12, ett_mq_lpoo_lpiopts, p_mq_parm); + proto_tree_add_item(mq_tree, hf_mq_lpoo_unknown5 , tvb, offset + 16, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defpersist , tvb, offset + 20, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defputresptype, tvb, offset + 24, 4, p_mq_parm->mq_int_enc); proto_tree_add_item(mq_tree, hf_mq_lpoo_defreadahead , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); @@ -3279,7 +3315,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } offset += iSize; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; if (iXtraData>0) { if (p_mq_parm->mq_opcode == MQ_TST_SPI_REPLY) @@ -3291,12 +3327,12 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_ID || p_mq_parm->mq_strucID == MQ_STRUCTID_ID_EBCDIC) && tvb_length_remaining(tvb, offset) >= 5) + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_ID || p_mq_parm->mq_strucID == MQ_STRUCTID_ID_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 5) { offset += dissect_mq_id(tvb, pinfo, mqroot_tree, offset, p_mq_parm); - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_UID || p_mq_parm->mq_strucID == MQ_STRUCTID_UID_EBCDIC) && tvb_length_remaining(tvb, offset) > 0) + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_UID || p_mq_parm->mq_strucID == MQ_STRUCTID_UID_EBCDIC) && tvb_reported_length_remaining(tvb, offset) > 0) { gint iSizeUID; /* iSizeUID = (iVersionID < 5 ? 28 : 132); guess */ @@ -3306,10 +3342,11 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) if (iSizeUID != 28 && iSizeUID != 132) iSizeUID = 0; - if (iSizeUID != 0 && tvb_length_remaining(tvb, offset) >= iSizeUID) + if (iSizeUID != 0 && tvb_reported_length_remaining(tvb, offset) >= iSizeUID) { guint8 *sUserId; sUserId = tvb_get_string_enc(wmem_packet_scope(), tvb, offset + 4, 12, p_mq_parm->mq_str_enc); + dissect_mq_addCR_colinfo(pinfo, p_mq_parm); if (strip_trailing_blanks(sUserId, 12) > 0) { col_append_fstr(pinfo->cinfo, COL_INFO, " User=%s", sUserId); @@ -3334,7 +3371,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } } offset += iSizeUID; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } offset += dissect_mq_od(tvb, pinfo, mqroot_tree, offset, p_mq_parm, &iDistributionListSize); @@ -3355,7 +3392,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) offset += iSizePMO; bPayload = TRUE; } - if (tvb_length_remaining(tvb, offset) >= 4) + if (tvb_reported_length_remaining(tvb, offset) >= 4) { if (bPayload == TRUE && (p_mq_parm->mq_opcode != MQ_TST_ASYNC_MESSAGE)) { @@ -3375,18 +3412,18 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } if (bPayload == TRUE) { - if (iSizePayload != 0 && tvb_length_remaining(tvb, offset) > 0) + if (iSizePayload != 0 && tvb_reported_length_remaining(tvb, offset) > 0) { /* For the following header structures, each structure has a "format" field which announces the type of the following structure. For dissection we do not use it and rely on the structid instead. */ guint32 iHeadersLength = 0; - if (tvb_length_remaining(tvb, offset) >= 4) + if (tvb_reported_length_remaining(tvb, offset) >= 4) { gint iSizeMD2 = 0; p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_XQH || p_mq_parm->mq_strucID == MQ_STRUCTID_XQH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 104) + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_XQH || p_mq_parm->mq_strucID == MQ_STRUCTID_XQH_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 104) { /* if MD.format == MQXMIT */ gint iSizeXQH = 104; @@ -3408,9 +3445,9 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) iHeadersLength += iSizeMD2; } - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } - if ((p_mq_parm->mq_strucID == MQ_STRUCTID_DLH || p_mq_parm->mq_strucID == MQ_STRUCTID_DLH_EBCDIC) && tvb_length_remaining(tvb, offset) >= 172) + if ((p_mq_parm->mq_strucID == MQ_STRUCTID_DLH || p_mq_parm->mq_strucID == MQ_STRUCTID_DLH_EBCDIC) && tvb_reported_length_remaining(tvb, offset) >= 172) { /* if MD.format == MQDEAD */ gint iSizeDLH = 172; @@ -3440,7 +3477,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } offset += iSizeDLH; iHeadersLength += iSizeDLH; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; } if ((p_mq_parm->mq_strucID == MQ_STRUCTID_MDE || p_mq_parm->mq_strucID == MQ_STRUCTID_MDE_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH || p_mq_parm->mq_strucID == MQ_STRUCTID_CIH_EBCDIC @@ -3448,7 +3485,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH || p_mq_parm->mq_strucID == MQ_STRUCTID_RMH_EBCDIC || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH || p_mq_parm->mq_strucID == MQ_STRUCTID_WIH_EBCDIC) - && tvb_length_remaining(tvb, offset) >= 12) + && tvb_reported_length_remaining(tvb, offset) >= 12) { /* Dissect the generic part of the other pre-defined headers */ /* We assume that only one such header is present */ @@ -3462,18 +3499,20 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) p_mq_parm->mq_head_ccsid.encod = tvb_get_guint32_endian(tvb, offset + 12, p_mq_parm->mq_int_enc); p_mq_parm->mq_head_ccsid.ccsid = tvb_get_guint32_endian(tvb, offset + 16, p_mq_parm->mq_int_enc); - if (tvb_length_remaining(tvb, offset) >= iSizeHeader) + if (tvb_reported_length_remaining(tvb, offset) >= iSizeHeader) { gint iTmp; gint iVer; + gint iLen; gint oEnc = p_mq_parm->mq_str_enc; p_mq_parm->iOfsEnc = offset + 12; p_mq_parm->iOfsCcs = offset + 16; p_mq_parm->iOfsFmt = offset + 20; - iVer=(gint)tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); - iTmp=p_mq_parm->mq_head_ccsid.ccsid; + iVer = (gint)tvb_get_guint32_endian(tvb, offset + 4, p_mq_parm->mq_int_enc); + iLen = (gint)tvb_get_guint32_endian(tvb, offset + 8, p_mq_parm->mq_int_enc); + iTmp = p_mq_parm->mq_head_ccsid.ccsid; if (iTmp == 0) iTmp = p_mq_parm->mq_md_ccsid.ccsid; @@ -3605,6 +3644,43 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) proto_tree_add_item(mq_tree, hf_mq_wih_msgtoken , tvb, offset + 72, 16, ENC_NA); proto_tree_add_item(mq_tree, hf_mq_wih_reserved , tvb, offset + 86, 32, p_mq_parm->mq_str_enc); } + else if (p_mq_parm->mq_strucID == MQ_STRUCTID_RFH || p_mq_parm->mq_strucID == MQ_STRUCTID_RFH_EBCDIC) + { + int iPos, iEnd, iCCSID; + int iLenStr; + guint8 *sStr; + + proto_tree *tree; + + proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); + iPos = offset + 32; + iEnd = offset + iLen - 32; + if ( iVer > 1 ) + { + iCCSID = (int)tvb_get_guint32_endian(tvb, iPos, p_mq_parm->mq_int_enc); + proto_tree_add_item(mq_tree, hf_mq_rfh_ccsid, tvb, iPos, 4, p_mq_parm->mq_int_enc); + iPos += 4; + iEnd -= 4; + } + else + iCCSID = iTmp; + + while (iPos < iEnd) + { + iLenStr = (int)tvb_get_guint32_endian(tvb, iPos, p_mq_parm->mq_int_enc); + sStr = tvb_get_string_enc(wmem_packet_scope(), tvb, iPos + 4, iLenStr, (iCCSID != 500) ? ENC_ASCII : ENC_EBCDIC); + if (*sStr) + strip_trailing_blanks(sStr, iLenStr); + if (*sStr) + format_text_chr(sStr, strlen((const char *)sStr), '.'); + + tree = proto_tree_add_subtree_format(mq_tree, tvb, iPos, iLenStr+4, ett_mq_rfh_ValueName, NULL, "NameValue: %s", sStr); + + proto_tree_add_item(tree, hf_mq_rfh_length, tvb, iPos, 4, p_mq_parm->mq_int_enc); + proto_tree_add_item(tree, hf_mq_rfh_string, tvb, iPos + 4, iLenStr, p_mq_parm->mq_str_enc); + iPos += (iLenStr + 4); + } + } else { proto_tree_add_item(mq_tree, hf_mq_head_flags , tvb, offset + 28, 4, p_mq_parm->mq_int_enc); @@ -3613,7 +3689,7 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) } offset += iSizeHeader; iHeadersLength += iSizeHeader; - p_mq_parm->mq_strucID = (tvb_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; + p_mq_parm->mq_strucID = (tvb_reported_length_remaining(tvb, offset) >= 4) ? tvb_get_ntohl(tvb, offset) : MQ_STRUCTID_NULL; p_mq_parm->mq_str_enc = oEnc; } } @@ -3642,10 +3718,10 @@ static void dissect_mq_pdu(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) call_dissector(data_handle, next_tvb, pinfo, mqroot_tree); } } - offset = tvb_length(tvb); + offset = tvb_reported_length(tvb); } /* After all recognised structures have been dissected, process remaining structure*/ - if (tvb_length_remaining(tvb, offset) >= 4) + if (tvb_reported_length_remaining(tvb, offset) >= 4) { p_mq_parm->mq_strucID = tvb_get_ntohl(tvb, offset); if (tree) @@ -3681,7 +3757,7 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo /* 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) + if (tvb_reported_length(tvb) < 28) return 0; memset(&mq_parm, 0, sizeof(mq_parm_t)); @@ -3713,14 +3789,28 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo if (mq_parm.mq_strucID == MQ_STRUCTID_TSHM || mq_parm.mq_strucID == MQ_STRUCTID_TSHM_EBCDIC) iMulS = 8; + /* Get the Semgnet Length */ + iSegL = tvb_get_ntohl ( tvb, 4); + if (iMulS==8) + { + mq_parm.mq_convID = tvb_get_ntohl (tvb, 8); + mq_parm.mq_rqstID = tvb_get_ntohl (tvb, 12); + } + else + { + mq_parm.mq_convID = 0; + mq_parm.mq_rqstID = 0; + } + /* Get the Encoding scheme */ iEnco = (tvb_get_guint8(tvb, 8 + iMulS) == MQ_LITTLE_ENDIAN ? ENC_LITTLE_ENDIAN : ENC_BIG_ENDIAN); + mq_parm.mq_int_enc = iEnco; /* Get the Operation Code */ iOpcd = tvb_get_guint8( tvb, 9 + iMulS); + mq_parm.mq_opcode = iOpcd; /* Get the Control Flag */ iCtlF = tvb_get_guint8( tvb, 10 + iMulS); - /* Get the Semgnet Length */ - iSegL = tvb_get_ntohl ( tvb, 4); + mq_parm.mq_ctlf1 = iCtlF; /* First Segment ? */ bSeg1st = ((iCtlF & MQ_TCF_FIRST) != 0); /* Last Segment */ @@ -3802,14 +3892,18 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo proto_item *ti = proto_tree_add_item(tree, proto_mq, tvb, 0, -1, ENC_NA); if (bMore) { - proto_item_append_text(ti, " [%s of a Reassembled MQ Segment] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + proto_item_append_text(ti, " [%s of a Reassembled MQ Segment]", + val_to_str(iOpcd, mq_opcode_vals, "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 Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + proto_item_append_text(ti, " %s", + val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)")); + dissect_mq_addCR_colinfo(pinfo, &mq_parm); + proto_item_append_text(ti, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); } mq_tree = proto_item_add_subtree(ti, ett_mq_reaasemb); @@ -3836,18 +3930,20 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo next_tvb = tvb; } dissect_mq_pdu(next_tvb, pinfo, mq_tree); - return tvb_length(tvb); + return tvb_reported_length(tvb); } else { mq_in_reassembly = TRUE; /* Reassembly in progress */ col_set_str(pinfo->cinfo, COL_PROTOCOL, "MQ"); - col_add_fstr(pinfo->cinfo, COL_INFO, "[%s of a Reassembled MQ Segment] Hdl=0x%08x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", - val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)"), + col_add_fstr(pinfo->cinfo, COL_INFO, "[%s of a Reassembled MQ Segment]", + val_to_str(iOpcd, mq_opcode_vals, "Unknown (0x%02x)")); + dissect_mq_addCR_colinfo(pinfo, &mq_parm); + col_add_fstr(pinfo->cinfo, COL_INFO, " Hdl=0x%04x GlbMsgIdx=%d, SegIdx=%d, SegLen=%d", iHdl, iGlbMsgIdx, iSegmIndex, iSegLength); dissect_mq_pdu(tvb, pinfo, mq_tree); - return tvb_length(tvb); + return tvb_reported_length(tvb); } } else @@ -3858,19 +3954,19 @@ static int reassemble_mq(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, vo /* MQ segment is the first of a unreassembled series */ col_append_str(pinfo->cinfo, COL_INFO, " [Unreassembled MQ]"); } - return tvb_length(tvb); + return tvb_reported_length(tvb); } } /* Reassembly not enabled or non-fragmented message */ dissect_mq_pdu(tvb, pinfo, tree); } - return tvb_length(tvb); + return tvb_reported_length(tvb); } static guint get_mq_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset) { - if (tvb_length_remaining(tvb, offset) >= 8) + if (tvb_reported_length_remaining(tvb, offset) >= 8) { guint32 mq_strucID = tvb_get_ntohl(tvb, 0); if ( (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC ) @@ -3884,7 +3980,7 @@ static guint get_mq_pdu_len(packet_info *pinfo _U_, tvbuff_t *tvb, int offset) static int dissect_mq_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data) { tcp_dissect_pdus(tvb, pinfo, tree, mq_desegment, 28, get_mq_pdu_len, reassemble_mq, data); - return tvb_length(tvb); + return tvb_reported_length(tvb); } static void dissect_mq_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) @@ -3895,7 +3991,7 @@ static void dissect_mq_spx(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree) static gboolean dissect_mq_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, gint iProto, void *data) { - if (tvb_length(tvb) >= 28) + if (tvb_reported_length(tvb) >= 28) { guint32 mq_strucID = tvb_get_ntohl(tvb, 0); if ( (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx || (mq_strucID & MQ_MASK_TSHx) == MQ_STRUCTID_TSHx_EBCDIC ) @@ -4356,10 +4452,10 @@ void proto_register_mq(void) { &hf_mq_lpoo_lpiopts_SAVE_ORIGIN_CTXT , {"SAVE_ORIGIN_CTXT", "mq.lpoo.opts.SAVE_ORIGIN_CTXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_LPOO_SAVE_ORIGIN_CTXT, "LPOO options SAVE_ORIGIN_CTXT", HFILL }}, { &hf_mq_lpoo_lpiopts_SAVE_IDENTITY_CTXT, {"SAVE_IDENTITY_CTXT", "mq.lpoo.opts.SAVE_IDENTITY_CTXT", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_LPOO_SAVE_IDENTITY_CTXT, "LPOO options SAVE_IDENTITY_CTXT", HFILL }}, + { &hf_mq_lpoo_unknown5 , {"Unknown5......", "mq.lpoo.unknown5", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO unknown5", HFILL }}, { &hf_mq_lpoo_defpersist , {"DefPersitence.", "mq.lpoo.defpersist", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Persitence", HFILL }}, { &hf_mq_lpoo_defputresptype, {"DefPutRespType", "mq.lpoo.defputresptype", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Put Response Type", HFILL }}, { &hf_mq_lpoo_defreadahead , {"DefReadAHead..", "mq.lpoo.defreadahead", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO Default Read AHead", HFILL }}, - { &hf_mq_lpoo_qprotect , {"qprotect......", "mq.lpoo.qprotect", FT_STRINGZ, BASE_NONE, NULL, 0x0, "LPOO queue protection", HFILL }}, { &hf_mq_lpoo_unknown6 , {"Unknown6......", "mq.lpoo.unknown6", FT_UINT32, BASE_HEX, NULL, 0x0, "LPOO unknown6", HFILL }}, { &hf_mq_lpoo_xtradata , {"ExtraData.....", "mq.lpoo.extradata", FT_UINT32, BASE_DEC, NULL, 0x0, "LPOO Extra Data", HFILL }}, @@ -4501,6 +4597,10 @@ void proto_register_mq(void) { &hf_mq_cih_inputitem , {"InputItem....", "mq.cih.inputitem" , FT_UINT32 , BASE_DEC_HEX, NULL, 0x0, "Input Item", HFILL }}, { &hf_mq_cih_reserved4 , {"Reserved4....", "mq.cih.reserved4" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Reserved 4", HFILL }}, + { &hf_mq_rfh_ccsid , {"NmeValCCSID", "mq.rfh.ccsid" , FT_INT32 , BASE_DEC | BASE_RANGE_STRING, RVALS(&GET_VALRV(ccsid)), 0x0, "RFH NameValue CCSID", HFILL }}, + { &hf_mq_rfh_length , {"Len." , "mq.rfh.length" , FT_UINT32 , BASE_DEC , NULL, 0x0, "RFH NameValue Length", HFILL }}, + { &hf_mq_rfh_string , {"Val." , "mq.rfh.string" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "RFH NameValue", HFILL }}, + { &hf_mq_rmh_flags_last , {"LAST", "mq.rmh.flags.last", FT_BOOLEAN, 32, TFS(&tfs_set_notset), MQ_MQRMHF_LAST, "MQ RMH LAST", HFILL }}, { &hf_mq_rmh_objecttype , {"ObjectType...", "mq.rmh.objecttype" , FT_STRINGZ, BASE_NONE, NULL, 0x0, "Object Type", HFILL }}, @@ -4582,6 +4682,7 @@ void proto_register_mq(void) &ett_mq_xa_xid, &ett_mq_xa_info, &ett_mq_charv, + &ett_mq_rfh_ValueName, &ett_mq_reaasemb }; diff --git a/epan/dissectors/packet-mq.h b/epan/dissectors/packet-mq.h index 04d4b18e0d..2a752dd5cb 100644 --- a/epan/dissectors/packet-mq.h +++ b/epan/dissectors/packet-mq.h @@ -65,6 +65,8 @@ typedef struct _mq_ccsid_t typedef struct _mq_parm_t { + guint32 mq_convID ; + guint32 mq_rqstID; guint32 mq_strucID ; guint32 mq_int_enc ; guint32 mq_str_enc ; |