summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Mann <mmann78@netscape.net>2015-11-25 15:18:02 -0500
committerAnders Broman <a.broman58@gmail.com>2015-11-26 05:45:48 +0000
commit013bf21eb375cb7c27c2a8bd50a2690a344c8c3d (patch)
treeb454250106638154c6193410706b74b8b2c7e0e8
parent805136d4ad822aed93392c8e976792a8581671e7 (diff)
downloadwireshark-013bf21eb375cb7c27c2a8bd50a2690a344c8c3d.tar.gz
[RUDP] Use proto_tree_add_bitmask instead of something homegrown.
Also don't put calls to dissectors under an if (tree), even for the data dissector. Change-Id: Ia897d7ae7aa61c89e92949225a54f40d56c1df74 Reviewed-on: https://code.wireshark.org/review/12155 Reviewed-by: Alexis La Goutte <alexis.lagoutte@gmail.com> Petri-Dish: Alexis La Goutte <alexis.lagoutte@gmail.com> Tested-by: Petri Dish Buildbot <buildbot-no-reply@wireshark.org> Reviewed-by: Anders Broman <a.broman58@gmail.com>
-rw-r--r--epan/dissectors/packet-rudp.c64
1 files changed, 29 insertions, 35 deletions
diff --git a/epan/dissectors/packet-rudp.c b/epan/dissectors/packet-rudp.c
index fadf614e43..36e737bc81 100644
--- a/epan/dissectors/packet-rudp.c
+++ b/epan/dissectors/packet-rudp.c
@@ -86,52 +86,46 @@ static dissector_handle_t data_handle = NULL;
static int
dissect_rudp(tvbuff_t *tvb, packet_info *pinfo _U_ , proto_tree *tree, void* data _U_)
{
- tvbuff_t * next_tvb = NULL;
- proto_tree *rudp_tree = NULL, *flags_tree;
- proto_item *ti = NULL;
- int flags[] = { 0, 0, 0, 0, 0, 0, 0, 0 };
- int i;
+ tvbuff_t * next_tvb;
+ proto_tree *rudp_tree;
+ proto_item *ti;
guint8 hlen;
-
- flags[0] = hf_rudp_flags_syn;
- flags[1] = hf_rudp_flags_ack;
- flags[2] = hf_rudp_flags_eak;
- flags[3] = hf_rudp_flags_rst;
- flags[4] = hf_rudp_flags_nul;
- flags[5] = hf_rudp_flags_chk;
- flags[6] = hf_rudp_flags_tcs;
- flags[7] = hf_rudp_flags_0;
+ static const int * flags[] = {
+ &hf_rudp_flags_syn,
+ &hf_rudp_flags_ack,
+ &hf_rudp_flags_eak,
+ &hf_rudp_flags_rst,
+ &hf_rudp_flags_nul,
+ &hf_rudp_flags_chk,
+ &hf_rudp_flags_tcs,
+ &hf_rudp_flags_0,
+ NULL
+ };
hlen = tvb_get_guint8(tvb, 1);
col_set_str(pinfo->cinfo, COL_PROTOCOL, "RUDP");
col_clear(pinfo->cinfo, COL_INFO);
- if (tree) {
- ti = proto_tree_add_item(tree, proto_rudp, tvb, 0, hlen, ENC_NA);
- rudp_tree = proto_item_add_subtree(ti, ett_rudp);
-
- ti = proto_tree_add_item(rudp_tree, hf_rudp_flags, tvb, 0, 1, ENC_BIG_ENDIAN);
- flags_tree = proto_item_add_subtree(ti, ett_rudp_flags);
+ ti = proto_tree_add_item(tree, proto_rudp, tvb, 0, hlen, ENC_NA);
+ rudp_tree = proto_item_add_subtree(ti, ett_rudp);
- for (i = 0; i < 8; i++)
- proto_tree_add_item(flags_tree, flags[i], tvb, 0, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_bitmask(rudp_tree, tvb, 0, hf_rudp_flags, ett_rudp_flags, flags, ENC_BIG_ENDIAN);
- proto_tree_add_item(rudp_tree, hf_rudp_hlen, tvb, 1, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(rudp_tree, hf_rudp_seq, tvb, 2, 1, ENC_BIG_ENDIAN);
- proto_tree_add_item(rudp_tree, hf_rudp_ack, tvb, 3, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rudp_tree, hf_rudp_hlen, tvb, 1, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rudp_tree, hf_rudp_seq, tvb, 2, 1, ENC_BIG_ENDIAN);
+ proto_tree_add_item(rudp_tree, hf_rudp_ack, tvb, 3, 1, ENC_BIG_ENDIAN);
- /* If the header is more than 4 bytes the next 2 bytes are the checksum */
- if (hlen > 4) {
- proto_tree_add_item(rudp_tree, hf_rudp_cksum, tvb, 4, 2, ENC_BIG_ENDIAN);
- }
+ /* If the header is more than 4 bytes the next 2 bytes are the checksum */
+ if (hlen > 4) {
+ proto_tree_add_item(rudp_tree, hf_rudp_cksum, tvb, 4, 2, ENC_BIG_ENDIAN);
+ }
- /* If we have even more bytes their meaning is unknown - we have seen this
- * in live captures */
- if (hlen > 6) {
- next_tvb = tvb_new_subset_length(tvb, 6, hlen-6);
- call_dissector(data_handle, next_tvb, pinfo, rudp_tree);
- }
+ /* If we have even more bytes their meaning is unknown - we have seen this
+ * in live captures */
+ if (hlen > 6) {
+ next_tvb = tvb_new_subset_length(tvb, 6, hlen-6);
+ call_dissector(data_handle, next_tvb, pinfo, rudp_tree);
}
next_tvb = tvb_new_subset_remaining(tvb, hlen);