aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-ndr.c
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2013-10-21 18:25:41 +0000
committerMichael Mann <mmann78@netscape.net>2013-10-21 18:25:41 +0000
commitac7caf7007ffa128b859f9c8d7e3e2a33adca7ae (patch)
tree66e86086200c857a9157b77ac759d4024eac4695 /epan/dissectors/packet-dcerpc-ndr.c
parentcc0bba9e4b660eb2070cd028518947a782222f52 (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.c67
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)