aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-ndr.c
diff options
context:
space:
mode:
authorsahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>2009-10-03 04:49:04 +0000
committersahlberg <sahlberg@f5534014-38df-0310-8fa8-9805f1628bb7>2009-10-03 04:49:04 +0000
commite7d3fac73ccb585b173c9fb397a26cee78b7b110 (patch)
tree306ae8c6a2c9b783d74c4c84de5200c4480c417d /epan/dissectors/packet-dcerpc-ndr.c
parente7952e86afa691324c193046d3a3e71ec73fe649 (diff)
add a helper that supports decoding either a 16 or 32 bit integer based
on whether nrd or ndr64 is used. git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@30263 f5534014-38df-0310-8fa8-9805f1628bb7
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,