summaryrefslogtreecommitdiff
path: root/epan/dissectors/packet-dcerpc-ndr.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-dcerpc-ndr.c')
-rw-r--r--epan/dissectors/packet-dcerpc-ndr.c22
1 files changed, 22 insertions, 0 deletions
diff --git a/epan/dissectors/packet-dcerpc-ndr.c b/epan/dissectors/packet-dcerpc-ndr.c
index a6e760bde1..dc1e01afc6 100644
--- a/epan/dissectors/packet-dcerpc-ndr.c
+++ b/epan/dissectors/packet-dcerpc-ndr.c
@@ -236,6 +236,28 @@ dissect_ndr_4or8 (tvbuff_t *tvb, gint offset, packet_info *pinfo,
}
}
+/* This is used to dissect the new datatypes, such as enums
+ that are 2 bytes in size in NDR but 4 bytes in NDR64.
+*/
+int
+dissect_ndr_2or4 (tvbuff_t *tvb, gint offset, packet_info *pinfo,
+ proto_tree *tree, guint8 *drep,
+ int hfindex, guint32 *pdata)
+{
+ dcerpc_info *di;
+
+ di=pinfo->private_data;
+
+ if (di->call_data->flags & DCERPC_IS_NDR64) {
+ return dissect_ndr_uint32(tvb, offset, pinfo, tree, drep, hfindex, pdata);
+ } else {
+ guint16 val;
+ offset = dissect_ndr_uint16(tvb, offset, pinfo, tree, drep, hfindex, &val);
+ *pdata = val;
+ return offset;
+ }
+}
+
int
PIDL_dissect_uint32 (tvbuff_t *tvb, gint offset, packet_info *pinfo,
proto_tree *tree, guint8 *drep,