diff options
author | Gregor Beck <gbeck@sernet.de> | 2013-08-30 14:01:29 +0200 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2015-11-02 17:45:33 +0000 |
commit | 3dd5e255c07aa1c470f1ed2843c44801d02c65b9 (patch) | |
tree | 15b143c6f6e1f84685c5aaaa8e4687bd66483ad8 /epan | |
parent | 8fdeb61ab6a1bebebcd5efd9116ee89cd554625d (diff) |
packet-dcerpc: add proto_tree_add_dcerpc_drep()
Change-Id: I1d3515371f50454acbcbdde75f2f1a3e614a5512
Signed-off-by: Gregor Beck <gbeck@sernet.de>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-on: https://code.wireshark.org/review/11495
Petri-Dish: Michael Mann <mmann78@netscape.net>
Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org>
Reviewed-by: Michael Mann <mmann78@netscape.net>
Diffstat (limited to 'epan')
-rw-r--r-- | epan/dissectors/packet-dcerpc.c | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/epan/dissectors/packet-dcerpc.c b/epan/dissectors/packet-dcerpc.c index 63f0bf8703..1cdab2e5c3 100644 --- a/epan/dissectors/packet-dcerpc.c +++ b/epan/dissectors/packet-dcerpc.c @@ -1212,6 +1212,26 @@ static void dissect_auth_verf(tvbuff_t *auth_tvb, packet_info *pinfo, } } +static proto_item* +proto_tree_add_dcerpc_drep(proto_tree *tree, tvbuff_t *tvb, int offset, guint8 drep[], int drep_len) +{ + const guint8 byteorder = drep[0] >> 4; + const guint8 character = drep[0] & 0x0f; + const guint8 fp = drep[1]; + proto_item *ti = proto_tree_add_bytes(tree, hf_dcerpc_drep, tvb, offset, drep_len, drep); + proto_tree *tr = proto_item_add_subtree(ti, ett_dcerpc_drep); + + proto_tree_add_uint(tr, hf_dcerpc_drep_byteorder, tvb, offset, 1, byteorder); + proto_tree_add_uint(tr, hf_dcerpc_drep_character, tvb, offset, 1, character); + proto_tree_add_uint(tr, hf_dcerpc_drep_fp, tvb, offset+1, 1, fp); + + proto_item_append_text(ti, " (Order: %s, Char: %s, Float: %s)", + val_to_str(byteorder, drep_byteorder_vals, "Unknown (%u)"), + val_to_str(character, drep_character_vals, "Unknown (%u)"), + val_to_str(fp, drep_fp_vals, "Unknown (%u)")); + return ti; +} + /* Hand off payload data to a registered dissector */ static tvbuff_t *decode_encrypted_data(tvbuff_t *data_tvb, @@ -4883,7 +4903,6 @@ dissect_dcerpc_cn(tvbuff_t *tvb, int offset, packet_info *pinfo, proto_item *ti = NULL; proto_item *tf = NULL; proto_tree *dcerpc_tree = NULL; - proto_tree *drep_tree = NULL; e_dce_cn_common_hdr_t hdr; dcerpc_auth_info auth_info; tvbuff_t *fragment_tvb; @@ -5007,13 +5026,7 @@ dissect_dcerpc_cn(tvbuff_t *tvb, int offset, packet_info *pinfo, col_append_fstr(pinfo->cinfo, COL_INFO, ", Fragment: %s", fragment_type(hdr.flags)); - if (dcerpc_tree) { - tf = proto_tree_add_bytes(dcerpc_tree, hf_dcerpc_drep, tvb, offset, 4, hdr.drep); - drep_tree = proto_item_add_subtree(tf, ett_dcerpc_drep); - } - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_byteorder, tvb, offset, 1, hdr.drep[0] >> 4); - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_character, tvb, offset, 1, hdr.drep[0] & 0x0f); - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_fp, tvb, offset+1, 1, hdr.drep[1]); + proto_tree_add_dcerpc_drep(dcerpc_tree, tvb, offset, hdr.drep, (int)sizeof (hdr.drep)); offset += (int)sizeof (hdr.drep); proto_tree_add_uint(dcerpc_tree, hf_dcerpc_cn_frag_len, tvb, offset, 2, hdr.frag_len); @@ -5777,9 +5790,7 @@ static gboolean dissect_dcerpc_dg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_) { proto_item *ti = NULL; - proto_item *tf = NULL; proto_tree *dcerpc_tree = NULL; - proto_tree *drep_tree = NULL; e_dce_dg_common_hdr_t hdr; int offset = 0; conversation_t *conv; @@ -5902,17 +5913,7 @@ dissect_dcerpc_dg(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *dat offset++; if (tree) { - tf = proto_tree_add_bytes(dcerpc_tree, hf_dcerpc_drep, tvb, offset, sizeof (hdr.drep), hdr.drep); - drep_tree = proto_item_add_subtree(tf, ett_dcerpc_drep); - if (drep_tree) { - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_byteorder, tvb, offset, 1, hdr.drep[0] >> 4); - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_character, tvb, offset, 1, hdr.drep[0] & 0x0f); - proto_tree_add_uint(drep_tree, hf_dcerpc_drep_fp, tvb, offset+1, 1, hdr.drep[1]); - proto_item_append_text(tf, " (Order: %s, Char: %s, Float: %s)", - val_to_str_const(hdr.drep[0] >> 4, drep_byteorder_vals, "Unknown"), - val_to_str_const(hdr.drep[0] & 0x0f, drep_character_vals, "Unknown"), - val_to_str_const(hdr.drep[1], drep_fp_vals, "Unknown")); - } + proto_tree_add_dcerpc_drep(dcerpc_tree, tvb, offset, hdr.drep, (int)sizeof (hdr.drep)); } offset += (int)sizeof (hdr.drep); |