aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2009-10-01 08:55:25 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2009-10-01 08:55:25 +0000
commit2ea2589afb938ad3d61635e9a55880af72424c1a (patch)
tree680ee88b7424678ce4df8dbe44db1abc63d2d0fd /epan/dissectors/packet-dcerpc.c
parentf9fb2a7d7adeb5b5a18d37a77a3d59c6f20a108c (diff)
we need to copy the information about the transport syntax, i.e. i fit
is ndr64 or not, from the bind information to the data we store for each individual pdu, since the trnasport syntax may change dynamically back and forth between "normal" and "ndr64" on the same conversation. svn path=/trunk/; revision=30226
Diffstat (limited to 'epan/dissectors/packet-dcerpc.c')
-rw-r--r--epan/dissectors/packet-dcerpc.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c
index 9fe8320605..1f4be1468a 100644
--- a/epan/dissectors/packet-dcerpc.c
+++ b/epan/dissectors/packet-dcerpc.c
@@ -3363,7 +3363,7 @@ dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo,
call_value=se_alloc (sizeof (dcerpc_call_value));
call_value->uuid = bind_value->uuid;
call_value->ver = bind_value->ver;
- call_value->object_uuid = obj_id;
+ call_value->object_uuid = obj_id;
call_value->opnum = opnum;
call_value->req_frame=pinfo->fd->num;
call_value->req_time=pinfo->fd->abs_ts;
@@ -3372,6 +3372,11 @@ dissect_dcerpc_cn_rqst (tvbuff_t *tvb, gint offset, packet_info *pinfo,
call_value->se_data = NULL;
call_value->private_data = NULL;
call_value->pol = NULL;
+ call_value->flags = 0;
+ if (!memcmp(&bind_value->transport, &ndr64_uuid, sizeof(ndr64_uuid))) {
+ call_value->flags |= DCERPC_IS_NDR64;
+ }
+
g_hash_table_insert (dcerpc_cn_calls, call_key, call_value);
new_matched_key = se_alloc(sizeof (dcerpc_matched_key));
@@ -3643,6 +3648,7 @@ dissect_dcerpc_cn_fault (tvbuff_t *tvb, gint offset, packet_info *pinfo,
new_matched_key = se_alloc(sizeof (dcerpc_matched_key));
*new_matched_key = matched_key;
g_hash_table_insert (dcerpc_matched, new_matched_key, call_value);
+
value = call_value;
if(call_value->rep_frame==0){
call_value->rep_frame=pinfo->fd->num;
@@ -4543,6 +4549,9 @@ dissect_dcerpc_dg_rqst (tvbuff_t *tvb, int offset, packet_info *pinfo,
call_value->se_data = NULL;
call_value->private_data = NULL;
call_value->pol = NULL;
+ /* NDR64 is not available on dg transports ?*/
+ call_value->flags = 0;
+
g_hash_table_insert (dcerpc_dg_calls, call_key, call_value);
new_matched_key = se_alloc(sizeof (dcerpc_matched_key));