summaryrefslogtreecommitdiff
path: root/epan
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
parentf9fb2a7d7adeb5b5a18d37a77a3d59c6f20a108c (diff)
downloadwireshark-2ea2589afb938ad3d61635e9a55880af72424c1a.tar.gz
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')
-rw-r--r--epan/dissectors/packet-dcerpc.c11
-rw-r--r--epan/dissectors/packet-dcerpc.h4
2 files changed, 13 insertions, 2 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));
diff --git a/epan/dissectors/packet-dcerpc.h b/epan/dissectors/packet-dcerpc.h
index bb76ce4c46..9731b53001 100644
--- a/epan/dissectors/packet-dcerpc.h
+++ b/epan/dissectors/packet-dcerpc.h
@@ -302,13 +302,15 @@ typedef struct _dcerpc_call_value {
*/
void *private_data; /* XXX This will later be renamed as ep_data */
e_ctx_hnd *pol; /* policy handle tracked between request/response*/
+#define DCERPC_IS_NDR64 0x00000001
+ guint32 flags; /* flags for this transaction */
} dcerpc_call_value;
typedef struct _dcerpc_info {
conversation_t *conv; /* Which TCP stream we are in */
guint32 call_id; /* Context id for this call */
guint16 smb_fid; /* FID for DCERPC over SMB */
- guint8 ptype; /* packet type: PDU_REQ, PDU_RESP, ... */
+ guint8 ptype; /* packet type: PDU_REQ, PDU_RESP, ... */
gboolean conformant_run;
gint32 conformant_eaten; /* how many bytes did the conformant run eat?*/
guint32 array_max_count; /* max_count for conformant arrays */