aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcom.c
diff options
context:
space:
mode:
authorulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2006-06-28 18:51:24 +0000
committerulfl <ulfl@f5534014-38df-0310-8fa8-9805f1628bb7>2006-06-28 18:51:24 +0000
commitaef975762d1558ae1d4e400239479db7bc36388b (patch)
treed962a9dec9a508aa481f18816bb11fa06454fc13 /epan/dissectors/packet-dcom.c
parentcefda4dc7b2ec4b955b7d5b6ddc2f913e684695c (diff)
add dissection of custom marshalled OBJREF's (as far as known)
git-svn-id: http://anonsvn.wireshark.org/wireshark/trunk@18596 f5534014-38df-0310-8fa8-9805f1628bb7
Diffstat (limited to 'epan/dissectors/packet-dcom.c')
-rw-r--r--epan/dissectors/packet-dcom.c22
1 files changed, 19 insertions, 3 deletions
diff --git a/epan/dissectors/packet-dcom.c b/epan/dissectors/packet-dcom.c
index f41dd6e1a6..49ee13f437 100644
--- a/epan/dissectors/packet-dcom.c
+++ b/epan/dissectors/packet-dcom.c
@@ -137,6 +137,8 @@ static int hf_dcom_objref_flags = -1;
static int hf_dcom_objref_iid = -1;
static int hf_dcom_objref_clsid = -1;
static int hf_dcom_objref_resolver_address = -1;
+static int hf_dcom_objref_cbextension = -1;
+static int hf_dcom_objref_size = -1;
gint ett_dcom_stdobjref = -1;
static int hf_dcom_stdobjref = -1;
@@ -348,6 +350,7 @@ const value_string dcom_hresult_vals[] = {
{ 0x80010108, "RPC_E_DISCONNECTED" },
{ 0x80010113, "RPC_E_INVALID_IPID" },
+ { 0x8001011F, "RPC_E_TIMEOUT" },
{ 0x80020003, "DISP_E_MEMBERNOTFOUND" },
{ 0x80020004, "DISP_E_PARAMNOTFOUND" },
@@ -1577,6 +1580,8 @@ dissect_dcom_OBJREF(tvbuff_t *tvb, gint offset, packet_info *pinfo,
proto_item *sub_item;
proto_tree *sub_tree;
guint32 u32SubStart;
+ guint32 u32CBExtension;
+ guint32 u32Size;
/* add subtree header */
@@ -1608,8 +1613,15 @@ dissect_dcom_OBJREF(tvbuff_t *tvb, gint offset, packet_info *pinfo,
offset = dissect_dcom_DUALSTRINGARRAY(tvb, offset, pinfo, sub_tree, drep,
hf_dcom_objref_resolver_address);
break;
- case(0x4): /* XXX: custom */
- offset = dissect_dcom_tobedone_data(tvb, offset, pinfo, sub_tree, drep, 10000);
+ case(0x4): /* custom */
+ offset = dissect_dcom_UUID(tvb, offset, pinfo, sub_tree, drep,
+ hf_dcom_objref_clsid, &clsid);
+ offset = dissect_dcom_DWORD(tvb, offset, pinfo, sub_tree, drep,
+ hf_dcom_objref_cbextension, &u32CBExtension);
+ offset = dissect_dcom_DWORD(tvb, offset, pinfo, sub_tree, drep,
+ hf_dcom_objref_size, &u32Size);
+ /* the following data depends on the CLSID, no docs available on this */
+ offset = dissect_dcom_tobedone_data(tvb, offset, pinfo, sub_tree, drep, u32Size);
break;
}
@@ -1776,7 +1788,11 @@ proto_register_dcom (void)
{ &hf_dcom_objref_clsid,
{ "CLSID", "dcom.objref.clsid", FT_STRING, BASE_NONE, NULL, 0x0, "", HFILL }},
{ &hf_dcom_objref_resolver_address,
- { "ResolverAddress", "dcom.objref.resolver_address", FT_NONE, BASE_NONE, NULL, 0x0, "", HFILL }}
+ { "ResolverAddress", "dcom.objref.resolver_address", FT_NONE, BASE_NONE, NULL, 0x0, "", HFILL }},
+ { &hf_dcom_objref_cbextension,
+ { "CBExtension", "dcom.objref.cbextension", FT_UINT32, BASE_DEC, NULL, 0x0, "Size of extension data", HFILL }},
+ { &hf_dcom_objref_size,
+ { "Size", "dcom.objref.size", FT_UINT32, BASE_DEC, NULL, 0x0, "", HFILL }}
};
static hf_register_info hf_dcom_stdobjref_array[] = {