diff options
author | Michael Mann <mmann78@netscape.net> | 2013-10-21 18:25:41 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2013-10-21 18:25:41 +0000 |
commit | ac7caf7007ffa128b859f9c8d7e3e2a33adca7ae (patch) | |
tree | 66e86086200c857a9157b77ac759d4024eac4695 /epan/dissectors/packet-dcerpc-ndr.c | |
parent | cc0bba9e4b660eb2070cd028518947a782222f52 (diff) |
Add APIs for PIDL generated code to return the value of the integer that was dissected. Bug 9305 (https://bugs.wireshark.org/bugzilla/show_bug.cgi?id=9305).
From Matthieu Patou
svn path=/trunk/; revision=52741
Diffstat (limited to 'epan/dissectors/packet-dcerpc-ndr.c')
-rw-r--r-- | epan/dissectors/packet-dcerpc-ndr.c | 67 |
1 files changed, 55 insertions, 12 deletions
diff --git a/epan/dissectors/packet-dcerpc-ndr.c b/epan/dissectors/packet-dcerpc-ndr.c index 124aa55b85..0f4b253bed 100644 --- a/epan/dissectors/packet-dcerpc-ndr.c +++ b/epan/dissectors/packet-dcerpc-ndr.c @@ -62,9 +62,9 @@ dissect_ndr_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo, } int -PIDL_dissect_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - int hfindex, guint32 param _U_) +PIDL_dissect_uint8_val(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param, guint8 *pval) { dcerpc_info *di; guint8 val; @@ -109,10 +109,21 @@ PIDL_dissect_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo, col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, valstr); } + if (pval) { + *pval = val; + } return offset; } +int +PIDL_dissect_uint8(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param) +{ + return PIDL_dissect_uint8_val(tvb, offset, pinfo, tree, drep, hfindex, param, NULL); +} + int dissect_ndr_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, @@ -141,9 +152,9 @@ dissect_ndr_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, } int -PIDL_dissect_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - int hfindex, guint32 param _U_) +PIDL_dissect_uint16_val(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param, guint16 *pval) { dcerpc_info *di; guint16 val; @@ -192,10 +203,21 @@ PIDL_dissect_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, valstr); } + if (pval) { + *pval = val; + } return offset; } int +PIDL_dissect_uint16(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param _U_) +{ + return PIDL_dissect_uint16_val(tvb, offset, pinfo, tree, drep, hfindex, param, NULL); +} + +int dissect_ndr_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hfindex, guint32 *pdata) @@ -270,9 +292,9 @@ dissect_ndr_uint1632(tvbuff_t *tvb, gint offset, packet_info *pinfo, } int -PIDL_dissect_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo, +PIDL_dissect_uint32_val(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, - int hfindex, guint32 param) + int hfindex, guint32 param, guint32 *rval) { dcerpc_info *di; guint32 val; @@ -320,10 +342,20 @@ PIDL_dissect_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo, col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, valstr); } - + if (rval != NULL) { + *rval = val; + } return offset; } +int +PIDL_dissect_uint32(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param) +{ + return PIDL_dissect_uint32_val(tvb, offset, pinfo, tree, drep, hfindex, param, NULL); +} + /* Double uint32 This function dissects the 64bit datatype that is common for ms interfaces and which is 32bit aligned. @@ -386,9 +418,9 @@ dissect_ndr_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo, } int -PIDL_dissect_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo, - proto_tree *tree, guint8 *drep, - int hfindex, guint32 param _U_) +PIDL_dissect_uint64_val(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param, guint64 *pval) { dcerpc_info *di; guint64 val; @@ -436,10 +468,21 @@ PIDL_dissect_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo, col_append_fstr(pinfo->cinfo, COL_INFO," %s:%s", hf_info->name, valstr); } + if (pval) { + *pval = val; + } return offset; } int +PIDL_dissect_uint64(tvbuff_t *tvb, gint offset, packet_info *pinfo, + proto_tree *tree, guint8 *drep, + int hfindex, guint32 param) +{ + return PIDL_dissect_uint64_val(tvb, offset, pinfo, tree, drep, hfindex, param, NULL); +} + +int dissect_ndr_float(tvbuff_t *tvb, gint offset, packet_info *pinfo, proto_tree *tree, guint8 *drep, int hfindex, gfloat *pdata) |